Coverage for openhcs/textual_tui/widgets/shared/textual_widget_strategies.py: 0.0%

37 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-11-04 02:09 +0000

1"""Textual TUI Widget Creation Functions""" 

2 

3import dataclasses 

4from .widget_creation_registry import resolve_optional, is_enum, is_list_of_enums, get_enum_from_list 

5 

6 

7def create_textual_widget(param_name: str, param_type: type, current_value, widget_id: str, parameter_info=None): 

8 """Create Textual TUI widget directly.""" 

9 # Lazy import to avoid requiring textual when only PyQt GUI is used 

10 from textual.widgets import Input, Checkbox, Collapsible 

11 from openhcs.ui.shared.ui_utils import format_param_name 

12 

13 param_type = resolve_optional(param_type) 

14 

15 if param_type == bool: 

16 return Checkbox(value=bool(current_value), id=widget_id, compact=True) 

17 elif param_type == int: 

18 return Input(value=str(current_value or ""), type="integer", id=widget_id) 

19 elif param_type == float: 

20 return Input(value=str(current_value or ""), type="number", id=widget_id) 

21 elif param_type == str: 

22 return Input(value=str(current_value or ""), type="text", id=widget_id) 

23 elif is_enum(param_type): 

24 from openhcs.textual_tui.widgets.shared.enum_radio_set import EnumRadioSet 

25 return EnumRadioSet(param_type, current_value, id=widget_id) 

26 elif dataclasses.is_dataclass(param_type): 

27 return Collapsible(title=format_param_name(param_name), collapsed=current_value is None) 

28 elif is_list_of_enums(param_type): 

29 from openhcs.textual_tui.widgets.shared.enum_radio_set import EnumRadioSet 

30 enum_type = get_enum_from_list(param_type) 

31 display_value = (current_value[0].value if current_value and isinstance(current_value, list) and current_value else None) 

32 return EnumRadioSet(enum_type, display_value, id=widget_id) 

33 else: 

34 return Input(value=str(current_value or ""), type="text", id=widget_id) 

35 

36 

37# Simplified different values widget creation 

38def create_different_values_widget(param_name: str, param_type: type, default_value, widget_id: str): 

39 """Create different values widget for batch editing.""" 

40 if param_type in (str, int, float): 

41 from openhcs.textual_tui.widgets.different_values_input import DifferentValuesInput 

42 return DifferentValuesInput(default_value, param_name, id=widget_id) 

43 elif param_type == bool: 

44 from openhcs.textual_tui.widgets.different_values_checkbox import DifferentValuesCheckbox 

45 return DifferentValuesCheckbox(default_value, param_name, id=widget_id) 

46 elif TypeCheckers.is_enum(param_type): 

47 from openhcs.textual_tui.widgets.different_values_radio_set import DifferentValuesRadioSet 

48 return DifferentValuesRadioSet(param_type, default_value, param_name, id=widget_id) 

49 else: 

50 from openhcs.textual_tui.widgets.shared.typed_widget_factory import TypedWidgetFactory 

51 return TypedWidgetFactory.create_different_values_widget(param_type, default_value, widget_id, param_name)