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

1"""Simple checkbox widget for handling different values across multiple configurations.""" 

2 

3from textual.widgets import Checkbox 

4from textual.events import Click 

5 

6 

7class DifferentValuesCheckbox(Checkbox): 

8 """Simple checkbox that shows empty state for different values. 

9  

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 """ 

13 

14 def __init__( 

15 self, 

16 default_value: bool, 

17 field_name: str = "", 

18 **kwargs 

19 ): 

20 """Initialize the DifferentValuesCheckbox widget. 

21  

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 

30 

31 super().__init__(**kwargs) 

32 

33 self.default_value = default_value 

34 self.field_name = field_name 

35 self.is_different_state = True 

36 

37 # Add CSS class to appear disabled but still receive clicks 

38 self.add_class("different-values-disabled") 

39 

40 # Set tooltip to explain the state 

41 self.tooltip = f"DIFFERENT VALUES - Click to set to default: {self.default_value}" 

42 

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") 

50 

51 # Clear tooltip since we now have a value 

52 self.tooltip = "" 

53 

54 # Focus the checkbox 

55 self.focus() 

56 

57 # Prevent the event from bubbling up 

58 event.stop() 

59 

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 

64 

65 # Add CSS class to appear disabled 

66 self.add_class("different-values-disabled") 

67 

68 # Restore tooltip 

69 self.tooltip = f"DIFFERENT VALUES - Click to set to default: {self.default_value}" 

70 

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 = "" 

76 

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"