@@ -88,6 +88,10 @@ def __init__(self):
8888 if "setting" in item and "value" in item :
8989 self .params [item ["setting" ]] = item
9090
91+ # Track widgets and dependencies between settings
92+ self .setting_widgets = {}
93+ self .dependency_map = {}
94+
9195 # Connect signals
9296 self .txtSearch .textChanged .connect (self .txtSearch_changed )
9397 self .btnRestoreDefaults .clicked .connect (self .confirm_restore_defaults )
@@ -163,6 +167,10 @@ def Populate(self, filter=""):
163167 self .category_tabs = {}
164168 self .visible_category_names = {}
165169
170+ # Reset widget/dependency trackers each time preferences are rebuilt
171+ self .setting_widgets = {}
172+ self .dependency_map = {}
173+
166174 # Loop through settings and collect categories
167175 for item in self .settings_data :
168176 category = item .get ("category" )
@@ -438,16 +446,50 @@ def Populate(self, filter=""):
438446
439447 # Add widget to layout
440448 tabWidget .layout ().addLayout (layout_hbox )
449+ self .register_setting_widget (param , widget , label )
441450 elif (label and filterFound ):
442451 # Add widget to layout
443452 tabWidget .layout ().addWidget (label )
444453
445454 # Add stretch to bottom of layout
446455 tabWidget .layout ().addStretch ()
447456
457+ self .apply_all_dependencies ()
458+
448459 # Delete all tabs and widgets
449460 self .DeleteAllTabs (onlyInVisible = True )
450461
462+ def register_setting_widget (self , param , widget , label = None ):
463+ """Store widget references and register dependency relationships."""
464+ setting_name = param .get ("setting" )
465+ if not setting_name or not widget :
466+ return
467+
468+ self .setting_widgets [setting_name ] = widget
469+ widget .setObjectName (setting_name )
470+
471+ dependency = param .get ("dependency" )
472+ if dependency :
473+ self .dependency_map .setdefault (dependency , []).append ((widget , label ))
474+
475+ def apply_all_dependencies (self ):
476+ """Apply dependency state to all registered widgets."""
477+ for setting_name in list (self .dependency_map .keys ()):
478+ self .apply_dependency_state (setting_name )
479+
480+ def apply_dependency_state (self , setting_name ):
481+ """Enable/disable dependent widgets based on controller state."""
482+ controlled_widgets = self .dependency_map .get (setting_name , [])
483+ if not controlled_widgets :
484+ return
485+
486+ enabled = bool (self .s .get (setting_name ))
487+ for widget , label in controlled_widgets :
488+ if widget :
489+ widget .setEnabled (enabled )
490+ if label :
491+ label .setEnabled (enabled )
492+
451493 def selectExecutable (self , widget , param ):
452494 _ = get_app ()._tr
453495
@@ -514,6 +556,10 @@ def bool_value_changed(self, widget, param, state):
514556 # Check for restart
515557 self .check_for_restart (param )
516558
559+ # Update any dependent widgets
560+ if param .get ("setting" ):
561+ self .apply_dependency_state (param ["setting" ])
562+
517563 def spinner_value_changed (self , param , value ):
518564 # Save setting
519565 self .s .set (param ["setting" ], value )
0 commit comments