Mercurial > libervia-desktop-kivy
annotate cagou/core/cagou_widget.py @ 425:13884aac1220
chat: show images in attachments:
- if an image is received from somebody in roster, it is automatically displayed (we
display only for people in roster to avoid IP address leak)
- encrypted files are decrypted and stored in cache before being displayed
- GIFs image are shown as attachment because they are badly handle in Kivy (images
frequencies is not handled correctly, and memory consumption explode). Instead, a click
on it will open the GIF in the appropriate software of the platform.
- a click on an attachment image will open it in the gallery
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 26 Feb 2020 16:47:39 +0100 |
parents | 84ff5c917064 |
children | 3c9ba4a694ef |
rev | line source |
---|---|
379 | 1 #!/usr/bin/env python3 |
2 | |
10 | 3 |
4 # Cagou: desktop/mobile frontend for Salut à Toi XMPP client | |
378 | 5 # Copyright (C) 2016-2020 Jérôme Poisson (goffi@goffi.org) |
10 | 6 |
7 # This program is free software: you can redistribute it and/or modify | |
8 # it under the terms of the GNU Affero General Public License as published by | |
9 # the Free Software Foundation, either version 3 of the License, or | |
10 # (at your option) any later version. | |
11 | |
12 # This program is distributed in the hope that it will be useful, | |
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 # GNU Affero General Public License for more details. | |
16 | |
17 # You should have received a copy of the GNU Affero General Public License | |
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 | |
20 | |
405
84ff5c917064
widgets: implemented ordering in ContactItem and CagouWidget:
Goffi <goffi@goffi.org>
parents:
387
diff
changeset
|
21 from functools import total_ordering |
10 | 22 from sat.core import log as logging |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
23 from sat.core import exceptions |
25
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
24 from kivy.uix.behaviors import ButtonBehavior |
10 | 25 from kivy.uix.boxlayout import BoxLayout |
26 from kivy.uix.dropdown import DropDown | |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
27 from kivy.uix.screenmanager import Screen |
387
d61bbbac4160
cagou widget: don't add header_input systematically anymore:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
28 from kivy.uix.textinput import TextInput |
20
29b507826eed
header's input field is now accessible with self.header_input and call onHeaderInput() on text entered
Goffi <goffi@goffi.org>
parents:
16
diff
changeset
|
29 from kivy import properties |
16
ba14b596b90e
host can now be get as a global value:
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
30 from cagou import G |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
31 from .common import ActionIcon |
376 | 32 from . import menu |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
33 |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
34 |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
35 log = logging.getLogger(__name__) |
10 | 36 |
37 | |
376 | 38 class HeaderChoice(ButtonBehavior, BoxLayout): |
39 pass | |
40 | |
41 | |
42 class HeaderChoiceWidget(HeaderChoice): | |
43 cagou_widget = properties.ObjectProperty() | |
44 plugin_info = properties.ObjectProperty() | |
164
60b2b2bad747
core (widget selector): adjusted selector size to content, and added some spacing
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
45 |
376 | 46 def __init__(self, **kwargs): |
47 super().__init__(**kwargs) | |
48 self.bind(on_release=lambda btn: self.cagou_widget.switchWidget( | |
49 self.plugin_info)) | |
50 | |
51 | |
52 class HeaderChoiceExtraMenu(HeaderChoice): | |
53 pass | |
25
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
54 |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
55 |
179
7177fe2d9725
common: new ActionIcon widget which display symbol or image icon according to what is specified in plugin_info
Goffi <goffi@goffi.org>
parents:
164
diff
changeset
|
56 class HeaderWidgetCurrent(ButtonBehavior, ActionIcon): |
14 | 57 pass |
58 | |
59 | |
10 | 60 class HeaderWidgetSelector(DropDown): |
14 | 61 |
62 def __init__(self, cagou_widget): | |
63 super(HeaderWidgetSelector, self).__init__() | |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
64 plg_info_cls = cagou_widget.plugin_info_class or cagou_widget.__class__ |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
65 for plugin_info in G.host.getPluggedWidgets(except_cls=plg_info_cls): |
376 | 66 choice = HeaderChoiceWidget( |
67 cagou_widget=cagou_widget, | |
68 plugin_info=plugin_info, | |
69 ) | |
25
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
70 self.add_widget(choice) |
376 | 71 main_menu = HeaderChoiceExtraMenu(on_press=self.on_extra_menu) |
72 self.add_widget(main_menu) | |
10 | 73 |
164
60b2b2bad747
core (widget selector): adjusted selector size to content, and added some spacing
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
74 def add_widget(self, *args): |
60b2b2bad747
core (widget selector): adjusted selector size to content, and added some spacing
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
75 widget = args[0] |
60b2b2bad747
core (widget selector): adjusted selector size to content, and added some spacing
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
76 widget.bind(minimum_width=self.set_width) |
60b2b2bad747
core (widget selector): adjusted selector size to content, and added some spacing
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
77 return super(HeaderWidgetSelector, self).add_widget(*args) |
60b2b2bad747
core (widget selector): adjusted selector size to content, and added some spacing
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
78 |
60b2b2bad747
core (widget selector): adjusted selector size to content, and added some spacing
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
79 def set_width(self, choice, minimum_width): |
60b2b2bad747
core (widget selector): adjusted selector size to content, and added some spacing
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
80 self.width = max([c.minimum_width for c in self.container.children]) |
60b2b2bad747
core (widget selector): adjusted selector size to content, and added some spacing
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
81 |
376 | 82 def on_extra_menu(self, *args): |
83 self.dismiss() | |
84 menu.ExtraSideMenu().show() | |
85 | |
10 | 86 |
405
84ff5c917064
widgets: implemented ordering in ContactItem and CagouWidget:
Goffi <goffi@goffi.org>
parents:
387
diff
changeset
|
87 @total_ordering |
10 | 88 class CagouWidget(BoxLayout): |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
89 main_container = properties.ObjectProperty(None) |
20
29b507826eed
header's input field is now accessible with self.header_input and call onHeaderInput() on text entered
Goffi <goffi@goffi.org>
parents:
16
diff
changeset
|
90 header_input = properties.ObjectProperty(None) |
115
e0c41f209c28
CagouWidget: instances can now add their own extra widgets in header with headerInputAddExtra
Goffi <goffi@goffi.org>
parents:
108
diff
changeset
|
91 header_box = properties.ObjectProperty(None) |
387
d61bbbac4160
cagou widget: don't add header_input systematically anymore:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
92 use_header_input = False |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
93 # set to True if you want to be able to switch between visible widgets of this |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
94 # class using a carousel |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
95 collection_carousel = False |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
96 # set to True if you a global ScreenManager global to all widgets of this class. |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
97 # The screen manager is created in WHWrapper |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
98 global_screen_manager = False |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
99 # override this if a specific class (i.e. not self.__class__) must be used for |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
100 # plugin info. Useful when a CagouWidget is used with global_screen_manager. |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
101 plugin_info_class = None |
10 | 102 |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
103 def __init__(self, **kwargs): |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
104 plg_info_cls = self.plugin_info_class or self.__class__ |
25
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
105 for p in G.host.getPluggedWidgets(): |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
106 if p['main'] == plg_info_cls: |
25
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
107 self.plugin_info = p |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
108 break |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
109 super().__init__(**kwargs) |
14 | 110 self.selector = HeaderWidgetSelector(self) |
387
d61bbbac4160
cagou widget: don't add header_input systematically anymore:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
111 if self.use_header_input: |
d61bbbac4160
cagou widget: don't add header_input systematically anymore:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
112 self.header_input = TextInput( |
d61bbbac4160
cagou widget: don't add header_input systematically anymore:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
113 background_normal=G.host.app.expand( |
d61bbbac4160
cagou widget: don't add header_input systematically anymore:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
114 '{media}/misc/borders/border_hollow_light.png'), |
d61bbbac4160
cagou widget: don't add header_input systematically anymore:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
115 multiline=False, |
d61bbbac4160
cagou widget: don't add header_input systematically anymore:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
116 ) |
d61bbbac4160
cagou widget: don't add header_input systematically anymore:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
117 self.header_input.bind( |
d61bbbac4160
cagou widget: don't add header_input systematically anymore:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
118 on_text_validate=lambda *args: self.onHeaderInput(), |
d61bbbac4160
cagou widget: don't add header_input systematically anymore:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
119 text=self.onHeaderInputComplete, |
d61bbbac4160
cagou widget: don't add header_input systematically anymore:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
120 ) |
d61bbbac4160
cagou widget: don't add header_input systematically anymore:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
121 self.header_box.add_widget(self.header_input) |
14 | 122 |
405
84ff5c917064
widgets: implemented ordering in ContactItem and CagouWidget:
Goffi <goffi@goffi.org>
parents:
387
diff
changeset
|
123 def __lt__(self, other): |
84ff5c917064
widgets: implemented ordering in ContactItem and CagouWidget:
Goffi <goffi@goffi.org>
parents:
387
diff
changeset
|
124 # XXX: sorting is notably used when collection_carousel is set |
84ff5c917064
widgets: implemented ordering in ContactItem and CagouWidget:
Goffi <goffi@goffi.org>
parents:
387
diff
changeset
|
125 try: |
84ff5c917064
widgets: implemented ordering in ContactItem and CagouWidget:
Goffi <goffi@goffi.org>
parents:
387
diff
changeset
|
126 target = str(self.target) |
84ff5c917064
widgets: implemented ordering in ContactItem and CagouWidget:
Goffi <goffi@goffi.org>
parents:
387
diff
changeset
|
127 except AttributeError: |
84ff5c917064
widgets: implemented ordering in ContactItem and CagouWidget:
Goffi <goffi@goffi.org>
parents:
387
diff
changeset
|
128 target = str(list(self.targets)[0]) |
84ff5c917064
widgets: implemented ordering in ContactItem and CagouWidget:
Goffi <goffi@goffi.org>
parents:
387
diff
changeset
|
129 other_target = str(list(other.targets)[0]) |
84ff5c917064
widgets: implemented ordering in ContactItem and CagouWidget:
Goffi <goffi@goffi.org>
parents:
387
diff
changeset
|
130 else: |
84ff5c917064
widgets: implemented ordering in ContactItem and CagouWidget:
Goffi <goffi@goffi.org>
parents:
387
diff
changeset
|
131 other_target = str(other.target) |
84ff5c917064
widgets: implemented ordering in ContactItem and CagouWidget:
Goffi <goffi@goffi.org>
parents:
387
diff
changeset
|
132 return target < other_target |
84ff5c917064
widgets: implemented ordering in ContactItem and CagouWidget:
Goffi <goffi@goffi.org>
parents:
387
diff
changeset
|
133 |
353
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
134 @property |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
135 def screen_manager(self): |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
136 if ((not self.global_screen_manager |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
137 and not (self.plugin_info_class is not None |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
138 and self.plugin_info_class.global_screen_manager))): |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
139 raise exceptions.InternalError( |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
140 "screen_manager property can't be used if global_screen_manager is not " |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
141 "set") |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
142 screen = self.getAncestor(Screen) |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
143 if screen is None: |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
144 raise exceptions.NotFound("Can't find parent Screen") |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
145 if screen.manager is None: |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
146 raise exceptions.NotFound("Can't find parent ScreenManager") |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
147 return screen.manager |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
148 |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
149 @property |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
150 def whwrapper(self): |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
151 """Retrieve parent widget handler""" |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
152 return G.host.getParentWHWrapper(self) |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
153 |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
154 def screenManagerInit(self, screen_manager): |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
155 """Override this method to do init when ScreenManager is instantiated |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
156 |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
157 This is only called once even if collection_carousel is used. |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
158 """ |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
159 if not self.global_screen_manager: |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
160 raise exceptions.InternalError("screenManagerInit should not be called") |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
161 |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
162 def getAncestor(self, cls): |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
163 """Helper method to use host.getAncestorWidget with self""" |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
164 return G.host.getAncestorWidget(self, cls) |
19422bbd9c8e
core (widgets handler): refactoring:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
165 |
14 | 166 def switchWidget(self, plugin_info): |
167 self.selector.dismiss() | |
168 factory = plugin_info["factory"] | |
20
29b507826eed
header's input field is now accessible with self.header_input and call onHeaderInput() on text entered
Goffi <goffi@goffi.org>
parents:
16
diff
changeset
|
169 new_widget = factory(plugin_info, None, iter(G.host.profiles)) |
16
ba14b596b90e
host can now be get as a global value:
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
170 G.host.switchWidget(self, new_widget) |
20
29b507826eed
header's input field is now accessible with self.header_input and call onHeaderInput() on text entered
Goffi <goffi@goffi.org>
parents:
16
diff
changeset
|
171 |
357
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
353
diff
changeset
|
172 def key_input(self, window, key, scancode, codepoint, modifier): |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
353
diff
changeset
|
173 if key == 27: |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
353
diff
changeset
|
174 # we go back to root screen |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
353
diff
changeset
|
175 G.host.switchWidget(self) |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
353
diff
changeset
|
176 return True |
4d3a0c4f2430
core: better back key (ESC) management:
Goffi <goffi@goffi.org>
parents:
353
diff
changeset
|
177 |
20
29b507826eed
header's input field is now accessible with self.header_input and call onHeaderInput() on text entered
Goffi <goffi@goffi.org>
parents:
16
diff
changeset
|
178 def onHeaderInput(self): |
312 | 179 log.info("header input text entered") |
51 | 180 |
108
953ddf817b8a
cagou widget: added onHeaderInputComplete method which is called when text is changed, and should be used for completion
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
181 def onHeaderInputComplete(self, wid, text): |
953ddf817b8a
cagou widget: added onHeaderInputComplete method which is called when text is changed, and should be used for completion
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
182 return |
953ddf817b8a
cagou widget: added onHeaderInputComplete method which is called when text is changed, and should be used for completion
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
183 |
51 | 184 def on_touch_down(self, touch): |
185 if self.collide_point(*touch.pos): | |
186 G.host.selected_widget = self | |
158
976f22cb3ecc
core (cagou widget): return parent value in on_touch_down
Goffi <goffi@goffi.org>
parents:
126
diff
changeset
|
187 return super(CagouWidget, self).on_touch_down(touch) |
115
e0c41f209c28
CagouWidget: instances can now add their own extra widgets in header with headerInputAddExtra
Goffi <goffi@goffi.org>
parents:
108
diff
changeset
|
188 |
e0c41f209c28
CagouWidget: instances can now add their own extra widgets in header with headerInputAddExtra
Goffi <goffi@goffi.org>
parents:
108
diff
changeset
|
189 def headerInputAddExtra(self, widget): |
e0c41f209c28
CagouWidget: instances can now add their own extra widgets in header with headerInputAddExtra
Goffi <goffi@goffi.org>
parents:
108
diff
changeset
|
190 """add a widget on the right of header input""" |
e0c41f209c28
CagouWidget: instances can now add their own extra widgets in header with headerInputAddExtra
Goffi <goffi@goffi.org>
parents:
108
diff
changeset
|
191 self.header_box.add_widget(widget) |
264
3e11b5d923e2
core: call new methods onVisible and onNotVisible when a widget is displayed or hidden + fixed a deletion bug on _removeVisibleWidget
Goffi <goffi@goffi.org>
parents:
222
diff
changeset
|
192 |
3e11b5d923e2
core: call new methods onVisible and onNotVisible when a widget is displayed or hidden + fixed a deletion bug on _removeVisibleWidget
Goffi <goffi@goffi.org>
parents:
222
diff
changeset
|
193 def onVisible(self): |
3e11b5d923e2
core: call new methods onVisible and onNotVisible when a widget is displayed or hidden + fixed a deletion bug on _removeVisibleWidget
Goffi <goffi@goffi.org>
parents:
222
diff
changeset
|
194 pass |
3e11b5d923e2
core: call new methods onVisible and onNotVisible when a widget is displayed or hidden + fixed a deletion bug on _removeVisibleWidget
Goffi <goffi@goffi.org>
parents:
222
diff
changeset
|
195 # log.debug(u"{self} is visible".format(self=self)) |
3e11b5d923e2
core: call new methods onVisible and onNotVisible when a widget is displayed or hidden + fixed a deletion bug on _removeVisibleWidget
Goffi <goffi@goffi.org>
parents:
222
diff
changeset
|
196 |
3e11b5d923e2
core: call new methods onVisible and onNotVisible when a widget is displayed or hidden + fixed a deletion bug on _removeVisibleWidget
Goffi <goffi@goffi.org>
parents:
222
diff
changeset
|
197 def onNotVisible(self): |
3e11b5d923e2
core: call new methods onVisible and onNotVisible when a widget is displayed or hidden + fixed a deletion bug on _removeVisibleWidget
Goffi <goffi@goffi.org>
parents:
222
diff
changeset
|
198 pass |
3e11b5d923e2
core: call new methods onVisible and onNotVisible when a widget is displayed or hidden + fixed a deletion bug on _removeVisibleWidget
Goffi <goffi@goffi.org>
parents:
222
diff
changeset
|
199 # log.debug(u"{self} is not visible anymore".format(self=self)) |