90 lines
2.7 KiB
Python
90 lines
2.7 KiB
Python
import kivy
|
||
kivy.require('2.3.1')
|
||
|
||
from kivy.lang import Builder
|
||
from kivy.animation import Animation
|
||
from kivy.metrics import dp
|
||
from kivy.uix.behaviors import ButtonBehavior
|
||
from kivy.logger import Logger
|
||
from kivy.properties import StringProperty
|
||
from kivy import Config
|
||
|
||
import logging
|
||
|
||
from kivymd.app import MDApp
|
||
from kivymd.uix.screenmanager import MDScreenManager
|
||
from kivymd.uix.expansionpanel import MDExpansionPanel
|
||
from kivymd.uix.behaviors import RotateBehavior
|
||
from kivymd.uix.list import MDListItemTrailingIcon
|
||
from kivymd.uix.navigationrail import MDNavigationRailItem
|
||
|
||
from kawai_focus.menu_app import MenuApp
|
||
from kawai_focus.screens.timers_screen import TimersScreen
|
||
from kawai_focus.screens.timer_screen import TimerScreen
|
||
|
||
|
||
Logger.setLevel(logging.DEBUG)
|
||
|
||
Config.set('kivy', 'audio', 'ffpyplayer') # вместо audio_sdl2
|
||
|
||
|
||
class TrailingPressedIconButton(
|
||
ButtonBehavior, RotateBehavior, MDListItemTrailingIcon
|
||
):
|
||
"""Кнопка-иконка в конце элемента списка с поддержкой анимации"""
|
||
...
|
||
|
||
|
||
class CommonNavigationRailItem(MDNavigationRailItem):
|
||
"""Класс панель навигации"""
|
||
|
||
text = StringProperty()
|
||
icon = StringProperty()
|
||
|
||
|
||
class KawaiFocusApp(MDApp, MenuApp):
|
||
"""Главный класс приложения"""
|
||
|
||
title = 'Kawai-Focus'
|
||
|
||
def build(self) -> MDScreenManager:
|
||
"""Создаёт и возвращает менеджер экранов приложения"""
|
||
|
||
self.theme_cls.theme_style = 'Dark'
|
||
# Загрузка kv файла
|
||
Builder.load_file('kv/timers_screen.kv')
|
||
Builder.load_file('kv/timer_screen.kv')
|
||
|
||
self.screen_manager = MDScreenManager()
|
||
self.screen_manager.add_widget(TimersScreen(name='timers_screen'))
|
||
self.screen_manager.add_widget(TimerScreen(name='timer_screen'))
|
||
|
||
return self.screen_manager
|
||
|
||
def tap_expansion_chevron(
|
||
self, panel: MDExpansionPanel, chevron: TrailingPressedIconButton
|
||
) -> None:
|
||
"""Анимация и переключение состояния раскрытия панели"""
|
||
|
||
Animation(
|
||
padding=(
|
||
[0, dp(12), 0, dp(12)] if not panel.is_open else [0, 0, 0, 0]
|
||
),
|
||
d=0.2,
|
||
).start(panel)
|
||
panel.open() if not panel.is_open else panel.close()
|
||
(
|
||
panel.set_chevron_down(chevron)
|
||
if not panel.is_open
|
||
else panel.set_chevron_up(chevron)
|
||
)
|
||
|
||
|
||
def main() -> None:
|
||
"""Главная функция для запуска приложения KawaiFocus"""
|
||
|
||
try:
|
||
KawaiFocusApp().run()
|
||
except KeyboardInterrupt:
|
||
pass
|