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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
3
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # Cagou: desktop/mobile frontend for Salut à Toi XMPP client
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
5 # Copyright (C) 2016 Jérôme Poisson (goffi@goffi.org)
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
6
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
10 # (at your option) any later version.
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
11
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
16
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
19
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
20
14
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
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
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
25 from sat.core import log as logging
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
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
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
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
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
32 from sat_frontends.bridge.DBus import DBusBridgeFrontend
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
33 import kivy
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
34 kivy.require('1.9.1')
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
35 import kivy.support
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
36 kivy.support.install_gobject_iteration()
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
37 from kivy.app import App
14
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
38 from kivy.lang import Builder
29
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
39 from kivy import properties
0
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
40 import xmlui
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
41 from profile_manager import ProfileManager
13
12a189fbb9ba widget handler first draft:
Goffi <goffi@goffi.org>
parents: 12
diff changeset
42 from widgets_handler import WidgetsHandler
29
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
43 from kivy.clock import Clock
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
44 from kivy.uix.label import Label
9
7b0a53d2afd3 contact list: first draft
Goffi <goffi@goffi.org>
parents: 6
diff changeset
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
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
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
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
50 from .common import IconButton
51
3f8599d9a766 core: menus first draft:
Goffi <goffi@goffi.org>
parents: 49
diff changeset
51 from .menu import MenusWidget
14
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
52 from importlib import import_module
9
7b0a53d2afd3 contact list: first draft
Goffi <goffi@goffi.org>
parents: 6
diff changeset
53 import os.path
14
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
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
7b0a53d2afd3 contact list: first draft
Goffi <goffi@goffi.org>
parents: 6
diff changeset
57
7b0a53d2afd3 contact list: first draft
Goffi <goffi@goffi.org>
parents: 6
diff changeset
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
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
61
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
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
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
68
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
69
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
70 class Note(Label):
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
71 title = properties.StringProperty()
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
72 message = properties.StringProperty()
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
73 level = properties.OptionProperty(C.XMLUI_DATA_LVL_DEFAULT, options=list(C.XMLUI_DATA_LVLS))
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
74
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
75
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
76 class NoteDrop(Note):
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
77 pass
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
78
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
79
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
80 class NotesDrop(DropDown):
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
81 clear_btn = properties.ObjectProperty()
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
82
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
83 def __init__(self, notes):
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
84 super(NotesDrop, self).__init__()
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
85 self.notes = notes
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
86
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
87 def open(self, widget):
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
88 self.clear_widgets()
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
89 for n in self.notes:
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
90 self.add_widget(NoteDrop(title=n.title, message=n.message, level=n.level))
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
91 self.add_widget(self.clear_btn)
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
92 super(NotesDrop, self).open(widget)
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
93
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
94
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
95 class RootHeadWidget(BoxLayout):
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
96 """Notifications widget"""
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
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
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
99 notes = properties.ListProperty()
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
100
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
101 def __init__(self):
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
102 super(RootHeadWidget, self).__init__()
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
103 self.notes_last = None
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
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
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
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
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
109
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
110 def addNote(self, title, message, level):
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
111 note = Note(title=title, message=message, level=level)
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
112 self.notes.append(note)
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
113 if len(self.notes) > 10:
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
114 del self.notes[:-10]
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
115 if self.notes_event is None:
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
116 self.notes_event = Clock.schedule_interval(self._displayNextNote, 5)
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
117 self._displayNextNote()
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
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
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
122 def _displayNextNote(self, dummy=None):
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
123 screen = Screen()
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
124 try:
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
125 idx = self.notes.index(self.notes_last) + 1
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
126 except ValueError:
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
127 idx = 0
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
128 try:
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
129 note = self.notes_last = self.notes[idx]
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
130 except IndexError:
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
131 self.notes_event.cancel()
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
132 self.notes_event = None
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
133 else:
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
134 screen.add_widget(note)
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
135 self.manager.switch_to(screen)
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
136
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
137
9
7b0a53d2afd3 contact list: first draft
Goffi <goffi@goffi.org>
parents: 6
diff changeset
138 class CagouRootWidget(BoxLayout):
7b0a53d2afd3 contact list: first draft
Goffi <goffi@goffi.org>
parents: 6
diff changeset
139
29
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
140 def __init__(self, main_widget):
9
7b0a53d2afd3 contact list: first draft
Goffi <goffi@goffi.org>
parents: 6
diff changeset
141 super(CagouRootWidget, self).__init__(orientation=("vertical"))
51
3f8599d9a766 core: menus first draft:
Goffi <goffi@goffi.org>
parents: 49
diff changeset
142 # general menus
3f8599d9a766 core: menus first draft:
Goffi <goffi@goffi.org>
parents: 49
diff changeset
143 self.menus_widget = MenusWidget()
3f8599d9a766 core: menus first draft:
Goffi <goffi@goffi.org>
parents: 49
diff changeset
144 self.add_widget(self.menus_widget)
29
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
145 # header
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
146 self._head_widget = RootHeadWidget()
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
147 self.add_widget(self._head_widget)
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
148 # body
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
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
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
151 main_screen = Screen(name='main')
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
152 main_screen.add_widget(main_widget)
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
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
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
157 self.add_widget(self._manager)
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
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
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
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
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
181
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
182 def newAction(self, handler, action_data, id_, security_limit, profile):
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
183 """Add a notification for an action"""
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
184 self._head_widget.addNotif(handler, action_data, id_, security_limit, profile)
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
185
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
186 def addNote(self, title, message, level):
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
187 self._head_widget.addNote(title, message, level)
0
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
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
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
192
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
193 class CagouApp(App):
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
194 """Kivy App for Cagou"""
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
195
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
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
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
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
fdaf914e2729 minor docstring fix
Goffi <goffi@goffi.org>
parents: 31
diff changeset
203 useful in kv. Values which can be used:
fdaf914e2729 minor docstring fix
Goffi <goffi@goffi.org>
parents: 31
diff changeset
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
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
211
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
212 class Cagou(QuickApp):
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
213 MB_HANDLE = False
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
214
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
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
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
218 self.app = CagouApp()
29
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
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
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
222 self._plg_wids = [] # widget plugins
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
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
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
231
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
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
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
234 self.app.run()
160cc95ad7ea initial commit:
Goffi <goffi@goffi.org>
parents:
diff changeset
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
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
242 """factory used to create widget instance when PLUGIN_INFO["factory"] is not set"""
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
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
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
245
29
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
246 ## plugins & kv import ##
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
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
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
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
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
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
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
259 plug_lst = [os.path.splitext(p)[0] for p in map(os.path.basename, glob.glob(os.path.join(plugins_path, "plugin*.py")))]
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
260 imported_names = set() # use to avoid loading 2 times plugin with same import name
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
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
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
264 try:
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
265 plugin_info = mod.PLUGIN_INFO
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
266 except AttributeError:
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
267 plugin_info = {}
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
268
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
269 # import name is used to differentiate plugins
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
270 if 'import_name' not in plugin_info:
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
271 plugin_info['import_name'] = plug
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
272 if 'import_name' in imported_names:
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
273 log.warning(_(u"there is already a plugin named {}, ignoring new one").format(plugin_info['import_name']))
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
274 continue
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
275 if plugin_info['import_name'] == C.WID_SELECTOR:
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
276 # if WidgetSelector exists, it will be our default widget
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
277 self.default_wid = plugin_info
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
278
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
279 # we want everything optional, so we use plugin file name
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
280 # if actual name is not found
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
281 if 'name' not in plugin_info:
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
282 plugin_info['name'] = plug[plug.rfind('_')+1:]
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
283
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
284 # we need to load the kv file
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
285 if 'kv_file' not in plugin_info:
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
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
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
289
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
290 # what is the main class ?
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
291 main_cls = getattr(mod, plugin_info['main'])
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
292 plugin_info['main'] = main_cls
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
293
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
294 # factory is used to create the instance
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
295 # if not found, we use a defaut one with getOrCreateWidget
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
296 if 'factory' not in plugin_info:
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
297 plugin_info['factory'] = self._defaultFactory
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
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
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
312 self._plg_wids.append(plugin_info)
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
313 if not self._plg_wids:
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
314 log.error(_(u"no widget plugin found"))
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
315 return
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
316
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
317 # we want widgets sorted by names
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
318 self._plg_wids.sort(key=lambda p: p['name'].lower())
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
319
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
320 if self.default_wid is None:
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
321 # we have no selector widget, we use the first widget as default
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
322 self.default_wid = self._plg_wids[0]
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
323
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
324 def getPluggedWidgets(self, except_cls=None):
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
325 """get available widgets plugin infos
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
326
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
327 @param except_cls(None, class): if not None,
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
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
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
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
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
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
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
352 ## widgets handling
9
7b0a53d2afd3 contact list: first draft
Goffi <goffi@goffi.org>
parents: 6
diff changeset
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
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
375 to_change = None
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
376 if isinstance(old, CagouWidget):
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
377 to_change = old
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
378 else:
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
379 for w in old.walk_reverse():
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
380 if isinstance(w, CagouWidget):
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
381 to_change = w
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
382 break
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
383
21a432afd06d plugin system, first draft:
Goffi <goffi@goffi.org>
parents: 13
diff changeset
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
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
425
51
3f8599d9a766 core: menus first draft:
Goffi <goffi@goffi.org>
parents: 49
diff changeset
426 ## menus ##
3f8599d9a766 core: menus first draft:
Goffi <goffi@goffi.org>
parents: 49
diff changeset
427
3f8599d9a766 core: menus first draft:
Goffi <goffi@goffi.org>
parents: 49
diff changeset
428 def _getMenusCb(self, backend_menus):
3f8599d9a766 core: menus first draft:
Goffi <goffi@goffi.org>
parents: 49
diff changeset
429 main_menu = self.app.root.menus_widget
3f8599d9a766 core: menus first draft:
Goffi <goffi@goffi.org>
parents: 49
diff changeset
430 self.menus.addMenus(backend_menus)
3f8599d9a766 core: menus first draft:
Goffi <goffi@goffi.org>
parents: 49
diff changeset
431 self.menus.addMenu(C.MENU_GLOBAL, (_(u"Help"), _(u"About")), callback=main_menu.onAbout)
3f8599d9a766 core: menus first draft:
Goffi <goffi@goffi.org>
parents: 49
diff changeset
432 main_menu.update(C.MENU_GLOBAL)
3f8599d9a766 core: menus first draft:
Goffi <goffi@goffi.org>
parents: 49
diff changeset
433
29
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
434 ## misc ##
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
435
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
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
3f8599d9a766 core: menus first draft:
Goffi <goffi@goffi.org>
parents: 49
diff changeset
438 self.bridge.getMenus("", C.NO_SECURITY_LIMIT, callback=self._getMenusCb)
29
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
439
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
440 def setPresenceStatus(self, show='', status=None, profile=C.PROF_KEY_NONE):
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
441 log.info(u"Profile presence status set to {show}/{status}".format(show=show, status=status))
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
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
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
444 """add a note (message which disappear) to root widget's header"""
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
445 self.app.root.addNote(title, message, level)
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
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
8b5827c43155 notes first draft:
Goffi <goffi@goffi.org>
parents: 28
diff changeset
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