Coverage for openhcs/textual_tui/widgets/different_values_checkbox.py: 0.0%
36 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-04 02:09 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-04 02:09 +0000
1"""Simple checkbox widget for handling different values across multiple configurations."""
3from textual.widgets import Checkbox
4from textual.events import Click
7class DifferentValuesCheckbox(Checkbox):
8 """Simple checkbox that shows empty state for different values.
10 This widget appears as an empty square (no X, no label) when values differ
11 across configurations. Click sets it to the default value.
12 """
14 def __init__(
15 self,
16 default_value: bool,
17 field_name: str = "",
18 **kwargs
19 ):
20 """Initialize the DifferentValuesCheckbox widget.
22 Args:
23 default_value: The default value to use when clicked
24 field_name: Name of the field (for debugging/logging)
25 **kwargs: Additional arguments passed to Checkbox
26 """
27 # Create empty checkbox with no label
28 kwargs.setdefault("value", False)
29 kwargs.setdefault("label", "") # No label
31 super().__init__(**kwargs)
33 self.default_value = default_value
34 self.field_name = field_name
35 self.is_different_state = True
37 # Add CSS class to appear disabled but still receive clicks
38 self.add_class("different-values-disabled")
40 # Set tooltip to explain the state
41 self.tooltip = f"DIFFERENT VALUES - Click to set to default: {self.default_value}"
43 def on_click(self, event: Click) -> None:
44 """Message handler for Click events - set to default value if in different state."""
45 if self.is_different_state:
46 # Set to default value and remove disabled appearance
47 self.value = bool(self.default_value)
48 self.is_different_state = False
49 self.remove_class("different-values-disabled")
51 # Clear tooltip since we now have a value
52 self.tooltip = ""
54 # Focus the checkbox
55 self.focus()
57 # Prevent the event from bubbling up
58 event.stop()
60 def reset_to_different(self) -> None:
61 """Reset the checkbox back to 'DIFFERENT VALUES' state."""
62 self.value = False # Empty state
63 self.is_different_state = True
65 # Add CSS class to appear disabled
66 self.add_class("different-values-disabled")
68 # Restore tooltip
69 self.tooltip = f"DIFFERENT VALUES - Click to set to default: {self.default_value}"
71 def set_value(self, value: bool) -> None:
72 """Set a specific value (not from click-to-default)."""
73 self.value = bool(value)
74 self.is_different_state = False
75 self.tooltip = ""
77 @property
78 def current_state(self) -> str:
79 """Get the current state of the widget."""
80 if self.is_different_state:
81 return "different"
82 elif self.value == bool(self.default_value):
83 return "default"
84 else:
85 return "modified"