Mercurial > libervia-desktop-kivy
diff src/cagou/core/menu.py @ 85:c2a7234d13d2
menu: use of garden's contextmenu for menus
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 24 Dec 2016 14:20:49 +0100 |
parents | 65775152aac1 |
children | c711be670ecd |
line wrap: on
line diff
--- a/src/cagou/core/menu.py Sat Dec 24 14:20:40 2016 +0100 +++ b/src/cagou/core/menu.py Sat Dec 24 14:20:49 2016 +0100 @@ -22,14 +22,11 @@ from sat.core import log as logging log = logging.getLogger(__name__) from cagou.core.constants import Const as C -from kivy.uix.scrollview import ScrollView -from kivy.uix.gridlayout import GridLayout -from kivy.uix.widget import Widget +from kivy.uix.boxlayout import BoxLayout from kivy.uix.label import Label -from kivy.uix.button import Button from kivy.uix.popup import Popup -from kivy.uix.dropdown import DropDown from kivy import properties +from kivy.garden import contextmenu from sat_frontends.quick_frontend import quick_menus from cagou import G import webbrowser @@ -59,17 +56,19 @@ return super(AboutPopup, self).on_touch_down(touch) -class MenuItem(Button): +class MainMenu(contextmenu.AppMenu): + pass + + +class MenuItem(contextmenu.ContextMenuTextItem): item = properties.ObjectProperty() def on_item(self, instance, item): self.text = item.name def on_release(self): - try: - self.parent.parent.dismiss() - except AttributeError: - pass + super(MenuItem, self).on_release() + self.parent.hide() selected = G.host.selected_widget profile = None if selected is not None: @@ -89,37 +88,19 @@ self.item.call(selected, profile) -class MenuSeparator(Widget): +class MenuSeparator(contextmenu.ContextMenuDivider): pass -class MenuContainer(Button): - - def __init__(self, **kwargs): - super(MenuContainer, self).__init__(**kwargs) - self.dropdown = DropDown(auto_width=False, size_hint_x=None, width=400) - - def on_release(self): - self.dropdown.open(self) - - def add_widget(self, widget): - widget.size_hint_y = None - self.dropdown.add_widget(widget) +class RootMenuContainer(contextmenu.AppMenuTextItem): + pass -class MenusWidget(ScrollView): +class MenuContainer(contextmenu.ContextMenuTextItem): + pass - def __init__(self, **kwargs): - super(MenusWidget, self).__init__(**kwargs) - self._grid = GridLayout(rows=1, size_hint=(None, 1)) - self._grid.width = self._grid.minimum_width - super(MenusWidget, self).add_widget(self._grid) - def add_widget(self, widget): - self._grid.add_widget(widget) - - def clear_widgets(self, children=None): - self._grid.clear_widgets(children) +class MenusWidget(BoxLayout): def update(self, type_, caller=None): """Method to call when menus have changed @@ -137,10 +118,24 @@ @param caller(Widget): instance linked to the menus """ if caller is None: - caller = self + main_menu = MainMenu() + self.add_widget(main_menu) + caller = main_menu + else: + context_menu = contextmenu.ContextMenu() + caller.add_widget(context_menu) + # FIXME: next line is needed after parent is set to avoid a display bug in contextmenu + # TODO: fix this upstream + context_menu._on_visible(False) + + caller = context_menu + for child in container.getActiveMenus(): if isinstance(child, quick_menus.MenuContainer): - menu_container = MenuContainer() + if isinstance(caller, MainMenu): + menu_container = RootMenuContainer() + else: + menu_container = MenuContainer() menu_container.text = child.name caller.add_widget(menu_container) self._buildMenus(child, caller=menu_container)