@@ -221,14 +221,26 @@ def __create_flightcontroller_value(self, fc_parameters, param_name, param_defau
221221 show_tooltip (flightcontroller_value , doc_tooltip )
222222 return flightcontroller_value
223223
224+ def __update_combobox_style_on_selection (self , combobox_widget , param_default ):
225+ try :
226+ current_value = float (combobox_widget .get_selected_key ())
227+ has_default_value = param_default is not None and is_within_tolerance (current_value , param_default .value )
228+ combobox_widget .configure (style = 'default_v.TCombobox' if has_default_value else 'readonly.TCombobox' )
229+ except ValueError :
230+ logging_info (f'Could not solve the selected { combobox_widget } key to a float value.' )
231+ pass
232+
224233 @staticmethod
225234 def __update_new_value_entry_text (new_value_entry : ttk .Entry , value : float , param_default ):
235+ if isinstance (new_value_entry , PairTupleCombobox ):
236+ return
226237 new_value_entry .delete (0 , tk .END )
227238 value_str = format (value , '.6f' ).rstrip ('0' ).rstrip ('.' )
228239 new_value_entry .insert (0 , value_str )
229- new_value_background = "light blue" if param_default is not None and \
230- is_within_tolerance (value , param_default .value ) else "white"
231- new_value_entry .config (background = new_value_background )
240+ if param_default is not None and is_within_tolerance (value , param_default .value ):
241+ new_value_entry .configure (style = 'default_v.TEntry' )
242+ else :
243+ new_value_entry .configure (style = 'TEntry' )
232244
233245 def __create_new_value_entry (self , param_name , param , # pylint: disable=too-many-arguments
234246 param_metadata , param_default , doc_tooltip ):
@@ -254,13 +266,17 @@ def __create_new_value_entry(self, param_name, param, # pylint: disable=too-man
254266 if param_metadata and 'values' in param_metadata and param_metadata ['values' ] and \
255267 value_str in param_metadata ['values' ]:
256268 selected_value = param_metadata ['values' ].get (value_str , None )
269+ has_default_value = param_default is not None and is_within_tolerance (param .value , param_default .value )
257270 new_value_entry = PairTupleCombobox (self .view_port , param_metadata ['values' ],
258271 value_str , param_name ,
259- style = 'TCombobox' if present_as_forced else 'readonly.TCombobox' )
272+ style = 'TCombobox' if present_as_forced else \
273+ 'default_v.TCombobox' if has_default_value else 'readonly.TCombobox' )
260274 new_value_entry .set (selected_value )
261275 font = get_widget_font (new_value_entry )
262276 font ['size' ] -= 2 if platform_system () == 'Windows' else 1
263277 new_value_entry .config (state = 'readonly' , width = 9 , font = (font ['family' ], font ['size' ]))
278+ new_value_entry .bind ("<<ComboboxSelected>>" ,
279+ lambda event : self .__update_combobox_style_on_selection (new_value_entry , param_default ))
264280 else :
265281 new_value_entry = ttk .Entry (self .view_port , width = 10 , justify = tk .RIGHT )
266282 ParameterEditorTable .__update_new_value_entry_text (new_value_entry , param .value , param_default )
@@ -464,8 +480,7 @@ def __on_parameter_value_change(self, event, current_file, param_name):
464480 else :
465481 # Revert to the previous (valid) value
466482 p = old_value
467- ParameterEditorTable .__update_new_value_entry_text (event .widget , p ,
468- self .local_filesystem .param_default_dict .get (param_name , None ))
483+ self .__update_new_value_entry_text (event .widget , p , self .local_filesystem .param_default_dict .get (param_name , None ))
469484
470485 def __on_parameter_change_reason_change (self , event , current_file , param_name ):
471486 # Get the new value from the Entry widget
0 commit comments