Skip to content

Commit 423debe

Browse files
committed
fix: Add missing styling service file
- Include enabled_field_styling_service.py in changes
1 parent 48851ba commit 423debe

1 file changed

Lines changed: 52 additions & 0 deletions

File tree

src/pyqt_reactive/services/enabled_field_styling_service.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,58 @@ def _apply_nested_config_styling(self, manager, resolved_value: bool) -> None:
295295
effect.setOpacity(0.4)
296296
widget.setGraphicsEffect(effect)
297297

298+
# Update provenance button visibility and title label underline
299+
self._update_title_label_styling(manager)
300+
301+
def _update_title_label_styling(self, manager) -> None:
302+
"""
303+
Update title label styling for nested configs with enabled fields.
304+
305+
This handles:
306+
- Provenance button visibility (only show when provenance source available)
307+
- Title label underline (when enabled field's value differs from signature)
308+
309+
Args:
310+
manager: ParameterFormManager instance (nested manager)
311+
"""
312+
# Only apply to nested configs
313+
if manager._parent_manager is None:
314+
return
315+
316+
# Find the GroupBox and param_name for this nested manager
317+
group_box = None
318+
param_name = None
319+
for pn, nested_manager in manager._parent_manager.nested_managers.items():
320+
if nested_manager == manager:
321+
group_box = manager._parent_manager.widgets.get(pn)
322+
param_name = pn
323+
break
324+
325+
if not group_box:
326+
return
327+
328+
# Get title label from GroupBox
329+
title_label = getattr(group_box, '_title_label', None)
330+
if not title_label:
331+
return
332+
333+
# Update provenance button visibility
334+
# The button is in the title layout, we need to find it
335+
from pyqt_reactive.widgets.shared.clickable_help_components import ProvenanceButton
336+
for widget in group_box.title_layout.findChildren(ProvenanceButton):
337+
if hasattr(widget, 'update_visibility_based_on_provenance'):
338+
widget.update_visibility_based_on_provenance()
339+
logger.debug(f"[TITLE_STYLING] Updated provenance button visibility for {param_name}")
340+
break
341+
342+
# Update title label underline based on signature diff
343+
dotted_path = f'{manager.field_id}.{param_name}' if manager.field_id else param_name
344+
should_underline = dotted_path in manager.state.signature_diff_fields
345+
font = title_label.font()
346+
font.setUnderline(should_underline)
347+
title_label.setFont(font)
348+
logger.debug(f"[TITLE_STYLING] field_id={param_name}, should_underline={should_underline}")
349+
298350
# CRITICAL: Trigger a visual update so opacity effects are rendered
299351
# Qt doesn't automatically render QGraphicsOpacityEffect changes
300352
# Use repaint() for immediate synchronous update, not update() which is async

0 commit comments

Comments
 (0)