mirror of
https://github.com/liberatedsystems/openCom-Companion.git
synced 2024-11-30 01:00:37 +01:00
87 lines
2.6 KiB
Python
87 lines
2.6 KiB
Python
|
__all__ = ("MDAdaptiveWidget",)
|
||
|
|
||
|
from kivy.properties import BooleanProperty
|
||
|
from kivy.uix.floatlayout import FloatLayout
|
||
|
from kivy.uix.label import Label
|
||
|
from kivy.uix.screenmanager import Screen
|
||
|
|
||
|
from kivymd.uix.behaviors import SpecificBackgroundColorBehavior
|
||
|
|
||
|
|
||
|
class MDAdaptiveWidget(SpecificBackgroundColorBehavior):
|
||
|
adaptive_height = BooleanProperty(False)
|
||
|
"""
|
||
|
If `True`, the following properties will be applied to the widget:
|
||
|
|
||
|
.. code-block:: kv
|
||
|
|
||
|
size_hint_y: None
|
||
|
height: self.minimum_height
|
||
|
|
||
|
:attr:`adaptive_height` is an :class:`~kivy.properties.BooleanProperty`
|
||
|
and defaults to `False`.
|
||
|
"""
|
||
|
|
||
|
adaptive_width = BooleanProperty(False)
|
||
|
"""
|
||
|
If `True`, the following properties will be applied to the widget:
|
||
|
|
||
|
.. code-block:: kv
|
||
|
|
||
|
size_hint_x: None
|
||
|
width: self.minimum_width
|
||
|
|
||
|
:attr:`adaptive_width` is an :class:`~kivy.properties.BooleanProperty`
|
||
|
and defaults to `False`.
|
||
|
"""
|
||
|
|
||
|
adaptive_size = BooleanProperty(False)
|
||
|
"""
|
||
|
If `True`, the following properties will be applied to the widget:
|
||
|
|
||
|
.. code-block:: kv
|
||
|
|
||
|
size_hint: None, None
|
||
|
size: self.minimum_size
|
||
|
|
||
|
:attr:`adaptive_size` is an :class:`~kivy.properties.BooleanProperty`
|
||
|
and defaults to `False`.
|
||
|
"""
|
||
|
|
||
|
def on_adaptive_height(self, md_widget, value: bool) -> None:
|
||
|
self.size_hint_y = None
|
||
|
if issubclass(self.__class__, Label):
|
||
|
self.bind(
|
||
|
texture_size=lambda *x: self.setter("height")(
|
||
|
self, self.texture_size[1]
|
||
|
)
|
||
|
)
|
||
|
else:
|
||
|
if not isinstance(self, (FloatLayout, Screen)):
|
||
|
self.bind(minimum_height=self.setter("height"))
|
||
|
|
||
|
def on_adaptive_width(self, md_widget, value: bool) -> None:
|
||
|
self.size_hint_x = None
|
||
|
if issubclass(self.__class__, Label):
|
||
|
self.bind(
|
||
|
texture_size=lambda *x: self.setter("width")(
|
||
|
self, self.texture_size[0]
|
||
|
)
|
||
|
)
|
||
|
else:
|
||
|
if not isinstance(self, (FloatLayout, Screen)):
|
||
|
self.bind(minimum_width=self.setter("width"))
|
||
|
|
||
|
def on_adaptive_size(self, md_widget, value: bool) -> None:
|
||
|
self.size_hint = (None, None)
|
||
|
if issubclass(self.__class__, Label):
|
||
|
self.text_size = (None, None)
|
||
|
self.bind(
|
||
|
texture_size=lambda *x: self.setter("size")(
|
||
|
self, self.texture_size
|
||
|
)
|
||
|
)
|
||
|
else:
|
||
|
if not isinstance(self, (FloatLayout, Screen)):
|
||
|
self.bind(minimum_size=self.setter("size"))
|