|
@@ -1,13 +1,12 @@
|
|
|
from typing import Optional
|
|
|
|
|
|
-import justpy as jp
|
|
|
+from nicegui import ui
|
|
|
|
|
|
-from ..binding import BindableProperty, BindValueMixin
|
|
|
-from .element import Element
|
|
|
+from .mixins.value_element import ValueElement
|
|
|
|
|
|
|
|
|
-class LinearProgress(Element, BindValueMixin):
|
|
|
- value = BindableProperty()
|
|
|
+class LinearProgress(ValueElement):
|
|
|
+ VALUE_PROP = 'value'
|
|
|
|
|
|
def __init__(self, value: float = 0.0, *, size: Optional[str] = None, show_value: bool = True) -> None:
|
|
|
"""Linear Progress
|
|
@@ -19,23 +18,16 @@ class LinearProgress(Element, BindValueMixin):
|
|
|
:param size: the height of the progress bar (default: "20px" with value label and "4px" without)
|
|
|
:param show_value: whether to show a value label in the center (default: `True`)
|
|
|
"""
|
|
|
- view = jp.QLinearProgress(value=value, temp=False)
|
|
|
- view.prop_list.append('size')
|
|
|
- view.size = size if size is not None else '20px' if show_value else '4px'
|
|
|
- super().__init__(view)
|
|
|
-
|
|
|
- self.value = value
|
|
|
- self.bind_value_to(self.view, 'value')
|
|
|
+ super().__init__(tag='q-linear-progress', value=value, on_value_change=None)
|
|
|
+ self._props['size'] = size if size is not None else '20px' if show_value else '4px'
|
|
|
|
|
|
if show_value:
|
|
|
- label = jp.Div(text='', classes='absolute-center text-sm text-white', temp=False)
|
|
|
- label.add_page(self.page)
|
|
|
- self.view.add(label)
|
|
|
- self.bind_value_to(label, 'text')
|
|
|
+ with self:
|
|
|
+ ui.label().classes('absolute-center text-sm text-white').bind_text_from(self, 'value')
|
|
|
|
|
|
|
|
|
-class CircularProgress(Element, BindValueMixin):
|
|
|
- value = BindableProperty()
|
|
|
+class CircularProgress(ValueElement):
|
|
|
+ VALUE_PROP = 'value'
|
|
|
|
|
|
def __init__(self, value: float = 0.0, *,
|
|
|
min: float = 0.0, max: float = 1.0, size: str = 'xl', show_value: bool = True) -> None:
|
|
@@ -48,10 +40,14 @@ class CircularProgress(Element, BindValueMixin):
|
|
|
:param size: the size of the progress circle (default: "xl")
|
|
|
:param show_value: whether to show a value label in the center (default: `True`)
|
|
|
"""
|
|
|
- view = jp.QCircularProgress(value=value, min=min, max=max, size=size, show_value=show_value,
|
|
|
- color='primary', track_color='grey-4', temp=False)
|
|
|
- view.prop_list.append('instant-feedback')
|
|
|
- super().__init__(view)
|
|
|
+ super().__init__(tag='q-circular-progress', value=value, on_value_change=None)
|
|
|
+ self._props['min'] = min
|
|
|
+ self._props['max'] = max
|
|
|
+ self._props['size'] = size
|
|
|
+ self._props['show-value'] = show_value
|
|
|
+ self._props['color'] = 'primary'
|
|
|
+ self._props['track-color'] = 'grey-4'
|
|
|
|
|
|
- self.value = value
|
|
|
- self.bind_value_to(self.view, 'value')
|
|
|
+ if show_value:
|
|
|
+ with self:
|
|
|
+ ui.label().classes('absolute-center text-xs').bind_text_from(self, 'value')
|