Browse Source

update checkbox

Falko Schindler 2 years ago
parent
commit
3af77eaf87

+ 9 - 0
nicegui/elements/bool_element.py

@@ -0,0 +1,9 @@
+from typing import Callable, Optional
+
+from .value_element import ValueElement
+
+
+class BoolElement(ValueElement):
+
+    def __init__(self, tag: str, *, value: bool, on_change: Optional[Callable]) -> None:
+        super().__init__(tag, value=value, on_change=on_change)

+ 9 - 6
nicegui/elements/old/checkbox.py → nicegui/elements/checkbox.py

@@ -1,19 +1,22 @@
 from typing import Callable, Optional
 from typing import Callable, Optional
 
 
-import justpy as jp
-
+from .binding_mixins import BindTextMixin
 from .bool_element import BoolElement
 from .bool_element import BoolElement
 
 
 
 
-class Checkbox(BoolElement):
+class Checkbox(BoolElement, BindTextMixin):
 
 
-    def __init__(self, text: str = '', *, value: bool = False, on_change: Optional[Callable] = None):
+    def __init__(self, text: str = '', *, value: bool = False, on_change: Optional[Callable] = None) -> None:
         """Checkbox
         """Checkbox
 
 
         :param text: the label to display next to the checkbox
         :param text: the label to display next to the checkbox
         :param value: whether it should be checked initially (default: `False`)
         :param value: whether it should be checked initially (default: `False`)
         :param on_change: callback to execute when value changes
         :param on_change: callback to execute when value changes
         """
         """
-        view = jp.QCheckbox(text=text, input=self.handle_change, temp=False)
+        super().__init__('q-checkbox', value=value, on_change=on_change)
+        self.text = text
+        self._text = text
 
 
-        super().__init__(view, value=value, on_change=on_change)
+    def on_text_change(self, text: str) -> None:
+        self._text = text
+        self.update()

+ 0 - 11
nicegui/elements/old/bool_element.py

@@ -1,11 +0,0 @@
-from typing import Callable, Optional
-
-import justpy as jp
-
-from .value_element import ValueElement
-
-
-class BoolElement(ValueElement):
-
-    def __init__(self, view: jp.HTMLBaseComponent, *, value: bool, on_change: Optional[Callable]):
-        super().__init__(view, value=value, on_change=on_change)

+ 0 - 30
nicegui/elements/old/value_element.py

@@ -1,30 +0,0 @@
-from typing import Any, Callable, Dict, Optional
-
-import justpy as jp
-
-from ..binding import BindableProperty, BindValueMixin
-from ..events import ValueChangeEventArguments, handle_event
-from .element import Element
-
-
-class ValueElement(Element, BindValueMixin):
-    value = BindableProperty(on_change=lambda sender, value: handle_event(
-        sender.change_handler, ValueChangeEventArguments(sender=sender, socket=None, value=value)))
-
-    def __init__(self, view: jp.HTMLBaseComponent, *, value: Any, on_change: Optional[Callable]) -> None:
-        super().__init__(view)
-
-        self.change_handler = on_change
-        self.value = value
-        self.bind_value_to(self.view, 'value', forward=self.value_to_view)
-
-    def value_to_view(self, value):
-        return value
-
-    def set_value(self, value) -> None:
-        self.value = value
-
-    def handle_change(self, msg: Dict):
-        self.value = msg['value']
-        self.update()
-        return False

+ 24 - 0
nicegui/elements/value_element.py

@@ -0,0 +1,24 @@
+from typing import Any, Callable, Dict, Optional
+
+from ..element import Element
+from ..events import ValueChangeEventArguments, handle_event
+from .binding_mixins import BindValueMixin
+
+
+class ValueElement(Element, BindValueMixin):
+
+    def __init__(self, tag: str, *, value: Any, on_change: Optional[Callable]) -> None:
+        super().__init__(tag)
+        self.change_handler = on_change
+
+        self.value = value
+        self._props['model-value'] = value
+
+        def handle_change(msg: Dict) -> None:
+            self.value = msg['args']
+        self.on('update:model-value', handle_change)
+
+    def on_value_change(self, value: str) -> None:
+        self._props['model-value'] = value
+        self.update()
+        handle_event(self.change_handler, ValueChangeEventArguments(sender=self, client=self.client, value=value))

+ 1 - 0
nicegui/ui.py

@@ -3,6 +3,7 @@ from .elements.button import Button as button
 from .elements.card import Card as card
 from .elements.card import Card as card
 from .elements.card import CardActions as card_actions
 from .elements.card import CardActions as card_actions
 from .elements.card import CardSection as card_section
 from .elements.card import CardSection as card_section
+from .elements.checkbox import Checkbox as checkbox
 from .elements.column import Column as column
 from .elements.column import Column as column
 from .elements.icon import Icon as icon
 from .elements.icon import Icon as icon
 from .elements.image import Image as image
 from .elements.image import Image as image