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
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-04 02:09 +0000
1"""Textual TUI Widget Creation Functions"""
3import dataclasses
4from .widget_creation_registry import resolve_optional, is_enum, is_list_of_enums, get_enum_from_list
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
13 param_type = resolve_optional(param_type)
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)
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)