Mercurial > libervia-desktop-kivy
annotate src/cagou/core/cagou_main.py @ 58:7aa2ffff9067
chat: <img/> tag handling first draft:
We need to have several widgets to handle <img/> (label(s) + image(s)), which make sizing and positioning complicated.
To make things simpler, we use a simple trick when several widgets are present: we split the labels in as many labels as there are words, so we can take profit of the StackLayout.
The split is done after the XHTML is parsed, so after all the widgets are present, and is done only once. This means that label need to be reparsed to be splitted.
This is not perfect, but should be a reasonable solutions until we implement a real XHTML engine (probably CEF widget and Webview).
image sizing and alignment is not handled correcly now, should be fixed soon.
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 28 Sep 2016 22:02:36 +0200 |
parents | 647f32d0a004 |
children | 35abe494e6c7 |
rev | line source |
---|---|
6
85649eca9f9b
core (logs): integrate Kivy logs with SàT:
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
1 #!/usr//bin/env python2 |
0 | 2 # -*- coding: utf-8 -*- |
3 | |
4 # Cagou: desktop/mobile frontend for Salut à Toi XMPP client | |
5 # Copyright (C) 2016 Jérôme Poisson (goffi@goffi.org) | |
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 | |
14 | 21 from sat.core.i18n import _ |
48
028a98983e46
core: avoid kivy arguments hijacking so QuickApp arguments parsing can be used
Goffi <goffi@goffi.org>
parents:
44
diff
changeset
|
22 import kivy_hack |
028a98983e46
core: avoid kivy arguments hijacking so QuickApp arguments parsing can be used
Goffi <goffi@goffi.org>
parents:
44
diff
changeset
|
23 kivy_hack.do_hack() |
6
85649eca9f9b
core (logs): integrate Kivy logs with SàT:
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
24 from constants import Const as C |
0 | 25 from sat.core import log as logging |
26 log = logging.getLogger(__name__) | |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
27 from sat.core import exceptions |
0 | 28 from sat_frontends.quick_frontend.quick_app import QuickApp |
34
02acbb297a61
handler, widget: deleteWidget is now properly called when a QuickWidget is deleted
Goffi <goffi@goffi.org>
parents:
33
diff
changeset
|
29 from sat_frontends.quick_frontend import quick_widgets |
43
12fdc7d1feb1
core: newWidget implementation, it only display a not when a MUC room has been joined
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
30 from sat_frontends.quick_frontend import quick_chat |
48
028a98983e46
core: avoid kivy arguments hijacking so QuickApp arguments parsing can be used
Goffi <goffi@goffi.org>
parents:
44
diff
changeset
|
31 from sat_frontends.quick_frontend import quick_utils |
0 | 32 from sat_frontends.bridge.DBus import DBusBridgeFrontend |
33 import kivy | |
34 kivy.require('1.9.1') | |
35 import kivy.support | |
36 kivy.support.install_gobject_iteration() | |
37 from kivy.app import App | |
14 | 38 from kivy.lang import Builder |
29 | 39 from kivy import properties |
0 | 40 import xmlui |
41 from profile_manager import ProfileManager | |
13 | 42 from widgets_handler import WidgetsHandler |
29 | 43 from kivy.clock import Clock |
44 from kivy.uix.label import Label | |
9 | 45 from kivy.uix.boxlayout import BoxLayout |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
46 from kivy.uix.screenmanager import ScreenManager, Screen, FallOutTransition, RiseInTransition |
29 | 47 from kivy.uix.dropdown import DropDown |
11
49d30fc15884
core: added switchWidget method, to change a CagouWidget for an other one
Goffi <goffi@goffi.org>
parents:
9
diff
changeset
|
48 from cagou_widget import CagouWidget |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
49 from . import widgets_handler |
29 | 50 from .common import IconButton |
51 | 51 from .menu import MenusWidget |
14 | 52 from importlib import import_module |
9 | 53 import os.path |
14 | 54 import glob |
15
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
55 import cagou.plugins |
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
56 import cagou.kv |
9 | 57 |
58 | |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
59 class NotifsIcon(IconButton): |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
60 notifs = properties.ListProperty() |
29 | 61 |
62 def on_release(self): | |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
63 callback, args, kwargs = self.notifs.pop(0) |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
64 callback(*args, **kwargs) |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
65 |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
66 def addNotif(self, callback, *args, **kwargs): |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
67 self.notifs.append((callback, args, kwargs)) |
29 | 68 |
69 | |
70 class Note(Label): | |
71 title = properties.StringProperty() | |
72 message = properties.StringProperty() | |
73 level = properties.OptionProperty(C.XMLUI_DATA_LVL_DEFAULT, options=list(C.XMLUI_DATA_LVLS)) | |
74 | |
75 | |
76 class NoteDrop(Note): | |
77 pass | |
78 | |
79 | |
80 class NotesDrop(DropDown): | |
81 clear_btn = properties.ObjectProperty() | |
82 | |
83 def __init__(self, notes): | |
84 super(NotesDrop, self).__init__() | |
85 self.notes = notes | |
86 | |
87 def open(self, widget): | |
88 self.clear_widgets() | |
89 for n in self.notes: | |
90 self.add_widget(NoteDrop(title=n.title, message=n.message, level=n.level)) | |
91 self.add_widget(self.clear_btn) | |
92 super(NotesDrop, self).open(widget) | |
93 | |
94 | |
95 class RootHeadWidget(BoxLayout): | |
96 """Notifications widget""" | |
97 manager = properties.ObjectProperty() | |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
98 notifs_icon = properties.ObjectProperty() |
29 | 99 notes = properties.ListProperty() |
100 | |
101 def __init__(self): | |
102 super(RootHeadWidget, self).__init__() | |
103 self.notes_last = None | |
104 self.notes_event = None | |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
105 self.notes_drop = NotesDrop(self.notes) |
29 | 106 |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
107 def addNotif(self, callback, *args, **kwargs): |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
108 self.notifs_icon.addNotif(callback, *args, **kwargs) |
29 | 109 |
110 def addNote(self, title, message, level): | |
111 note = Note(title=title, message=message, level=level) | |
112 self.notes.append(note) | |
113 if len(self.notes) > 10: | |
114 del self.notes[:-10] | |
115 if self.notes_event is None: | |
116 self.notes_event = Clock.schedule_interval(self._displayNextNote, 5) | |
117 self._displayNextNote() | |
118 | |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
119 def addNotifUI(self, ui): |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
120 self.notifs_icon.addNotif(ui.show, force=True) |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
121 |
29 | 122 def _displayNextNote(self, dummy=None): |
123 screen = Screen() | |
124 try: | |
125 idx = self.notes.index(self.notes_last) + 1 | |
126 except ValueError: | |
127 idx = 0 | |
128 try: | |
129 note = self.notes_last = self.notes[idx] | |
130 except IndexError: | |
131 self.notes_event.cancel() | |
132 self.notes_event = None | |
133 else: | |
134 screen.add_widget(note) | |
135 self.manager.switch_to(screen) | |
136 | |
137 | |
9 | 138 class CagouRootWidget(BoxLayout): |
139 | |
29 | 140 def __init__(self, main_widget): |
9 | 141 super(CagouRootWidget, self).__init__(orientation=("vertical")) |
51 | 142 # general menus |
143 self.menus_widget = MenusWidget() | |
144 self.add_widget(self.menus_widget) | |
29 | 145 # header |
146 self._head_widget = RootHeadWidget() | |
147 self.add_widget(self._head_widget) | |
148 # body | |
149 self._manager = ScreenManager() | |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
150 # main widgets |
29 | 151 main_screen = Screen(name='main') |
152 main_screen.add_widget(main_widget) | |
153 self._manager.add_widget(main_screen) | |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
154 # backend XMLUI (popups, forms, etc) |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
155 xmlui_screen = Screen(name='xmlui') |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
156 self._manager.add_widget(xmlui_screen) |
29 | 157 self.add_widget(self._manager) |
158 | |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
159 def changeWidget(self, widget, screen_name="main"): |
29 | 160 """change main widget""" |
52
647f32d0a004
core: workaround issue happening when root widget is changed too quickly (during a transition)
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
161 if self._manager.transition.is_active: |
647f32d0a004
core: workaround issue happening when root widget is changed too quickly (during a transition)
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
162 # FIXME: workaround for what seems a Kivy bug |
647f32d0a004
core: workaround issue happening when root widget is changed too quickly (during a transition)
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
163 # TODO: report this upstream |
647f32d0a004
core: workaround issue happening when root widget is changed too quickly (during a transition)
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
164 self._manager.transition.stop() |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
165 screen = self._manager.get_screen(screen_name) |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
166 screen.clear_widgets() |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
167 screen.add_widget(widget) |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
168 |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
169 def show(self, screen="main"): |
52
647f32d0a004
core: workaround issue happening when root widget is changed too quickly (during a transition)
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
170 if self._manager.transition.is_active: |
647f32d0a004
core: workaround issue happening when root widget is changed too quickly (during a transition)
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
171 # FIXME: workaround for what seems a Kivy bug |
647f32d0a004
core: workaround issue happening when root widget is changed too quickly (during a transition)
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
172 # TODO: report this upstream |
647f32d0a004
core: workaround issue happening when root widget is changed too quickly (during a transition)
Goffi <goffi@goffi.org>
parents:
51
diff
changeset
|
173 self._manager.transition.stop() |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
174 if self._manager.current == screen: |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
175 return |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
176 if screen == "main": |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
177 self._manager.transition = FallOutTransition() |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
178 else: |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
179 self._manager.transition = RiseInTransition() |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
180 self._manager.current = screen |
29 | 181 |
182 def newAction(self, handler, action_data, id_, security_limit, profile): | |
183 """Add a notification for an action""" | |
184 self._head_widget.addNotif(handler, action_data, id_, security_limit, profile) | |
185 | |
186 def addNote(self, title, message, level): | |
187 self._head_widget.addNote(title, message, level) | |
0 | 188 |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
189 def addNotifUI(self, ui): |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
190 self._head_widget.addNotifUI(ui) |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
191 |
0 | 192 |
193 class CagouApp(App): | |
194 """Kivy App for Cagou""" | |
195 | |
196 def build(self): | |
49
fd9cbf6ae663
core: postInit() is now called, allowing automatic profile connection
Goffi <goffi@goffi.org>
parents:
48
diff
changeset
|
197 self._profile_manager = ProfileManager() |
fd9cbf6ae663
core: postInit() is now called, allowing automatic profile connection
Goffi <goffi@goffi.org>
parents:
48
diff
changeset
|
198 return CagouRootWidget(self._profile_manager) |
0 | 199 |
31
4f9e701d76b4
core: expand now accepts extra arguments, which will be used in format
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
200 def expand(self, path, *args, **kwargs): |
28
9f9532eb835f
core: added expand method to expand filename with magic values, specially useful in kv
Goffi <goffi@goffi.org>
parents:
25
diff
changeset
|
201 """expand path and replace known values |
9f9532eb835f
core: added expand method to expand filename with magic values, specially useful in kv
Goffi <goffi@goffi.org>
parents:
25
diff
changeset
|
202 |
32 | 203 useful in kv. Values which can be used: |
204 - {media}: media dir | |
31
4f9e701d76b4
core: expand now accepts extra arguments, which will be used in format
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
205 @param path(unicode): path to expand |
4f9e701d76b4
core: expand now accepts extra arguments, which will be used in format
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
206 @param *args: additional arguments used in format |
4f9e701d76b4
core: expand now accepts extra arguments, which will be used in format
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
207 @param **kwargs: additional keyword arguments used in format |
28
9f9532eb835f
core: added expand method to expand filename with magic values, specially useful in kv
Goffi <goffi@goffi.org>
parents:
25
diff
changeset
|
208 """ |
31
4f9e701d76b4
core: expand now accepts extra arguments, which will be used in format
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
209 return os.path.expanduser(path).format(*args, media=self.host.media_dir, **kwargs) |
28
9f9532eb835f
core: added expand method to expand filename with magic values, specially useful in kv
Goffi <goffi@goffi.org>
parents:
25
diff
changeset
|
210 |
0 | 211 |
212 class Cagou(QuickApp): | |
213 MB_HANDLE = False | |
214 | |
215 def __init__(self): | |
48
028a98983e46
core: avoid kivy arguments hijacking so QuickApp arguments parsing can be used
Goffi <goffi@goffi.org>
parents:
44
diff
changeset
|
216 super(Cagou, self).__init__(create_bridge=DBusBridgeFrontend, xmlui=xmlui, check_options=quick_utils.check_options) |
15
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
217 self._import_kv() |
0 | 218 self.app = CagouApp() |
29 | 219 self.app.host = self |
25
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
220 self.media_dir = self.app.media_dir = self.bridge.getConfig("", "media_dir") |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
221 self.app.default_avatar = os.path.join(self.media_dir, "misc/default_avatar.png") |
14 | 222 self._plg_wids = [] # widget plugins |
223 self._import_plugins() | |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
224 self._visible_widgets = {} # visible widgets by classes |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
225 |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
226 @property |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
227 def visible_widgets(self): |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
228 for w_list in self._visible_widgets.itervalues(): |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
229 for w in w_list: |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
230 yield w |
0 | 231 |
232 def run(self): | |
49
fd9cbf6ae663
core: postInit() is now called, allowing automatic profile connection
Goffi <goffi@goffi.org>
parents:
48
diff
changeset
|
233 Clock.schedule_once(self.postInit) |
0 | 234 self.app.run() |
235 | |
49
fd9cbf6ae663
core: postInit() is now called, allowing automatic profile connection
Goffi <goffi@goffi.org>
parents:
48
diff
changeset
|
236 def postInit(self, dummy): |
fd9cbf6ae663
core: postInit() is now called, allowing automatic profile connection
Goffi <goffi@goffi.org>
parents:
48
diff
changeset
|
237 profile_manager = self.app._profile_manager |
fd9cbf6ae663
core: postInit() is now called, allowing automatic profile connection
Goffi <goffi@goffi.org>
parents:
48
diff
changeset
|
238 del self.app._profile_manager |
fd9cbf6ae663
core: postInit() is now called, allowing automatic profile connection
Goffi <goffi@goffi.org>
parents:
48
diff
changeset
|
239 super(Cagou, self).postInit(profile_manager) |
fd9cbf6ae663
core: postInit() is now called, allowing automatic profile connection
Goffi <goffi@goffi.org>
parents:
48
diff
changeset
|
240 |
16
ba14b596b90e
host can now be get as a global value:
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
241 def _defaultFactory(self, plugin_info, target, profiles): |
14 | 242 """factory used to create widget instance when PLUGIN_INFO["factory"] is not set""" |
243 main_cls = plugin_info['main'] | |
19
c58b522607f4
main: fixed profiles value in _defaultFactory + getPluggedWidgets is now a generator
Goffi <goffi@goffi.org>
parents:
16
diff
changeset
|
244 return self.widgets.getOrCreateWidget(main_cls, target, on_new_widget=None, profiles=iter(self.profiles)) |
14 | 245 |
29 | 246 ## plugins & kv import ## |
247 | |
15
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
248 def _import_kv(self): |
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
249 """import all kv files in cagou.kv""" |
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
250 path = os.path.dirname(cagou.kv.__file__) |
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
251 for kv_path in glob.glob(os.path.join(path, "*.kv")): |
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
252 Builder.load_file(kv_path) |
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
253 log.debug(u"kv file {} loaded".format(kv_path)) |
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
254 |
14 | 255 def _import_plugins(self): |
15
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
256 """import all plugins""" |
14 | 257 self.default_wid = None |
15
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
258 plugins_path = os.path.dirname(cagou.plugins.__file__) |
14 | 259 plug_lst = [os.path.splitext(p)[0] for p in map(os.path.basename, glob.glob(os.path.join(plugins_path, "plugin*.py")))] |
260 imported_names = set() # use to avoid loading 2 times plugin with same import name | |
261 for plug in plug_lst: | |
15
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
262 plugin_path = 'cagou.plugins.' + plug |
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
263 mod = import_module(plugin_path) |
14 | 264 try: |
265 plugin_info = mod.PLUGIN_INFO | |
266 except AttributeError: | |
267 plugin_info = {} | |
268 | |
269 # import name is used to differentiate plugins | |
270 if 'import_name' not in plugin_info: | |
271 plugin_info['import_name'] = plug | |
272 if 'import_name' in imported_names: | |
273 log.warning(_(u"there is already a plugin named {}, ignoring new one").format(plugin_info['import_name'])) | |
274 continue | |
275 if plugin_info['import_name'] == C.WID_SELECTOR: | |
276 # if WidgetSelector exists, it will be our default widget | |
277 self.default_wid = plugin_info | |
278 | |
279 # we want everything optional, so we use plugin file name | |
280 # if actual name is not found | |
281 if 'name' not in plugin_info: | |
282 plugin_info['name'] = plug[plug.rfind('_')+1:] | |
283 | |
284 # we need to load the kv file | |
285 if 'kv_file' not in plugin_info: | |
286 plugin_info['kv_file'] = u'{}.kv'.format(plug) | |
15
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
287 kv_path = os.path.join(plugins_path, plugin_info['kv_file']) |
56838ad5c84b
files reorganisation, cagou is now launched with python2 cagou.py in src/
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
288 Builder.load_file(kv_path) |
14 | 289 |
290 # what is the main class ? | |
291 main_cls = getattr(mod, plugin_info['main']) | |
292 plugin_info['main'] = main_cls | |
293 | |
294 # factory is used to create the instance | |
295 # if not found, we use a defaut one with getOrCreateWidget | |
296 if 'factory' not in plugin_info: | |
297 plugin_info['factory'] = self._defaultFactory | |
298 | |
25
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
299 # icons |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
300 for size in ('small', 'medium'): |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
301 key = u'icon_{}'.format(size) |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
302 try: |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
303 path = plugin_info[key] |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
304 except KeyError: |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
305 path = C.DEFAULT_WIDGET_ICON.format(media=self.media_dir) |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
306 else: |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
307 path = path.format(media=self.media_dir) |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
308 if not os.path.isfile(path): |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
309 path = C.DEFAULT_WIDGET_ICON.format(media=self.media_dir) |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
310 plugin_info[key] = path |
d09bd16dbbe2
code (cagou widget), selector: icons handling + use of new muchoslava icon set
Goffi <goffi@goffi.org>
parents:
19
diff
changeset
|
311 |
14 | 312 self._plg_wids.append(plugin_info) |
313 if not self._plg_wids: | |
314 log.error(_(u"no widget plugin found")) | |
315 return | |
316 | |
317 # we want widgets sorted by names | |
318 self._plg_wids.sort(key=lambda p: p['name'].lower()) | |
319 | |
320 if self.default_wid is None: | |
321 # we have no selector widget, we use the first widget as default | |
322 self.default_wid = self._plg_wids[0] | |
323 | |
324 def getPluggedWidgets(self, except_cls=None): | |
325 """get available widgets plugin infos | |
326 | |
327 @param except_cls(None, class): if not None, | |
328 widgets from this class will be excluded | |
41
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
329 @return (iter[dict]): available widgets plugin infos |
14 | 330 """ |
19
c58b522607f4
main: fixed profiles value in _defaultFactory + getPluggedWidgets is now a generator
Goffi <goffi@goffi.org>
parents:
16
diff
changeset
|
331 for plugin_data in self._plg_wids: |
c58b522607f4
main: fixed profiles value in _defaultFactory + getPluggedWidgets is now a generator
Goffi <goffi@goffi.org>
parents:
16
diff
changeset
|
332 if plugin_data['main'] == except_cls: |
c58b522607f4
main: fixed profiles value in _defaultFactory + getPluggedWidgets is now a generator
Goffi <goffi@goffi.org>
parents:
16
diff
changeset
|
333 continue |
c58b522607f4
main: fixed profiles value in _defaultFactory + getPluggedWidgets is now a generator
Goffi <goffi@goffi.org>
parents:
16
diff
changeset
|
334 yield plugin_data |
14 | 335 |
41
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
336 def getPluginInfo(self, **kwargs): |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
337 """get first plugin info corresponding to filters |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
338 |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
339 @param **kwargs: filter(s) to use, each key present here must also |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
340 exist and be of the same value in requested plugin info |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
341 @return (dict, None): found plugin info or None |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
342 """ |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
343 for plugin_info in self._plg_wids: |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
344 for k, w in kwargs.iteritems(): |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
345 try: |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
346 if plugin_info[k] != w: |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
347 continue |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
348 except KeyError: |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
349 continue |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
350 return plugin_info |
7cac2d1a6f20
core: new getPluginInfo method to retrieve plugin info corresponding to filter(s)
Goffi <goffi@goffi.org>
parents:
40
diff
changeset
|
351 |
29 | 352 ## widgets handling |
9 | 353 |
43
12fdc7d1feb1
core: newWidget implementation, it only display a not when a MUC room has been joined
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
354 def newWidget(self, widget): |
12fdc7d1feb1
core: newWidget implementation, it only display a not when a MUC room has been joined
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
355 log.debug(u"new widget created: {}".format(widget)) |
12fdc7d1feb1
core: newWidget implementation, it only display a not when a MUC room has been joined
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
356 if isinstance(widget, quick_chat.QuickChat) and widget.type == C.CHAT_GROUP: |
12fdc7d1feb1
core: newWidget implementation, it only display a not when a MUC room has been joined
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
357 self.addNote(u"", _(u"room {} has been joined").format(widget.target)) |
12fdc7d1feb1
core: newWidget implementation, it only display a not when a MUC room has been joined
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
358 |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
359 def getParentHandler(self, widget): |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
360 """Return handler holding this widget |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
361 |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
362 @return (WidgetsHandler): handler |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
363 """ |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
364 w_handler = widget.parent |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
365 while w_handler and not(isinstance(w_handler, widgets_handler.WidgetsHandler)): |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
366 w_handler = w_handler.parent |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
367 return w_handler |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
368 |
11
49d30fc15884
core: added switchWidget method, to change a CagouWidget for an other one
Goffi <goffi@goffi.org>
parents:
9
diff
changeset
|
369 def switchWidget(self, old, new): |
49d30fc15884
core: added switchWidget method, to change a CagouWidget for an other one
Goffi <goffi@goffi.org>
parents:
9
diff
changeset
|
370 """Replace old widget by new one |
49d30fc15884
core: added switchWidget method, to change a CagouWidget for an other one
Goffi <goffi@goffi.org>
parents:
9
diff
changeset
|
371 |
49d30fc15884
core: added switchWidget method, to change a CagouWidget for an other one
Goffi <goffi@goffi.org>
parents:
9
diff
changeset
|
372 old(CagouWidget): CagouWidget instance or a child |
49d30fc15884
core: added switchWidget method, to change a CagouWidget for an other one
Goffi <goffi@goffi.org>
parents:
9
diff
changeset
|
373 new(CagouWidget): new widget instance |
49d30fc15884
core: added switchWidget method, to change a CagouWidget for an other one
Goffi <goffi@goffi.org>
parents:
9
diff
changeset
|
374 """ |
14 | 375 to_change = None |
376 if isinstance(old, CagouWidget): | |
377 to_change = old | |
378 else: | |
379 for w in old.walk_reverse(): | |
380 if isinstance(w, CagouWidget): | |
381 to_change = w | |
382 break | |
383 | |
384 if to_change is None: | |
38
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
385 raise exceptions.InternalError(u"no CagouWidget found when trying to switch widget") |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
386 handler = self.getParentHandler(to_change) |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
387 handler.changeWidget(new) |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
388 |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
389 def addVisibleWidget(self, widget): |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
390 """declare a widget visible |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
391 |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
392 for internal use only! |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
393 """ |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
394 assert isinstance(widget, quick_widgets.QuickWidget) |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
395 self._visible_widgets.setdefault(widget.__class__, []).append(widget) |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
396 |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
397 def removeVisibleWidget(self, widget): |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
398 """declare a widget not visible anymore |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
399 |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
400 for internal use only! |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
401 """ |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
402 self._visible_widgets[widget.__class__].remove(widget) |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
403 self.widgets.deleteWidget(widget) |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
404 |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
405 def getVisibleList(self, cls): |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
406 """get list of visible widgets for a given class |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
407 |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
408 @param cls(QuickWidget class): type of widgets to get |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
409 @return (list[QuickWidget class]): visible widgets of this class |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
410 """ |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
411 try: |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
412 return self._visible_widgets[cls] |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
413 except KeyError: |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
414 return [] |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
415 |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
416 def getOrClone(self, widget): |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
417 """Get a QuickWidget if it has not parent set else clone it""" |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
418 if widget.parent is None: |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
419 return widget |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
420 targets = list(widget.targets) |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
421 w = self.widgets.getOrCreateWidget(widget.__class__, targets[0], on_new_widget=None, on_existing_widget=C.WIDGET_RECREATE, profiles=widget.profiles) |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
422 for t in targets[1:]: |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
423 w.addTarget(t) |
9f45098289cc
widgets handler, core: hidden widgets can now be shown with swipes:
Goffi <goffi@goffi.org>
parents:
34
diff
changeset
|
424 return w |
29 | 425 |
51 | 426 ## menus ## |
427 | |
428 def _getMenusCb(self, backend_menus): | |
429 main_menu = self.app.root.menus_widget | |
430 self.menus.addMenus(backend_menus) | |
431 self.menus.addMenu(C.MENU_GLOBAL, (_(u"Help"), _(u"About")), callback=main_menu.onAbout) | |
432 main_menu.update(C.MENU_GLOBAL) | |
433 | |
29 | 434 ## misc ## |
435 | |
436 def plugging_profiles(self): | |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
437 self.app.root.changeWidget(WidgetsHandler()) |
51 | 438 self.bridge.getMenus("", C.NO_SECURITY_LIMIT, callback=self._getMenusCb) |
29 | 439 |
440 def setPresenceStatus(self, show='', status=None, profile=C.PROF_KEY_NONE): | |
441 log.info(u"Profile presence status set to {show}/{status}".format(show=show, status=status)) | |
442 | |
43
12fdc7d1feb1
core: newWidget implementation, it only display a not when a MUC room has been joined
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
443 def addNote(self, title, message, level=C.XMLUI_DATA_LVL_INFO): |
29 | 444 """add a note (message which disappear) to root widget's header""" |
445 self.app.root.addNote(title, message, level) | |
446 | |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
447 def addNotifUI(self, ui): |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
448 """add a notification with a XMLUI attached |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
449 |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
450 @param ui(xmlui.XMLUIPanel): XMLUI instance to show when notification is selected |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
451 """ |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
452 self.app.root.addNotifUI(ui) |
29 | 453 |
33
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
454 def showUI(self, ui): |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
455 self.app.root.changeWidget(ui, "xmlui") |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
456 self.app.root.show("xmlui") |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
457 |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
458 def closeUI(self): |
c21d1be2e54c
core: XMLUI notifications coming from backend are handled:
Goffi <goffi@goffi.org>
parents:
32
diff
changeset
|
459 self.app.root.show() |
44
7819e9efa250
chat: avatar and nick are now displayed, need further aesthetic improvments
Goffi <goffi@goffi.org>
parents:
43
diff
changeset
|
460 |
7819e9efa250
chat: avatar and nick are now displayed, need further aesthetic improvments
Goffi <goffi@goffi.org>
parents:
43
diff
changeset
|
461 def getDefaultAvatar(self, entity=None): |
7819e9efa250
chat: avatar and nick are now displayed, need further aesthetic improvments
Goffi <goffi@goffi.org>
parents:
43
diff
changeset
|
462 return self.app.default_avatar |