@@ -221,14 +221,26 @@ def __create_flightcontroller_value(self, fc_parameters, param_name, param_defau
221
221
show_tooltip (flightcontroller_value , doc_tooltip )
222
222
return flightcontroller_value
223
223
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
+
224
233
@staticmethod
225
234
def __update_new_value_entry_text (new_value_entry : ttk .Entry , value : float , param_default ):
235
+ if isinstance (new_value_entry , PairTupleCombobox ):
236
+ return
226
237
new_value_entry .delete (0 , tk .END )
227
238
value_str = format (value , '.6f' ).rstrip ('0' ).rstrip ('.' )
228
239
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' )
232
244
233
245
def __create_new_value_entry (self , param_name , param , # pylint: disable=too-many-arguments
234
246
param_metadata , param_default , doc_tooltip ):
@@ -254,13 +266,17 @@ def __create_new_value_entry(self, param_name, param, # pylint: disable=too-man
254
266
if param_metadata and 'values' in param_metadata and param_metadata ['values' ] and \
255
267
value_str in param_metadata ['values' ]:
256
268
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 )
257
270
new_value_entry = PairTupleCombobox (self .view_port , param_metadata ['values' ],
258
271
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' )
260
274
new_value_entry .set (selected_value )
261
275
font = get_widget_font (new_value_entry )
262
276
font ['size' ] -= 2 if platform_system () == 'Windows' else 1
263
277
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 ))
264
280
else :
265
281
new_value_entry = ttk .Entry (self .view_port , width = 10 , justify = tk .RIGHT )
266
282
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):
464
480
else :
465
481
# Revert to the previous (valid) value
466
482
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 ))
469
484
470
485
def __on_parameter_change_reason_change (self , event , current_file , param_name ):
471
486
# Get the new value from the Entry widget
0 commit comments