Mercurial > libervia-desktop-kivy
view src/profile_manager.kv @ 14:21a432afd06d
plugin system, first draft:
- widgets are now handled with plugins, ContactList and WidgetSelector have been changed to be pluggins
- everything in PLUGIN_INFO (including PLUGIN_INFO itself) is optional. Best guess is used if a value is missing
- WidgetsHandler use default widget from plugins, which is WidgetSelector for now
- PLUGIN_INFO is used in the same way as for backed plugins, with (for now) following possible keys:
- "name": human readable name
- "description": long description of what widget do
- "import_name": unique short name used as reference for import
- "main": main class name
- "factory": callback used to instanciate a widget (see Cagou._defaultFactory)
- "kv_file": path to the kv language file to load (same filename with ".kv" will be used if key is not found)
other data should be added quickly, as a path to a file used as icon
- host.getPluggedWidgets can be used to find loaded widgets. except_cls can be used to excluse a class (self.__class__ usually)
- fixed host.switchWidget when old widget is already a CagouWidget
- CagouWidget header new display the available widgets
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 09 Jul 2016 16:02:44 +0200 |
parents | 33b619506832 |
children |
line wrap: on
line source
# Cagou: desktop/mobile frontend for Salut à Toi XMPP client # Copyright (C) 2016 Jérôme Poisson (goffi@goffi.org) # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. <ProfileManager>: Label: text: "Profile Manager" size_hint: 1,0.05 <PMLabel@Label>: size_hint: 1, 0.1 <PMInput@TextInput>: multiline: False size_hint: 1, 0.1 write_tab: False <PMButton@Button>: size_hint: 1, 0.2 <NewProfileScreen>: profile_name: profile_name jid: jid password: password BoxLayout: orientation: "vertical" Label: text: "Creation of a new profile" bold: True size_hint: 1, 0.1 Label: text: root.error_msg bold: True size_hint: 1, 0.1 color: 1,0,0,1 GridLayout: cols: 2 PMLabel: text: "Profile name" PMInput: id: profile_name PMLabel: text: "JID" PMInput: id: jid PMLabel: text: "Password" PMInput: id: password password: True Widget: size_hint: 1, 0.2 Widget: size_hint: 1, 0.2 PMButton: text: "OK" on_press: root.doCreate() PMButton: text: "Cancel" on_press: root.pm.screen_manager.transition.direction = 'right' root.pm.screen_manager.current = 'profiles' Widget: <DeleteProfilesScreen>: BoxLayout: orientation: "vertical" Label: text: "Are you sure you want to delete the following profiles?" size_hint: 1, 0.1 Label: text: u'\n'.join([i.text for i in root.pm.profiles_screen.list_adapter.selection]) bold: True Label: text: u'/!\\ WARNING: this operation is irreversible' color: 1,0,0,1 bold: True size_hint: 1, 0.2 GridLayout: cols: 2 Button: text: "Delete" size_hint: 1, 0.2 on_press: root.doDelete() Button: text: "Cancel" size_hint: 1, 0.2 on_press: root.pm.screen_manager.transition.direction = 'right' root.pm.screen_manager.current = 'profiles' Widget: <ProfilesScreen>: layout: layout BoxLayout: id: layout orientation: 'vertical' Label: text: "Select a profile to connect with, or create a new one" size_hint: 1,0.05 GridLayout: cols: 2 size_hint: 1, 0.1 Button: size_hint: 1, 0.1 text: "New" on_press: root.pm.screen_manager.transition.direction = 'left' root.pm.screen_manager.current = 'new_profile' Button: disabled: not root.list_adapter.selection text: "Delete" size_hint: 1, 0.1 on_press: root.pm.screen_manager.transition.direction = 'left' root.pm.screen_manager.current = 'delete_profiles' <ConnectButton>: text: "Connect" size_hint: 1, 0.1 disabled: not self.profile_screen.list_adapter.selection on_press: self.pm._onConnectProfiles() <ProfileItem>: background_normal: "button_selected.png" if self.is_selected else "button.png" deselected_color: 1,1,1,1 selected_color: 1,1,1,1 color: 0,0,0,1