Mercurial > libervia-desktop-kivy
comparison src/profile_manager.py @ 0:160cc95ad7ea
initial commit:
- basic SàT/QuickApp integration
- basic XMLUI
- profile manager first draft
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 26 Mar 2016 16:20:52 +0100 |
parents | |
children | 189b76859110 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:160cc95ad7ea |
---|---|
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_frontends.constants import Const as C | |
22 from sat_frontends.quick_frontend.quick_profile_manager import QuickProfileManager | |
23 from kivy.uix.boxlayout import BoxLayout | |
24 from kivy.uix import listview | |
25 from kivy.uix.button import Button | |
26 from kivy.uix.screenmanager import ScreenManager, Screen | |
27 from kivy.adapters import listadapter | |
28 from kivy.properties import ObjectProperty | |
29 | |
30 | |
31 class ProfileItem(listview.ListItemButton): | |
32 pass | |
33 | |
34 | |
35 class ProfileListAdapter(listadapter.ListAdapter): | |
36 | |
37 def __init__(self, pm, *args, **kwargs): | |
38 super(ProfileListAdapter, self).__init__(*args, **kwargs) | |
39 self.pm = pm | |
40 self.host = pm.host | |
41 | |
42 def closeUI(self, xmlui): | |
43 self.pm.screen_manager.transition.direction = 'right' | |
44 self.pm.screen_manager.current = 'profiles' | |
45 | |
46 def showUI(self, xmlui): | |
47 xmlui.setCloseCb(self.closeUI) | |
48 if xmlui.type == 'popup': | |
49 xmlui.bind(on_touch_up=lambda obj, value: self.closeUI(xmlui)) | |
50 self.pm.xmlui_screen.clear_widgets() | |
51 self.pm.xmlui_screen.add_widget(xmlui) | |
52 self.pm.screen_manager.transition.direction = 'left' | |
53 self.pm.screen_manager.current = 'xmlui' | |
54 | |
55 def select_item_view(self, view): | |
56 def authenticate_cb(data, cb_id, profile): | |
57 if C.bool(data.pop('validated', C.BOOL_FALSE)): | |
58 super(ProfileListAdapter, self).select_item_view(view) | |
59 self.host.actionManager(data, callback=authenticate_cb, ui_show_cb=self.showUI, profile=profile) | |
60 | |
61 self.host.launchAction(C.AUTHENTICATE_PROFILE_ID, callback=authenticate_cb, profile=view.text) | |
62 | |
63 | |
64 class ConnectButton(Button): | |
65 pass | |
66 | |
67 | |
68 class ProfileScreen(Screen): | |
69 layout = ObjectProperty(None) | |
70 | |
71 def __init__(self, pm): | |
72 super(ProfileScreen, self).__init__(name=u'profiles') | |
73 profiles = pm.host.bridge.getProfilesList() | |
74 profiles.sort() | |
75 list_adapter = ProfileListAdapter(pm, | |
76 data=profiles, | |
77 cls=ProfileItem, | |
78 selection_mode='multiple', | |
79 allow_empty_selection=True, | |
80 ) | |
81 self.layout.add_widget(listview.ListView(adapter=list_adapter)) | |
82 connect_btn = ConnectButton() | |
83 self.layout.add_widget(connect_btn) | |
84 | |
85 | |
86 class ProfileManager(QuickProfileManager, BoxLayout): | |
87 | |
88 def __init__(self, host, autoconnect=None): | |
89 QuickProfileManager.__init__(self, host, autoconnect) | |
90 BoxLayout.__init__(self, orientation="vertical") | |
91 self.screen_manager = ScreenManager() | |
92 self.profiles_screen = ProfileScreen(self) | |
93 self.xmlui_screen = Screen(name=u'xmlui') | |
94 self.screen_manager.add_widget(self.profiles_screen) | |
95 self.screen_manager.add_widget(self.xmlui_screen) | |
96 self.add_widget(self.screen_manager) | |
97 |