annotate src/tools/xml_tools.py @ 1886:f3db27508b31

jp (blog/preview): inotify improvments: - InotifyError are catched (can happen if file is deleted during preview for instance) - handle IN_DELETE_SELF event which happen when editor write content in a new file and switch to it (tested with vim)
author Goffi <goffi@goffi.org>
date Sat, 05 Mar 2016 19:24:10 +0100
parents c271087d2020
children 29564cec913f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
d17772b0fe22 copyright update
Goffi <goffi@goffi.org>
parents: 1750
diff changeset
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
bfabeedbf32e core: i18n refactoring:
Goffi <goffi@goffi.org>
parents: 762
diff changeset
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
17bd09cd1001 core: misc bug fixes
Goffi <goffi@goffi.org>
parents: 630
diff changeset
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
1818
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
32 import htmlentitydefs
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
33 import re
977
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
34
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
35 """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
36
796
46aa5ada61bf core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
37 SAT_FORM_PREFIX = "SAT_FORM_"
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
38 SAT_PARAM_SEPARATOR = "_XMLUI_PARAM_" # used to have unique elements names
1818
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
39 html_entity_re = re.compile(r'&([a-zA-Z]+?);')
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
40 XML_ENTITIES = ('quot', 'amp', 'apos', 'lt', 'gt')
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
41
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
42
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
43 # Helper functions
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
44
1084
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
45 def _dataFormField2XMLUIData(field, read_only=False):
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
46 """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
47
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
48 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
49 @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
50 @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
51 @return: a tuple (widget_type, widget_args, widget_kwargs)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
52 """
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
53 widget_args = [field.value]
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
54 widget_kwargs = {}
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
55 if field.fieldType == 'fixed' or field.fieldType is None:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
56 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
57 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
58 if field.label is None:
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 981
diff changeset
59 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
60 field.value = ""
97ee7594c788 core (xmlui): fixed types with empty value are now correctly managed in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents: 820
diff changeset
61 else:
97ee7594c788 core (xmlui): fixed types with empty value are now correctly managed in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents: 820
diff changeset
62 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
63 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
64 widget_args[0] = field.value
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
65 elif field.fieldType == 'text-single':
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
66 widget_type = "string"
1084
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
67 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
68 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
69 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
70 widget_kwargs['read_only'] = read_only
1070
ad023e60da8c core (XMLUI): management of text-multi in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents: 1069
diff changeset
71 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
72 widget_type = "textbox"
1070
ad023e60da8c core (XMLUI): management of text-multi in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents: 1069
diff changeset
73 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
74 widget_kwargs['read_only'] = read_only
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
75 elif field.fieldType == 'text-private':
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
76 widget_type = "password"
1084
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
77 widget_kwargs['read_only'] = read_only
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
78 elif field.fieldType == 'boolean':
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
79 widget_type = "bool"
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
80 if widget_args[0] is None:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
81 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
82 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
83 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
84 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
85 widget_kwargs['read_only'] = read_only
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
86 elif field.fieldType == 'list-single':
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
87 widget_type = "list"
810
b11df74e49d2 core (XMLUI): fixed labels management for lists in _dataFormField2XMLUIData
Goffi <goffi@goffi.org>
parents: 805
diff changeset
88 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
89 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
90 widget_args = []
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
91 else:
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 981
diff changeset
92 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
93 widget_type = "string"
1084
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
94 widget_kwargs['read_only'] = read_only
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
95
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
96 if field.var:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
97 widget_kwargs["name"] = field.var
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
98
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
99 return widget_type, widget_args, widget_kwargs
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
1084
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
102 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
103 """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
104
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
105 @param form_ui (XMLUI): XMLUI instance
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
106 @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
107 @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
108 @return: the completed XMLUI instance
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
109 """
102
94011f553cd0 misc bugfixes
Goffi <goffi@goffi.org>
parents: 95
diff changeset
110 if form.instructions:
105
d2630fba8dfd params to XMLUI tools
Goffi <goffi@goffi.org>
parents: 104
diff changeset
111 form_ui.addText('\n'.join(form.instructions), 'instructions')
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
112
805
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
113 form_ui.changeContainer("pairs")
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
114
102
94011f553cd0 misc bugfixes
Goffi <goffi@goffi.org>
parents: 95
diff changeset
115 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
116 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
117 label = field.label or field.var
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
118 if label:
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
119 form_ui.addLabel(label)
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
120 else:
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
121 form_ui.addEmpty()
103
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
122
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
123 form_ui.addWidget(widget_type, *widget_args, **widget_kwargs)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
124
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
125 return form_ui
37
a61beb21d16d Gateway registration, unregistration & edition
Goffi <goffi@goffi.org>
parents: 35
diff changeset
126
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
127
1084
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
128 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
129 """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
130
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
131 @param form (data_form.Form): a Form instance
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
132 @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
133 @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
134 @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
135 @return: XMLUI instance
1069
8e1f30aa3975 core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents: 1067
diff changeset
136 """
8e1f30aa3975 core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents: 1067
diff changeset
137 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
138 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
139
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
140
1507
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
141 def dataFormResult2XMLUIData(form_xml):
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
142 """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
143
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
144 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
145 @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
146 @return: a couple (headers, result_list):
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
147 - 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
148 - 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
149 """
1500
c7c872a40e56 tools (xml_tools): keeps data form result headers sorted
souliane <souliane@mailoo.org>
parents: 1499
diff changeset
150 headers = OrderedDict()
630
0b914394e74f core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents: 615
diff changeset
151 try:
0b914394e74f core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents: 615
diff changeset
152 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
153 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
154 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
155
660
69a8bfd266a5 core, plugins: fixed bad use of children instead of elements() for domish.Element instances.
Goffi <goffi@goffi.org>
parents: 655
diff changeset
156 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
157 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
158 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
159 name = elt["var"]
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
160 label = elt.attributes.get('label', '')
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
161 type_ = elt.attributes.get('type')
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
162 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
163
0b914394e74f core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents: 615
diff changeset
164 if not headers:
684
969562c4761b core (tools): small fix in using imported methods
souliane <souliane@mailoo.org>
parents: 660
diff changeset
165 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
166
1507
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
167 xmlui_data = []
630
0b914394e74f core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents: 615
diff changeset
168 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
169
0b914394e74f core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents: 615
diff changeset
170 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
171 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
172 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
173 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
174 continue
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
175 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
176
1507
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
177 xmlui_data.append(_dataFormField2XMLUIData(field))
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
178
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
179 return headers, xmlui_data
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
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
182 def XMLUIData2AdvancedList(xmlui, headers, xmlui_data):
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
183 """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
184
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
185 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
186 @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
187 @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
188 @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
189 @return: the completed XMLUI instance
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
190 """
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
191 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
192 xmlui.changeContainer(adv_list)
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
193
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
194 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
195 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
196
803
f100fd8d279f core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents: 802
diff changeset
197 return xmlui
630
0b914394e74f core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents: 615
diff changeset
198
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
199
1507
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
200 def dataFormResult2AdvancedList(xmlui, form_xml):
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
201 """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
202
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
203 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
204 @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
205 @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
206 @return: the completed XMLUI instance
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
207 """
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
208 headers, xmlui_data = dataFormResult2XMLUIData(form_xml)
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
209 XMLUIData2AdvancedList(xmlui, headers, xmlui_data)
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
210
84250128e425 tools (xml_tools): split dataFormResult2AdvancedList in dataFormResult2XMLUIData and XMLUIData2AdvancedList
souliane <souliane@mailoo.org>
parents: 1504
diff changeset
211
1069
8e1f30aa3975 core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents: 1067
diff changeset
212 def dataFormResult2XMLUI(form_elt, session_id=None):
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
213 """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
214
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
215 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
216 @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
217 @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
218 @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
219 """
1069
8e1f30aa3975 core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents: 1067
diff changeset
220 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
221 try:
8e1f30aa3975 core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents: 1067
diff changeset
222 dataFormResult2AdvancedList(xml_ui, form_elt)
8e1f30aa3975 core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents: 1067
diff changeset
223 except exceptions.DataError:
8e1f30aa3975 core (XMLUI): data form result now manage generic data set
Goffi <goffi@goffi.org>
parents: 1067
diff changeset
224 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
225 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
226 return xml_ui
590
56531f9e9ac7 Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
227
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
228
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
229 def _cleanValue(value):
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
230 """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
231
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 @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
233 @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
234 """
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 # 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
236 # 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
237 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
238 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
239 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
240
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
241
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
242 def XMLUIResult2DataFormResult(xmlui_data):
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
243 """ Extract form data from a XMLUI return.
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
244
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
245 @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
246 @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
247 """
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
248 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
249
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
250
805
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
251 def formEscape(name):
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
252 """Return escaped name for forms.
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
253
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
254 @param name (unicode): form name
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
255 @return: unicode
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
256 """
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
257 return u"%s%s" % (SAT_FORM_PREFIX, name)
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
258
805
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
259
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
260 def XMLUIResultToElt(xmlui_data):
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
261 """Construct result domish.Element from XMLUI result.
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
262
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
263 @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
264 @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
265 """
805
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
266 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
267 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
268 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
269
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
270
102
94011f553cd0 misc bugfixes
Goffi <goffi@goffi.org>
parents: 95
diff changeset
271 def tupleList2dataForm(values):
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
272 """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
273
1472
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
274 @param values (list): list of tuples
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
275 @return: data_form.Form
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
276 """
102
94011f553cd0 misc bugfixes
Goffi <goffi@goffi.org>
parents: 95
diff changeset
277 form = data_form.Form('submit')
94011f553cd0 misc bugfixes
Goffi <goffi@goffi.org>
parents: 95
diff changeset
278 for value in values:
94011f553cd0 misc bugfixes
Goffi <goffi@goffi.org>
parents: 95
diff changeset
279 field = data_form.Field(var=value[0], value=value[1])
94011f553cd0 misc bugfixes
Goffi <goffi@goffi.org>
parents: 95
diff changeset
280 form.addField(field)
37
a61beb21d16d Gateway registration, unregistration & edition
Goffi <goffi@goffi.org>
parents: 35
diff changeset
281
102
94011f553cd0 misc bugfixes
Goffi <goffi@goffi.org>
parents: 95
diff changeset
282 return form
103
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
283
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
284
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
285 def paramsXML2XMLUI(xml):
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
286 """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
287
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
288 @param xml (unicode)
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
289 @return: XMLUI
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
290 """
1476
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
291 # TODO: refactor params and use Twisted directly to parse XML
214
e178e8f6d13a fixed some unicode issue
Goffi <goffi@goffi.org>
parents: 183
diff changeset
292 params_doc = minidom.parseString(xml.encode('utf-8'))
105
d2630fba8dfd params to XMLUI tools
Goffi <goffi@goffi.org>
parents: 104
diff changeset
293 top = params_doc.documentElement
d2630fba8dfd params to XMLUI tools
Goffi <goffi@goffi.org>
parents: 104
diff changeset
294 if top.nodeName != 'params':
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
295 raise exceptions.DataError(_('INTERNAL ERROR: parameters xml not valid'))
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
296
105
d2630fba8dfd params to XMLUI tools
Goffi <goffi@goffi.org>
parents: 104
diff changeset
297 param_ui = XMLUI("param", "tabs")
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
298 tabs_cont = param_ui.current_container
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
299
105
d2630fba8dfd params to XMLUI tools
Goffi <goffi@goffi.org>
parents: 104
diff changeset
300 for category in top.getElementsByTagName("category"):
796
46aa5ada61bf core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
301 category_name = category.getAttribute('name')
183
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 160
diff changeset
302 label = category.getAttribute('label')
796
46aa5ada61bf core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
303 if not category_name:
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
304 raise exceptions.DataError(_('INTERNAL ERROR: params categories must have a name'))
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
305 tabs_cont.addTab(category_name, label=label, container=PairsContainer)
105
d2630fba8dfd params to XMLUI tools
Goffi <goffi@goffi.org>
parents: 104
diff changeset
306 for param in category.getElementsByTagName("param"):
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
307 widget_kwargs = {}
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
308
796
46aa5ada61bf core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
309 param_name = param.getAttribute('name')
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
310 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
311 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
312 if not param_name and type_ != 'text':
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
313 raise exceptions.DataError(_('INTERNAL ERROR: params must have a name'))
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
314
105
d2630fba8dfd params to XMLUI tools
Goffi <goffi@goffi.org>
parents: 104
diff changeset
315 value = param.getAttribute('value') or None
106
138d82f64b6f plugin CS: friends parsing
Goffi <goffi@goffi.org>
parents: 105
diff changeset
316 callback_id = param.getAttribute('callback_id') or None
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
317
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
318 if type_ == 'list':
1476
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
319 options, selected = _paramsGetListOptions(param)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
320 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
321 widget_kwargs['selected'] = selected
1476
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
322 elif type_ == 'jids_list':
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
323 widget_kwargs['jids'] = _paramsGetListJids(param)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
324
865
3ee2ec7ec010 core (xmlui), frontends: handling of "text" type in params xml + bug fixes
Goffi <goffi@goffi.org>
parents: 863
diff changeset
325 if type_ in ("button", "text"):
106
138d82f64b6f plugin CS: friends parsing
Goffi <goffi@goffi.org>
parents: 105
diff changeset
326 param_ui.addEmpty()
803
f100fd8d279f core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents: 802
diff changeset
327 value = param_label
106
138d82f64b6f plugin CS: friends parsing
Goffi <goffi@goffi.org>
parents: 105
diff changeset
328 else:
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
329 param_ui.addLabel(param_label or param_name)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
330
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
331 if value:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
332 widget_kwargs["value"] = value
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
333
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
334 if callback_id:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
335 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
336 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
337 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
338 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
339 widget_kwargs['fields_back'] = others
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
340
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
341 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
342
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
343 param_ui.addWidget(type_, **widget_kwargs)
105
d2630fba8dfd params to XMLUI tools
Goffi <goffi@goffi.org>
parents: 104
diff changeset
344
d2630fba8dfd params to XMLUI tools
Goffi <goffi@goffi.org>
parents: 104
diff changeset
345 return param_ui.toXml()
d2630fba8dfd params to XMLUI tools
Goffi <goffi@goffi.org>
parents: 104
diff changeset
346
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
347
1476
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
348 def _paramsGetListOptions(param):
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
349 """Retrieve the options for list element.
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
350
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
351 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
352 @param param (domish.Element): element
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
353 @return: a tuple (options, selected_value)
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
354 """
968
75f3b3b430ff tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents: 910
diff changeset
355 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
356 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
357 elems = param.getElementsByTagName("option")
655
56f8a9c99194 core, primitivus: better support for parameter of type list
souliane <souliane@mailoo.org>
parents: 645
diff changeset
358 if len(elems) == 0:
56f8a9c99194 core, primitivus: better support for parameter of type list
souliane <souliane@mailoo.org>
parents: 645
diff changeset
359 return []
968
75f3b3b430ff tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents: 910
diff changeset
360 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
361 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
362 return (options, selected)
655
56f8a9c99194 core, primitivus: better support for parameter of type list
souliane <souliane@mailoo.org>
parents: 645
diff changeset
363
1476
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
364 def _paramsGetListJids(param):
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
365 """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
366
1476
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
367 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
368 @param param (domish.Element): element
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
369 @return: a list of jids
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
370 """
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
371 elems = param.getElementsByTagName("jid")
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
372 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
373 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
374 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
375 return jids
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
376
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
377
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
378 ### XMLUI Elements ###
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
379
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 class Element(object):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
382 """ Base XMLUI element """
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
383 type = None
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
384
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
385 def __init__(self, xmlui, parent=None):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
386 """Create a container element
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
387
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
388 @param xmlui: XMLUI instance
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
389 @parent: parent element
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
390 """
1475
7ac073d2e7e0 core(xmlui): removed useless parenthesis around assert
Goffi <goffi@goffi.org>
parents: 1473
diff changeset
391 assert self.type is not None
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
392 if not hasattr(self, 'elem'):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
393 self.elem = parent.xmlui.doc.createElement(self.type)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
394 self.xmlui = xmlui
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
395 if parent is not None:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
396 parent.append(self)
803
f100fd8d279f core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents: 802
diff changeset
397 self.parent = parent
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
398
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
399 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
400 """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
401
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
402 @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
403 @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
404 """
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
405 self.elem.appendChild(child.elem)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
406 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
407 return child
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
408
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 class TopElement(Element):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
411 """ Main XML Element """
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
412 type = 'top'
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 def __init__(self, xmlui):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
415 self.elem = xmlui.doc.documentElement
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
416 super(TopElement, self).__init__(xmlui)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
417
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
418
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
419 class TabElement(Element):
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
420 """ Used by TabsContainer to give name and label to tabs."""
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
421 type = 'tab'
630
0b914394e74f core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents: 615
diff changeset
422
1486
a77217511afd tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents: 1476
diff changeset
423 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
424 """
a77217511afd tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents: 1476
diff changeset
425
a77217511afd tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents: 1476
diff changeset
426 @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
427 @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
428 @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
429 @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
430 """
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
431 if not isinstance(parent, TabsContainer):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
432 raise exceptions.DataError(_("TabElement must be a child of TabsContainer"))
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
433 super(TabElement, self).__init__(parent.xmlui, parent)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
434 self.elem.setAttribute('name', name)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
435 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
436 if selected:
a77217511afd tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents: 1476
diff changeset
437 self.setSelected(selected)
a77217511afd tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents: 1476
diff changeset
438
a77217511afd tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents: 1476
diff changeset
439 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
440 """Set the tab selected.
a77217511afd tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents: 1476
diff changeset
441
a77217511afd tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents: 1476
diff changeset
442 @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
443 """
a77217511afd tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents: 1476
diff changeset
444 self.elem.setAttribute('selected', 'true' if selected else 'false')
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
445
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
446
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
447 class FieldBackElement(Element):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
448 """ 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
449 type = 'field_back'
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
450
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
451 def __init__(self, parent, name):
1475
7ac073d2e7e0 core(xmlui): removed useless parenthesis around assert
Goffi <goffi@goffi.org>
parents: 1473
diff changeset
452 assert isinstance(parent, ButtonWidget)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
453 super(FieldBackElement, self).__init__(parent.xmlui, parent)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
454 self.elem.setAttribute('name', name)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
455
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
456
977
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
457 class InternalFieldElement(Element):
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
458 """ 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
459 type = 'internal_field'
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 def __init__(self, parent, name):
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
462 super(InternalFieldElement, self).__init__(parent.xmlui, parent)
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
463 self.elem.setAttribute('name', name)
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
464
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 class InternalDataElement(Element):
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
467 """ Used by internal callbacks to retrieve extra data """
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
468 type = 'internal_data'
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
469
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
470 def __init__(self, parent, children):
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
471 super(InternalDataElement, self).__init__(parent.xmlui, parent)
1475
7ac073d2e7e0 core(xmlui): removed useless parenthesis around assert
Goffi <goffi@goffi.org>
parents: 1473
diff changeset
472 assert isinstance(children, list)
977
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
473 for child in children:
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
474 self.elem.childNodes.append(child)
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
475
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
476
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
477 class OptionElement(Element):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
478 """" Used by ListWidget to specify options """
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
479 type = 'option'
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
480
968
75f3b3b430ff tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents: 910
diff changeset
481 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
482 """
75f3b3b430ff tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents: 910
diff changeset
483
75f3b3b430ff tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents: 910
diff changeset
484 @param parent
75f3b3b430ff tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents: 910
diff changeset
485 @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
486 @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
487 """
1475
7ac073d2e7e0 core(xmlui): removed useless parenthesis around assert
Goffi <goffi@goffi.org>
parents: 1473
diff changeset
488 assert isinstance(parent, ListWidget)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
489 super(OptionElement, self).__init__(parent.xmlui, parent)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
490 if isinstance(option, basestring):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
491 value, label = option, option
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
492 elif isinstance(option, tuple):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
493 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
494 else:
f7f15d44fdfa tools (xml_tools): dataForm2XMLUI handles the default value for "list-single" fields
souliane <souliane@mailoo.org>
parents: 1036
diff changeset
495 raise NotImplementedError
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
496 self.elem.setAttribute('value', value)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
497 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
498 if selected:
75f3b3b430ff tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents: 910
diff changeset
499 self.elem.setAttribute('selected', 'true')
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
500
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
501
1476
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
502 class JidElement(Element):
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
503 """" 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
504 type = 'jid'
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 def __init__(self, parent, jid_):
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
507 """
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
508 @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
509 """
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
510 assert isinstance(parent, JidsListWidget)
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
511 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
512 if isinstance(jid_, jid.JID):
1499
adc72c39f032 tools (xml_tools): fixes JidElement.__init__
souliane <souliane@mailoo.org>
parents: 1490
diff changeset
513 value = jid_.full()
1476
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
514 elif isinstance(jid_, basestring):
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
515 value = unicode(jid_)
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
516 else:
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
517 raise NotImplementedError
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
518 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
519 self.elem.appendChild(jid_txt)
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
520
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
521
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
522 class RowElement(Element):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
523 """" Used by AdvancedListContainer """
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
524 type = 'row'
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
525
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
526 def __init__(self, parent):
1475
7ac073d2e7e0 core(xmlui): removed useless parenthesis around assert
Goffi <goffi@goffi.org>
parents: 1473
diff changeset
527 assert isinstance(parent, AdvancedListContainer)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
528 super(RowElement, self).__init__(parent.xmlui, parent)
805
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
529 if parent.next_row_idx is not None:
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
530 if parent.auto_index:
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
531 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
532 self.elem.setAttribute('index', parent.next_row_idx)
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
533 parent.next_row_idx = None
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
534
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
535
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
536 class HeaderElement(Element):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
537 """" Used by AdvancedListContainer """
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
538 type = 'header'
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
539
876
65bf1bc70f6b tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents: 865
diff changeset
540 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
541 """
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
542 @param parent: AdvancedListContainer instance
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
543 @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
544 @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
545 @param description: long descriptive text
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
546 """
1475
7ac073d2e7e0 core(xmlui): removed useless parenthesis around assert
Goffi <goffi@goffi.org>
parents: 1473
diff changeset
547 assert isinstance(parent, AdvancedListContainer)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
548 super(HeaderElement, self).__init__(parent.xmlui, parent)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
549 if name:
876
65bf1bc70f6b tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents: 865
diff changeset
550 self.elem.setAttribute('name', name)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
551 if label:
876
65bf1bc70f6b tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents: 865
diff changeset
552 self.elem.setAttribute('label', label)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
553 if description:
876
65bf1bc70f6b tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents: 865
diff changeset
554 self.elem.setAttribute('description', description)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
555
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
556
1476
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
557 ## Containers ##
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
558
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
559
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
560 class Container(Element):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
561 """ And Element which contains other ones and has a layout """
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
562 type = None
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
563
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
564 def __init__(self, xmlui, parent=None):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
565 """Create a container element
1472
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
566
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
567 @param xmlui: XMLUI instance
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
568 @parent: parent element or None
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 self.elem = xmlui.doc.createElement('container')
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
571 super(Container, self).__init__(xmlui, parent)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
572 self.elem.setAttribute('type', self.type)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
573
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
574 def getParentContainer(self):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
575 """ Return first parent container
1472
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
576
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
577 @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
578 """
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
579 current = self.parent
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
580 while(not isinstance(current, (Container)) and
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
581 current is not None):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
582 current = current.parent
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
583 return current
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
584
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
585
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
586 class VerticalContainer(Container):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
587 type = "vertical"
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 HorizontalContainer(Container):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
591 type = "horizontal"
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 PairsContainer(Container):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
595 type = "pairs"
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
596
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
597
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
598 class TabsContainer(Container):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
599 type = "tabs"
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
600
1486
a77217511afd tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents: 1476
diff changeset
601 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
602 """Add a tab.
a77217511afd tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents: 1476
diff changeset
603
a77217511afd tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents: 1476
diff changeset
604 @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
605 @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
606 @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
607 @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
608 @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
609 """
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
610 if not label:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
611 label = name
1486
a77217511afd tools, frontends (xmlui): allow to select a tab when adding it
souliane <souliane@mailoo.org>
parents: 1476
diff changeset
612 tab_elt = TabElement(self, name, label, selected)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
613 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
614 return self.xmlui.changeContainer(new_container)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
615
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
616 def end(self):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
617 """ Called when we have finished tabs
1472
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
618
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
619 change current container to first container parent
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
620 """
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
621 parent_container = self.getParentContainer()
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
622 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
623
0b914394e74f core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents: 615
diff changeset
624
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
625 class AdvancedListContainer(Container):
1472
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
626 """A list which can contain other widgets, headers, etc"""
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
627 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
628
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
629 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
630 """Create an advanced list
1472
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
631
1199
96fb74a4714d misc: fixed some typos
Matteo Cypriani <mcy@lm7.fr>
parents: 1142
diff changeset
632 @param headers: optional headers information
805
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
633 @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
634 @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
635 @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
636 @param selectable: one of:
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
637 'no': nothing is done
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
638 'single': one row can be selected
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
639 @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
640 @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
641 """
805
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
642 assert selectable in ('no', 'single')
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
643 if not items and columns is None:
876
65bf1bc70f6b tools, plugin XEP-0077: small fixes
souliane <souliane@mailoo.org>
parents: 865
diff changeset
644 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
645 if headers is None:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
646 headers = []
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
647 if items is None:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
648 items = []
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
649 super(AdvancedListContainer, self).__init__(xmlui, parent)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
650 if columns is None:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
651 columns = len(items[0])
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
652 self._columns = columns
803
f100fd8d279f core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents: 802
diff changeset
653 self._item_idx = 0
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
654 self.current_row = None
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
655 if headers:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
656 if len(headers) != self._columns:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
657 raise exceptions.DataError(_("Headers lenght doesn't correspond to columns"))
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
658 self.addHeaders(headers)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
659 if items:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
660 self.addItems(items)
803
f100fd8d279f core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents: 802
diff changeset
661 self.elem.setAttribute('columns', str(self._columns))
805
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
662 if callback_id is not None:
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
663 self.elem.setAttribute('callback', callback_id)
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
664 self.elem.setAttribute('selectable', selectable)
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
665 self.auto_index = auto_index
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
666 if auto_index:
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
667 self.elem.setAttribute('auto_index', 'true')
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
668 self.next_row_idx = None
802
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 addHeaders(self, headers):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
671 for header in headers:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
672 self.addHeader(header)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
673
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
674 def addHeader(self, header):
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
675 pass # TODO
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
676
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
677 def addItems(self, items):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
678 for item in items:
803
f100fd8d279f core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents: 802
diff changeset
679 self.append(item)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
680
805
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
681 def setRowIndex(self, idx):
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
682 """ Set index for next row
1472
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
683
805
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
684 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
685 @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
686 """
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
687 self.next_row_idx = idx
7c05c39156a2 core (XMLUI), frontends: advancedListContainer part 2:
Goffi <goffi@goffi.org>
parents: 804
diff changeset
688
803
f100fd8d279f core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents: 802
diff changeset
689 def append(self, child):
f100fd8d279f core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents: 802
diff changeset
690 if isinstance(child, RowElement):
f100fd8d279f core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents: 802
diff changeset
691 return super(AdvancedListContainer, self).append(child)
f100fd8d279f core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents: 802
diff changeset
692 if self._item_idx % self._columns == 0:
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
693 self.current_row = RowElement(self)
803
f100fd8d279f core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents: 802
diff changeset
694 self.current_row.append(child)
f100fd8d279f core, frontends: implementation of AdvancedListContainer first draft + misc:
Goffi <goffi@goffi.org>
parents: 802
diff changeset
695 self._item_idx += 1
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
696
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
697 def end(self):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
698 """ Called when we have finished list
1472
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
699
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
700 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
701 """
804
5174657b3378 XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents: 803
diff changeset
702 if self._item_idx % self._columns != 0:
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
703 raise exceptions.DataError(_("Incorrect number of items in list"))
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
704 parent_container = self.getParentContainer()
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
705 self.xmlui.changeContainer(parent_container)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
706
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
707
1476
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
708 ## Widgets ##
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
709
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
710
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
711 class Widget(Element):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
712 type = None
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
713
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
714 def __init__(self, xmlui, name=None, parent=None):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
715 """Create an element
1472
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
716
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
717 @param xmlui: XMLUI instance
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
718 @param name: name of the element or None
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
719 @param parent: parent element or None
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
720 """
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
721 self.elem = xmlui.doc.createElement('widget')
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
722 super(Widget, self).__init__(xmlui, parent)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
723 if name:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
724 self.elem.setAttribute('name', name)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
725 self.elem.setAttribute('type', self.type)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
726
977
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
727 def setInternalCallback(self, callback, fields, data_elts=None):
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
728 """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
729
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
730 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
731 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
732 @param callback (string): a value from:
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
733 - '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
734 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
735 of type List do not accept the empty value.
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
736 - '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
737 is not a List.
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
738 - '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
739 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
740 to which the JID selected in A belongs.
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
741 - more operation to be added when necessary...
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
742 @param fields (list): a list of widget names (string)
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
743 @param data_elts (list[Element]): extra data elements
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
744 """
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
745 self.elem.setAttribute('internal_callback', callback)
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
746 if fields:
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
747 for field in fields:
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
748 InternalFieldElement(self, field)
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
749 if data_elts:
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
750 InternalDataElement(self, data_elts)
d2e612a45e76 tools, frontends (xmlui): add Widget.setInternalCallback:
souliane <souliane@mailoo.org>
parents: 975
diff changeset
751
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
752
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
753 class EmptyWidget(Widget):
1084
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
754 """Place holder widget"""
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
755 type = 'empty'
630
0b914394e74f core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents: 615
diff changeset
756
0b914394e74f core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents: 615
diff changeset
757
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
758 class TextWidget(Widget):
1084
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
759 """Used for blob of text"""
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
760 type = 'text'
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
761
865
3ee2ec7ec010 core (xmlui), frontends: handling of "text" type in params xml + bug fixes
Goffi <goffi@goffi.org>
parents: 863
diff changeset
762 def __init__(self, xmlui, value, name=None, parent=None):
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
763 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
764 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
765 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
766 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
767 self.elem.appendChild(value_elt)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
768
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
769
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
770 class LabelWidget(Widget):
1472
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
771 """One line blob of text
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
772
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
773 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
774 """
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
775 type = 'label'
802
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 def __init__(self, xmlui, label, name=None, parent=None):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
778 super(LabelWidget, self).__init__(xmlui, name, parent)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
779 self.elem.setAttribute('value', label)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
780
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
781
804
5174657b3378 XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents: 803
diff changeset
782 class JidWidget(Widget):
1084
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
783 """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
784 type = 'jid'
804
5174657b3378 XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents: 803
diff changeset
785
5174657b3378 XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents: 803
diff changeset
786 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
787 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
788 try:
5174657b3378 XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents: 803
diff changeset
789 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
790 except AttributeError:
5174657b3378 XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents: 803
diff changeset
791 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
792
5174657b3378 XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents: 803
diff changeset
793
5174657b3378 XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents: 803
diff changeset
794 class DividerWidget(Widget):
5174657b3378 XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents: 803
diff changeset
795 type = 'divider'
5174657b3378 XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents: 803
diff changeset
796
5174657b3378 XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents: 803
diff changeset
797 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
798 """ Create a divider
1472
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
799
804
5174657b3378 XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents: 803
diff changeset
800 @param xmlui: XMLUI instance
5174657b3378 XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents: 803
diff changeset
801 @param style: one of:
5174657b3378 XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents: 803
diff changeset
802 - line: a simple line
5174657b3378 XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents: 803
diff changeset
803 - 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
804 - 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
805 - 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
806 - 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
807 @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
808 @param parent: parent container
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 """
5174657b3378 XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents: 803
diff changeset
811 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
812 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
813
5174657b3378 XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents: 803
diff changeset
814
1084
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
815 ### Inputs ###
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
816
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
817
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
818 class InputWidget(Widget):
1472
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
819 """Widget which can accept user inputs
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
820
1084
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
821 used mainly in forms
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
822 """
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
823 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
824 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
825 if read_only:
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
826 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
827
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
828
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
829 class StringWidget(InputWidget):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
830 type = 'string'
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
831
1084
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
832 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
833 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
834 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
835 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
836 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
837 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
838 self.elem.appendChild(value_elt)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
839
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 PasswordWidget(StringWidget):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
842 type = 'password'
630
0b914394e74f core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents: 615
diff changeset
843
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
844
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
845 class TextBoxWidget(StringWidget):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
846 type = 'textbox'
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
847
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
848
1084
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
849 class JidInputWidget(StringWidget):
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
850 type = 'jid_input'
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
851
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
852
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
853 # 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
854 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
855 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
856
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 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
858 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
859 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
860 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
861 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
862 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
863
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
864
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
865 class BoolWidget(InputWidget):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
866 type = 'bool'
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
867
1084
03dcb6ca7e49 core (XMLUI): created a read_only attribute for InputWidget + new JidInputWidget
Goffi <goffi@goffi.org>
parents: 1078
diff changeset
868 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
869 if isinstance(value, bool):
9754c0ebadba core (XMLUI): BoolWidget now accept real boolean for value
Goffi <goffi@goffi.org>
parents: 905
diff changeset
870 value = 'true' if value else 'false'
9754c0ebadba core (XMLUI): BoolWidget now accept real boolean for value
Goffi <goffi@goffi.org>
parents: 905
diff changeset
871 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
872 value = 'false'
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
873 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
874 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
875 if value not in ('true', 'false'):
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
876 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
877 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
878 self.elem.setAttribute('value', value)
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
804
5174657b3378 XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents: 803
diff changeset
881 class ButtonWidget(Widget):
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
882 type = 'button'
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
883
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
884 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
885 """Add a button
1472
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
886
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
887 @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
888 @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
889 @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
890 @param name: name
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
891 @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
892 """
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
893 if fields_back is None:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
894 fields_back = []
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
895 super(ButtonWidget, self).__init__(xmlui, name, parent)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
896 self.elem.setAttribute('callback', callback_id)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
897 if value:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
898 self.elem.setAttribute('value', value)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
899 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
900 FieldBackElement(self, field)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
901
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
902
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
903 class ListWidget(InputWidget):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
904 type = 'list'
630
0b914394e74f core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents: 615
diff changeset
905
1476
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
906 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
907 """
75f3b3b430ff tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents: 910
diff changeset
908
75f3b3b430ff tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents: 910
diff changeset
909 @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
910 @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
911 - 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
912 - 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
913 @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
914 @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
915 @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
916 @param parent
75f3b3b430ff tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents: 910
diff changeset
917 """
1476
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
918 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
919 if styles is None:
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
920 styles = set()
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
921 else:
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
922 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
923 if not options:
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 981
diff changeset
924 log.warning(_('empty "options" list'))
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
925 if not styles.issubset(['multi']):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
926 raise exceptions.DataError(_("invalid styles"))
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
927 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
928 self.addOptions(options, selected)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
929 for style in styles:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
930 self.elem.setAttribute(style, 'yes')
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
931
968
75f3b3b430ff tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents: 910
diff changeset
932 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
933 """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
934 if selected:
75f3b3b430ff tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents: 910
diff changeset
935 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
936 selected = [selected]
75f3b3b430ff tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents: 910
diff changeset
937 else:
75f3b3b430ff tools, frontends, memory: param definition and XMLUI handle multi-selection for list widgets:
souliane <souliane@mailoo.org>
parents: 910
diff changeset
938 selected = []
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
939 for option in options:
1475
7ac073d2e7e0 core(xmlui): removed useless parenthesis around assert
Goffi <goffi@goffi.org>
parents: 1473
diff changeset
940 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
941 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
942 OptionElement(self, option, value in selected)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
943
1476
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
944 class JidsListWidget(InputWidget):
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
945 """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
946 type = 'jids_list'
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
947
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
948 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
949 """
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
950
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
951 @param xmlui
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
952 @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
953 @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
954 @param name (string)
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
955 @param parent
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
956 """
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
957 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
958 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
959 if not styles.issubset([]): # TODO
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
960 raise exceptions.DataError(_("invalid styles"))
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
961 for style in styles:
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
962 self.elem.setAttribute(style, 'yes')
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
963 if not jids:
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
964 log.debug('empty jids list')
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
965 else:
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
966 self.addJids(jids)
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
967
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
968 def addJids(self, jids):
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
969 for jid_ in jids:
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
970 JidElement(self, jid_)
48706f4ff19c core (xmlui): added JidsListWidget to manage editable list of jids:
Goffi <goffi@goffi.org>
parents: 1475
diff changeset
971
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
972
1105
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
973 ## Dialog Elements ##
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
974
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 class DialogElement(Element):
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
977 """Main dialog element """
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
978 type = 'dialog'
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
979
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
980 def __init__(self, parent, type_, level=None):
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
981 if not isinstance(parent, TopElement):
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
982 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
983 super(DialogElement, self).__init__(parent.xmlui, parent)
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
984 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
985 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
986
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 class MessageElement(Element):
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
989 """Element with the instruction message"""
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
990 type = C.XMLUI_DATA_MESS
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
991
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
992 def __init__(self, parent, message):
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
993 if not isinstance(parent, DialogElement):
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
994 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
995 super(MessageElement, self).__init__(parent.xmlui, parent)
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
996 message_txt = self.xmlui.doc.createTextNode(message)
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
997 self.elem.appendChild(message_txt)
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
998
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 class ButtonsElement(Element):
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1001 """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
1002 type = 'buttons'
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1003
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1004 def __init__(self, parent, set_):
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1005 if not isinstance(parent, DialogElement):
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1006 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
1007 super(ButtonsElement, self).__init__(parent.xmlui, parent)
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1008 self.elem.setAttribute('set', set_)
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1009
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 class FileElement(Element):
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1012 """File element used for FileDialog"""
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1013 type = 'file'
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1014
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1015 def __init__(self, parent, type_):
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1016 if not isinstance(parent, DialogElement):
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1017 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
1018 super(FileElement, self).__init__(parent.xmlui, parent)
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1019 self.elem.setAttribute('type', type_)
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1020
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1021
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1022 ## 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
1023
0b914394e74f core: added advanced list to XMLUI (need improvment, very basic so far)
Goffi <goffi@goffi.org>
parents: 615
diff changeset
1024
588
beaf6bec2fcd Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
1025 class XMLUI(object):
103
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
1026 """This class is used to create a user interface (form/window/parameters/etc) using SàT XML"""
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
1027
1105
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1028 def __init__(self, panel_type="window", container="vertical", dialog_opt=None, title=None, submit_id=None, session_id=None):
103
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
1029 """Init SàT XML Panel
1105
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1030
103
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
1031 @param panel_type: one of
1105
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1032 - C.XMLUI_WINDOW (new window)
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1033 - C.XMLUI_POPUP
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1034 - 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
1035 - 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
1036 - C.XMLUI_DIALOG (one common dialog, presentation depend of frontend)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1037 @param container: disposition of elements, one of:
107
5ae370c71803 CS: message sending is now working
Goffi <goffi@goffi.org>
parents: 106
diff changeset
1038 - vertical: elements are disposed up to bottom
5ae370c71803 CS: message sending is now working
Goffi <goffi@goffi.org>
parents: 106
diff changeset
1039 - horizontal: elements are disposed left to right
5ae370c71803 CS: message sending is now working
Goffi <goffi@goffi.org>
parents: 106
diff changeset
1040 - pairs: elements come on two aligned columns
103
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
1041 (usually one for a label, the next for the element)
107
5ae370c71803 CS: message sending is now working
Goffi <goffi@goffi.org>
parents: 106
diff changeset
1042 - 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
1043 @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
1044 - 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
1045 - 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
1046 - 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
1047 - 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
1048 returned data can contain:
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1049 - "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
1050 - 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
1051 returned data can contain:
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1052 - "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
1053 - "path": path of the choosed file/dir
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1054 - 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
1055 - C.XMLUI_DATA_LVL: one of:
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1056 - 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
1057 - 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
1058 - 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
1059 - C.XMLUI_DATA_BTNS_SET: one of:
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1060 - 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
1061 - 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
1062 - 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
1063 - 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
1064 - 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
1065 - 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
1066
107
5ae370c71803 CS: message sending is now working
Goffi <goffi@goffi.org>
parents: 106
diff changeset
1067 @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
1068 @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
1069 @param session_id: use to keep a session attached to the dialog, must be returned by frontends
103
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
1070 """
1530
94cd4d242dc5 core (XMLUI): restorer submit_id:
Goffi <goffi@goffi.org>
parents: 1521
diff changeset
1071 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
1072 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
1073 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
1074 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
1075 raise exceptions.DataError(_("form XMLUI need a submit_id"))
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1076 if not isinstance(container, basestring):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1077 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
1078 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
1079 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
1080 self.type = panel_type
103
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
1081 impl = minidom.getDOMImplementation()
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
1082
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
1083 self.doc = impl.createDocument(None, "sat_xmlui", None)
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
1084 top_element = self.doc.documentElement
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
1085 top_element.setAttribute("type", panel_type)
107
5ae370c71803 CS: message sending is now working
Goffi <goffi@goffi.org>
parents: 106
diff changeset
1086 if title:
5ae370c71803 CS: message sending is now working
Goffi <goffi@goffi.org>
parents: 106
diff changeset
1087 top_element.setAttribute("title", title)
1530
94cd4d242dc5 core (XMLUI): restorer submit_id:
Goffi <goffi@goffi.org>
parents: 1521
diff changeset
1088 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
1089 self.session_id = session_id
1105
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1090 if panel_type == C.XMLUI_DIALOG:
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1091 if dialog_opt is None:
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1092 dialog_opt = {}
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1093 self._createDialog(dialog_opt)
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1094 return
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
1095 self.main_container = self._createContainer(container, TopElement(self))
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1096 self.current_container = self.main_container
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1097
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1098 def _introspect(self):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1099 """ Introspect module to find Widgets and Containers """
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1100 self._containers = {}
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1101 self._widgets = {}
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1102 for obj in globals().values():
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1103 try:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1104 if issubclass(obj, Widget):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1105 if obj.__name__ == 'Widget':
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._widgets[obj.type] = obj
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1108 elif issubclass(obj, Container):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1109 if obj.__name__ == 'Container':
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1110 continue
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1111 self._containers[obj.type] = obj
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1112 except TypeError:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1113 pass
103
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
1114
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
1115 def __del__(self):
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
1116 self.doc.unlink()
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
1117
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1118 def __getattr__(self, name):
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
1119 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
1120 if self.type == C.XMLUI_DIALOG:
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1121 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
1122 class_name = name[3:] + "Widget"
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1123 if class_name in globals():
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1124 cls = globals()[class_name]
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1125 if issubclass(cls, Widget):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1126 def createWidget(*args, **kwargs):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1127 if "parent" not in kwargs:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1128 kwargs["parent"] = self.current_container
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
1129 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
1130 args = list(args)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1131 kwargs["name"] = args.pop(0)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1132 return cls(self, *args, **kwargs)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1133 return createWidget
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1134 return object.__getattribute__(self, name)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1135
798
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1136 @property
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1137 def submit_id(self):
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1138 top_element = self.doc.documentElement
1530
94cd4d242dc5 core (XMLUI): restorer submit_id:
Goffi <goffi@goffi.org>
parents: 1521
diff changeset
1139 if not top_element.hasAttribute("submit"):
94cd4d242dc5 core (XMLUI): restorer submit_id:
Goffi <goffi@goffi.org>
parents: 1521
diff changeset
1140 # getAttribute never return None (it return empty string it attribute doesn't exists)
94cd4d242dc5 core (XMLUI): restorer submit_id:
Goffi <goffi@goffi.org>
parents: 1521
diff changeset
1141 # so we have to manage None here
94cd4d242dc5 core (XMLUI): restorer submit_id:
Goffi <goffi@goffi.org>
parents: 1521
diff changeset
1142 return None
798
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1143 value = top_element.getAttribute("submit")
1530
94cd4d242dc5 core (XMLUI): restorer submit_id:
Goffi <goffi@goffi.org>
parents: 1521
diff changeset
1144 return value
798
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1145
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1146 @submit_id.setter
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1147 def submit_id(self, value):
760
73a0077f80cc backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 759
diff changeset
1148 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
1149 if value is None:
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1150 try:
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1151 top_element.removeAttribute("submit")
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1152 except NotFoundErr:
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1153 pass
1531
51dec65ec62c core (xmlui): fixed submit_id returning None when its value is ''
Goffi <goffi@goffi.org>
parents: 1530
diff changeset
1154 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
1155 top_element.setAttribute("submit", value)
760
73a0077f80cc backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 759
diff changeset
1156
798
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1157 @property
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1158 def session_id(self):
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1159 top_element = self.doc.documentElement
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1160 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
1161 return value or None
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1162
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1163 @session_id.setter
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1164 def session_id(self, value):
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1165 top_element = self.doc.documentElement
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1166 if value is None:
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1167 try:
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1168 top_element.removeAttribute("session_id")
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1169 except NotFoundErr:
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1170 pass
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1171 elif value:
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1172 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
1173 else:
8f5479f8709a core: XMLUI now use @property for session_id and submit
Goffi <goffi@goffi.org>
parents: 796
diff changeset
1174 raise exceptions.DataError("session_id can't be empty")
760
73a0077f80cc backend, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 759
diff changeset
1175
1105
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1176 def _createDialog(self, dialog_opt):
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1177 dialog_type = dialog_opt.setdefault(C.XMLUI_DATA_TYPE, C.XMLUI_DIALOG_MESSAGE)
1530
94cd4d242dc5 core (XMLUI): restorer submit_id:
Goffi <goffi@goffi.org>
parents: 1521
diff changeset
1178 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
1179 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
1180 top_element = TopElement(self)
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1181 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
1182 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
1183
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1184 try:
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1185 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
1186 except KeyError:
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1187 pass
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1188
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1189 try:
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1190 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
1191 except KeyError:
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1192 pass
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1193
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1194 try:
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1195 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
1196 except KeyError:
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1197 pass
018bdd687747 core (XMLUI): Dialogs are now managemed in XMLUI:
Goffi <goffi@goffi.org>
parents: 1086
diff changeset
1198
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1199 def _createContainer(self, container, parent=None, **kwargs):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1200 """Create a container element
1472
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
1201
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1202 @param type: container type (cf init doc)
103
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
1203 @parent: parent element or None
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
1204 """
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1205 if container not in self._containers:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1206 raise exceptions.DataError(_("Unknown container type [%s]") % container)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1207 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
1208 new_container = cls(self, parent=parent, **kwargs)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1209 return new_container
105
d2630fba8dfd params to XMLUI tools
Goffi <goffi@goffi.org>
parents: 104
diff changeset
1210
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1211 def changeContainer(self, container, **kwargs):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1212 """Change the current container
1472
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
1213
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1214 @param container: either container type (container it then created),
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1215 or an Container instance"""
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1216 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
1217 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
1218 else:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1219 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
1220 assert isinstance(self.current_container, Container)
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1221 return self.current_container
103
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
1222
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1223 def addWidget(self, type_, *args, **kwargs):
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1224 """Convenience method to add an element"""
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1225 if type_ not in self._widgets:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1226 raise exceptions.DataError(_("Invalid type [%s]") % type_)
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1227 if "parent" not in kwargs:
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1228 kwargs["parent"] = self.current_container
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1229 cls = self._widgets[type_]
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1230 return cls(self, *args, **kwargs)
104
5458ac1380cc XMLUI: added tabs layout
Goffi <goffi@goffi.org>
parents: 103
diff changeset
1231
103
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
1232 def toXml(self):
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
1233 """return the XML representation of the panel"""
103
6be927a465ed XMLUI refactoring, step 1
Goffi <goffi@goffi.org>
parents: 102
diff changeset
1234 return self.doc.toxml()
289
0e54b1b0a8c8 xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents: 228
diff changeset
1235
0e54b1b0a8c8 xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents: 228
diff changeset
1236
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
1237 # 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
1238
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
1239 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
1240 """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
1241
1504
a2e4b976e707 core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents: 1500
diff changeset
1242 @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
1243 @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
1244 @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
1245 @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
1246 """
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
1247 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
1248 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
1249 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
1250 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
1251 title=title
1444
8ce9924fa92c tools (xml_tools): better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
1252 )
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
1253 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
1254
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
1255
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 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
1257 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
1258
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 @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
1260 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
1261 @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
1262 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
1263 @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
1264 """
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 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
1266 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
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 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
1269 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
1270 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
1271
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
1272 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
1273 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
1274
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
1275 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
1276 """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
1277
a2e4b976e707 core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents: 1500
diff changeset
1278 @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
1279 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
1280 @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
1281 @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
1282 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
1283 @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
1284 @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
1285 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
1286 @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
1287 """
1736
3739f7779f17 core (xmlui): fixed bad call of deferredUI in deferXMLUI
Goffi <goffi@goffi.org>
parents: 1735
diff changeset
1288 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
1289 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
1290 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
1291 action_data.update(action_extra)
1645
f1da3a8d08ce core (xmlui): fixed security_limit in deferXMLUI
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1292 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
1293 return xmlui_d
a2e4b976e707 core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents: 1500
diff changeset
1294
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
1295 def deferDialog(host, message, title=u'Please confirm', type_=C.XMLUI_DIALOG_CONFIRM, options=None,
1737
ad5da569ecf4 core (xmlui): fixed deferConfirm
Goffi <goffi@goffi.org>
parents: 1736
diff changeset
1296 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
1297 """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
1298
a2e4b976e707 core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents: 1500
diff changeset
1299 @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
1300 @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
1301 @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
1302 @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
1303 @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
1304 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
1305 @param security_limit: %(doc_security_limit)s
1737
ad5da569ecf4 core (xmlui): fixed deferConfirm
Goffi <goffi@goffi.org>
parents: 1736
diff changeset
1306 @param chained(bool): True if the Deferred result must be returned to the frontend
ad5da569ecf4 core (xmlui): fixed deferConfirm
Goffi <goffi@goffi.org>
parents: 1736
diff changeset
1307 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
1308 @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
1309 @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
1310 """
a2e4b976e707 core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents: 1500
diff changeset
1311 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
1312 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
1313 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
1314 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
1315 dialog = XMLUI(C.XMLUI_DIALOG, title=title, dialog_opt=dialog_opt, submit_id='')
1737
ad5da569ecf4 core (xmlui): fixed deferConfirm
Goffi <goffi@goffi.org>
parents: 1736
diff changeset
1316 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
1317
a2e4b976e707 core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents: 1500
diff changeset
1318 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
1319 """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
1320 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
1321 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
1322 return d
a2e4b976e707 core (xmlui): added helper method to easily manage dialogs with a deferred
Goffi <goffi@goffi.org>
parents: 1500
diff changeset
1323
802
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1324 # Misc other funtions
9007bb133009 core, frontends: XMLUI refactoring:
Goffi <goffi@goffi.org>
parents: 800
diff changeset
1325
289
0e54b1b0a8c8 xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents: 228
diff changeset
1326 class ElementParser(object):
1818
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
1327 """callable class to parse XML string into Element"""
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
1328 # XXX: Found at http://stackoverflow.com/questions/2093400/how-to-create-twisted-words-xish-domish-element-entirely-from-raw-xml/2095942#2095942
1472
c005c212b538 xmlui: minor docstring fixes
Goffi <goffi@goffi.org>
parents: 1456
diff changeset
1329
1818
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
1330 def _escapeHTML(self, matchobj):
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
1331 entity = matchobj.group(1)
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
1332 if entity in XML_ENTITIES:
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
1333 # we don't escape XML entities
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
1334 return matchobj.group(0)
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
1335 else:
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
1336 try:
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
1337 return unichr(htmlentitydefs.name2codepoint[entity])
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
1338 except KeyError:
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
1339 log.warning(u"removing unknown entity {}".format(entity))
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
1340 return u''
289
0e54b1b0a8c8 xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents: 228
diff changeset
1341
1817
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1792
diff changeset
1342 def __call__(self, raw_xml, force_spaces=False, namespace=None):
905
cad8e52bb2e6 tools: xml_tools.ElementParser do not replace '\n' and '\t' with ' ' by default
souliane <souliane@mailoo.org>
parents: 876
diff changeset
1343 """
1456
a13be5c22334 xml_tools: minor attribute renaming
Goffi <goffi@goffi.org>
parents: 1444
diff changeset
1344 @param raw_xml(unicode): the raw XML
1817
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1792
diff changeset
1345 @param force_spaces (bool): if True, replace occurrences of '\n' and '\t' with ' '.
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1792
diff changeset
1346 @param namespace(unicode, None): if set, use this namespace for the wrapping element
905
cad8e52bb2e6 tools: xml_tools.ElementParser do not replace '\n' and '\t' with ' ' by default
souliane <souliane@mailoo.org>
parents: 876
diff changeset
1347 """
1817
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1792
diff changeset
1348 # we need to wrap element in case
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1792
diff changeset
1349 # there is not a unique one on the top
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1792
diff changeset
1350 if namespace is not None:
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1792
diff changeset
1351 raw_xml = u"<div xmlns='{}'>{}</div>".format(namespace, raw_xml)
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1792
diff changeset
1352 else:
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1792
diff changeset
1353 raw_xml = u"<div>{}</div>".format(raw_xml)
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1792
diff changeset
1354
1818
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
1355 # avoid ParserError on HTML escaped chars
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
1356 raw_xml = html_entity_re.sub(self._escapeHTML, raw_xml)
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
1357
289
0e54b1b0a8c8 xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents: 228
diff changeset
1358 self.result = None
590
56531f9e9ac7 Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
1359
56531f9e9ac7 Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
1360 def onStart(elem):
56531f9e9ac7 Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
1361 self.result = elem
56531f9e9ac7 Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
1362
289
0e54b1b0a8c8 xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents: 228
diff changeset
1363 def onEnd():
0e54b1b0a8c8 xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents: 228
diff changeset
1364 pass
590
56531f9e9ac7 Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
1365
56531f9e9ac7 Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
1366 def onElement(elem):
56531f9e9ac7 Fix pep8 support in src/tools.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
1367 self.result.addChild(elem)
289
0e54b1b0a8c8 xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents: 228
diff changeset
1368
0e54b1b0a8c8 xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents: 228
diff changeset
1369 parser = domish.elementStream()
0e54b1b0a8c8 xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents: 228
diff changeset
1370 parser.DocumentStartEvent = onStart
0e54b1b0a8c8 xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents: 228
diff changeset
1371 parser.ElementEvent = onElement
0e54b1b0a8c8 xml_tools: added ElementParser for raw xml -> domish.Element conversion
Goffi <goffi@goffi.org>
parents: 228
diff changeset
1372 parser.DocumentEndEvent = onEnd
536
a31abb97310d core, plugins: fixed bad namespace in stanza creation
Goffi <goffi@goffi.org>
parents: 480
diff changeset
1373 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
1374 if force_spaces:
1456
a13be5c22334 xml_tools: minor attribute renaming
Goffi <goffi@goffi.org>
parents: 1444
diff changeset
1375 raw_xml = raw_xml.replace('\n', ' ').replace('\t', ' ')
a13be5c22334 xml_tools: minor attribute renaming
Goffi <goffi@goffi.org>
parents: 1444
diff changeset
1376 tmp.addRawXml(raw_xml)
304
e04ccf122bb6 microblog sending
Goffi <goffi@goffi.org>
parents: 289
diff changeset
1377 parser.parse(tmp.toXml().encode('utf-8'))
1817
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1792
diff changeset
1378 top_elt = self.result.firstChildElement()
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1792
diff changeset
1379 # we now can check if there was a unique element on the top
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1792
diff changeset
1380 # and remove our wrapping <div/> is this was the case
1818
7e6342de71fb core (xml_tools): unescape HTML sequences to avoid parsing error in ElementParser
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
1381 if len(top_elt.children) == 1 and domish.IElement.providedBy(top_elt.children[0]):
1817
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1792
diff changeset
1382 top_elt = top_elt.firstChildElement()
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1792
diff changeset
1383 return top_elt
1732
cf11cfc87ef9 xml_tools, plugin XEP-0071, XEP-0277: add method expandNewLinesToXHTML:
souliane <souliane@mailoo.org>
parents: 1692
diff changeset
1384
cf11cfc87ef9 xml_tools, plugin XEP-0071, XEP-0277: add method expandNewLinesToXHTML:
souliane <souliane@mailoo.org>
parents: 1692
diff changeset
1385
1740
681fe91abcc0 memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents: 1737
diff changeset
1386 # 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
1387 def getText(node):
681fe91abcc0 memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents: 1737
diff changeset
1388 """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
1389
681fe91abcc0 memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents: 1737
diff changeset
1390 @param node (domish.Element)
681fe91abcc0 memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents: 1737
diff changeset
1391 @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
1392 """
681fe91abcc0 memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents: 1737
diff changeset
1393 data = []
681fe91abcc0 memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents: 1737
diff changeset
1394 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
1395 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
1396 data.append(child.wholeText)
681fe91abcc0 memory (params): parameter jids_list values are specified with <jid>...</jid>
souliane <souliane@mailoo.org>
parents: 1737
diff changeset
1397 return u"".join(data)
1819
c271087d2020 core (xml_tools): added a method to find all elements corresponding to criteria
Goffi <goffi@goffi.org>
parents: 1818
diff changeset
1398
c271087d2020 core (xml_tools): added a method to find all elements corresponding to criteria
Goffi <goffi@goffi.org>
parents: 1818
diff changeset
1399 def findAll(elt, names=None, namespaces=None):
c271087d2020 core (xml_tools): added a method to find all elements corresponding to criteria
Goffi <goffi@goffi.org>
parents: 1818
diff changeset
1400 """Find child element at any depth matching criteria
c271087d2020 core (xml_tools): added a method to find all elements corresponding to criteria
Goffi <goffi@goffi.org>
parents: 1818
diff changeset
1401
c271087d2020 core (xml_tools): added a method to find all elements corresponding to criteria
Goffi <goffi@goffi.org>
parents: 1818
diff changeset
1402 @param elt(domish.Element): top parent of the elements to find
c271087d2020 core (xml_tools): added a method to find all elements corresponding to criteria
Goffi <goffi@goffi.org>
parents: 1818
diff changeset
1403 @param names(iterable, None): names to match
c271087d2020 core (xml_tools): added a method to find all elements corresponding to criteria
Goffi <goffi@goffi.org>
parents: 1818
diff changeset
1404 None to accept every names
c271087d2020 core (xml_tools): added a method to find all elements corresponding to criteria
Goffi <goffi@goffi.org>
parents: 1818
diff changeset
1405 @param namespace(unicode): URIs to match
c271087d2020 core (xml_tools): added a method to find all elements corresponding to criteria
Goffi <goffi@goffi.org>
parents: 1818
diff changeset
1406 None to accept every namespaces
c271087d2020 core (xml_tools): added a method to find all elements corresponding to criteria
Goffi <goffi@goffi.org>
parents: 1818
diff changeset
1407 """
c271087d2020 core (xml_tools): added a method to find all elements corresponding to criteria
Goffi <goffi@goffi.org>
parents: 1818
diff changeset
1408
c271087d2020 core (xml_tools): added a method to find all elements corresponding to criteria
Goffi <goffi@goffi.org>
parents: 1818
diff changeset
1409 for child in elt.elements():
c271087d2020 core (xml_tools): added a method to find all elements corresponding to criteria
Goffi <goffi@goffi.org>
parents: 1818
diff changeset
1410 if ((not names or child.name in names) and
c271087d2020 core (xml_tools): added a method to find all elements corresponding to criteria
Goffi <goffi@goffi.org>
parents: 1818
diff changeset
1411 (not namespaces or child.uri in namespaces)):
c271087d2020 core (xml_tools): added a method to find all elements corresponding to criteria
Goffi <goffi@goffi.org>
parents: 1818
diff changeset
1412 yield child
c271087d2020 core (xml_tools): added a method to find all elements corresponding to criteria
Goffi <goffi@goffi.org>
parents: 1818
diff changeset
1413 for found in findAll(child, names):
c271087d2020 core (xml_tools): added a method to find all elements corresponding to criteria
Goffi <goffi@goffi.org>
parents: 1818
diff changeset
1414 yield found