Mercurial > libervia-desktop-kivy
comparison src/cagou_widget.py @ 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 | 8b2836b5b6c7 |
children |
comparison
equal
deleted
inserted
replaced
13:12a189fbb9ba | 14:21a432afd06d |
---|---|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. | 18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
19 | 19 |
20 | 20 |
21 from sat.core import log as logging | 21 from sat.core import log as logging |
22 log = logging.getLogger(__name__) | 22 log = logging.getLogger(__name__) |
23 from kivy.uix.button import Button | |
23 from kivy.uix.boxlayout import BoxLayout | 24 from kivy.uix.boxlayout import BoxLayout |
24 from kivy.uix.dropdown import DropDown | 25 from kivy.uix.dropdown import DropDown |
25 | 26 |
26 | 27 |
28 class HeaderWidgetButton(Button): | |
29 pass | |
30 | |
31 | |
27 class HeaderWidgetSelector(DropDown): | 32 class HeaderWidgetSelector(DropDown): |
28 pass | 33 |
34 def __init__(self, cagou_widget): | |
35 super(HeaderWidgetSelector, self).__init__() | |
36 host = cagou_widget.host | |
37 for plugin_info in host.getPluggedWidgets(except_cls=cagou_widget.__class__): | |
38 btn = HeaderWidgetButton(text=plugin_info["name"]) | |
39 btn.bind(on_release=lambda btn, plugin_info=plugin_info: cagou_widget.switchWidget(plugin_info)) | |
40 self.add_widget(btn) | |
29 | 41 |
30 | 42 |
31 class CagouWidget(BoxLayout): | 43 class CagouWidget(BoxLayout): |
32 | 44 |
33 def __init__(self): | 45 def __init__(self, host): |
46 self.host = host | |
34 BoxLayout.__init__(self, orientation="vertical") | 47 BoxLayout.__init__(self, orientation="vertical") |
35 self.selector = HeaderWidgetSelector() | 48 self.selector = HeaderWidgetSelector(self) |
49 | |
50 def switchWidget(self, plugin_info): | |
51 self.selector.dismiss() | |
52 factory = plugin_info["factory"] | |
53 new_widget = factory(self.host, plugin_info, None, None) | |
54 self.host.switchWidget(self, new_widget) |