Mercurial > libervia-desktop-kivy
comparison src/widget_selector.py @ 12:30f6586f904b
widget selector:
this widget will be the default one and display the different activities a user can do (chat, blog, file sharing, games, etc).
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 08 Jul 2016 20:18:36 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
11:49d30fc15884 | 12:30f6586f904b |
---|---|
1 #!/usr/bin/python | |
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 | |
21 from sat.core import log as logging | |
22 log = logging.getLogger(__name__) | |
23 from kivy.uix.boxlayout import BoxLayout | |
24 from kivy.uix.listview import ListView | |
25 from kivy.adapters.listadapter import ListAdapter | |
26 from kivy import properties | |
27 from contact_list import ContactList | |
28 from kivy.uix.behaviors import ButtonBehavior | |
29 from cagou_widget import CagouWidget | |
30 | |
31 | |
32 class WidgetSelItem(ButtonBehavior, BoxLayout): | |
33 widget_type = properties.StringProperty('') | |
34 | |
35 def __init__(self, **kwargs): | |
36 super(WidgetSelItem, self).__init__(**kwargs) | |
37 self.host = kwargs['host'] | |
38 self.callback = kwargs['callback'] | |
39 | |
40 def select(self, *args): | |
41 log.debug(u"widget selection: {}".format(self.widget_type)) | |
42 self.host.switchWidget(self, self.callback()) | |
43 | |
44 def deselect(self, *args): | |
45 pass | |
46 | |
47 | |
48 class WidgetSelector(CagouWidget): | |
49 | |
50 def __init__(self, host): | |
51 super(WidgetSelector, self).__init__() | |
52 self.host = host | |
53 self.widget_factory = { | |
54 'contacts': lambda: host.widgets.getOrCreateWidget(ContactList, None, on_new_widget=None), | |
55 } | |
56 self.adapter = ListAdapter(data=self.widget_factory, | |
57 cls=WidgetSelItem, | |
58 args_converter=self.dataConverter, | |
59 selection_mode='single', | |
60 allow_empty_selection=True, | |
61 ) | |
62 self.add_widget(ListView(adapter=self.adapter)) | |
63 | |
64 def dataConverter(self, idx, widget_type): | |
65 return { | |
66 "host": self.host, | |
67 "widget_type": widget_type, | |
68 "callback": self.widget_factory[widget_type] | |
69 } |