77 lines
2.2 KiB
Python
77 lines
2.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
from kivy.animation import Animation
|
|
from kivy.lang import Builder
|
|
from kivy.properties import StringProperty, ObjectProperty
|
|
from kivymd.elevationbehavior import ElevationBehavior
|
|
from kivymd.icon_definitions import md_icons
|
|
from kivymd.label import MDLabel
|
|
from kivymd.list import OneLineIconListItem, ILeftBody, BaseListItem
|
|
from kivymd.slidingpanel import SlidingPanel
|
|
from kivymd.theming import ThemableBehavior
|
|
|
|
Builder.load_string('''
|
|
<NavDrawerToolbar@Toolbar>
|
|
canvas:
|
|
Color:
|
|
rgba: root.theme_cls.divider_color
|
|
Line:
|
|
points: self.x, self.y, self.x+self.width,self.y
|
|
|
|
<NavigationDrawer>
|
|
_list: list
|
|
elevation: 0
|
|
canvas:
|
|
Color:
|
|
rgba: root.theme_cls.bg_light
|
|
Rectangle:
|
|
size: root.size
|
|
pos: root.pos
|
|
NavDrawerToolbar:
|
|
title: root.title
|
|
opposite_colors: False
|
|
title_theme_color: 'Secondary'
|
|
background_color: root.theme_cls.bg_light
|
|
elevation: 0
|
|
ScrollView:
|
|
do_scroll_x: False
|
|
MDList:
|
|
id: ml
|
|
id: list
|
|
|
|
<NavigationDrawerIconButton>
|
|
NDIconLabel:
|
|
id: _icon
|
|
font_style: 'Icon'
|
|
theme_text_color: 'Secondary'
|
|
''')
|
|
|
|
|
|
class NavigationDrawer(SlidingPanel, ThemableBehavior, ElevationBehavior):
|
|
title = StringProperty()
|
|
|
|
_list = ObjectProperty()
|
|
|
|
def add_widget(self, widget, index=0):
|
|
if issubclass(widget.__class__, BaseListItem):
|
|
self._list.add_widget(widget, index)
|
|
widget.bind(on_release=lambda x: self.toggle())
|
|
else:
|
|
super(NavigationDrawer, self).add_widget(widget, index)
|
|
|
|
def _get_main_animation(self, duration, t, x, is_closing):
|
|
a = super(NavigationDrawer, self)._get_main_animation(duration, t, x,
|
|
is_closing)
|
|
a &= Animation(elevation=0 if is_closing else 5, t=t, duration=duration)
|
|
return a
|
|
|
|
|
|
class NDIconLabel(ILeftBody, MDLabel):
|
|
pass
|
|
|
|
|
|
class NavigationDrawerIconButton(OneLineIconListItem):
|
|
icon = StringProperty()
|
|
|
|
def on_icon(self, instance, value):
|
|
self.ids['_icon'].text = u"{}".format(md_icons[value])
|