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