Skip to content

Commit 1e50bf9

Browse files
committed
FEATURE: use comboboxes where possible
1 parent a31420c commit 1e50bf9

File tree

3 files changed

+41
-9
lines changed

3 files changed

+41
-9
lines changed

MethodicConfigurator/backend_filesystem.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,13 @@ def __extend_and_reformat_parameter_documentation_metadata(self): # pylint: dis
163163
key, value = item.split(':')
164164
param_info['Bitmask'][int(key.strip())] = value.strip()
165165

166+
if 'values' in param_info and param_info['values']:
167+
try:
168+
param_info['Values'] = {int(k): v for k, v in param_info['values'].items()}
169+
except ValueError:
170+
param_info['Values'] = {float(k): v for k, v in param_info['values'].items()}
171+
# print(param_info['Values'])
172+
166173
prefix_parts = [
167174
f"{param_info['humanName']}",
168175
]

MethodicConfigurator/frontend_tkinter_connection_selection.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,17 @@ class PairTupleCombobox(ttk.Combobox): # pylint: disable=too-many-ancestors
4343
def process_list_pair_tuple(self, list_pair_tuple):
4444
r_list_keys = []
4545
r_list_shows = []
46-
for tpl in list_pair_tuple:
47-
r_list_keys.append(tpl[0])
48-
r_list_shows.append(tpl[1])
46+
if isinstance(list_pair_tuple, list):
47+
for tpl in list_pair_tuple:
48+
r_list_keys.append(tpl[0])
49+
r_list_shows.append(tpl[1])
50+
elif isinstance(list_pair_tuple, dict):
51+
for key, value in list_pair_tuple.items():
52+
r_list_keys.append(key)
53+
r_list_shows.append(value)
54+
else:
55+
logging_critical("list_pair_tuple must be a tuple or a dictionary, not %s", type(list_pair_tuple))
56+
sys_exit(1)
4957
return r_list_keys, r_list_shows
5058

5159
def __init__(self, container, list_pair_tuple, selected_element, cb_name, *args, **kwargs):

MethodicConfigurator/frontend_tkinter_parameter_editor_table.py

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
from MethodicConfigurator.frontend_tkinter_base import show_tooltip
3030
#from MethodicConfigurator.frontend_tkinter_base import AutoResizeCombobox
3131
from MethodicConfigurator.frontend_tkinter_base import ScrollFrame
32+
from MethodicConfigurator.frontend_tkinter_base import get_font_family
33+
34+
from MethodicConfigurator.frontend_tkinter_connection_selection import PairTupleCombobox
3235

3336
from MethodicConfigurator.annotate_params import Par
3437

@@ -219,8 +222,8 @@ def __create_flightcontroller_value(self, fc_parameters, param_name, param_defau
219222
@staticmethod
220223
def __update_new_value_entry_text(new_value_entry: ttk.Entry, value: float, param_default):
221224
new_value_entry.delete(0, tk.END)
222-
text = format(value, '.6f').rstrip('0').rstrip('.')
223-
new_value_entry.insert(0, text)
225+
value_str = format(value, '.6f').rstrip('0').rstrip('.')
226+
new_value_entry.insert(0, value_str)
224227
new_value_background = "light blue" if param_default is not None and \
225228
is_within_tolerance(value, param_default.value) else "white"
226229
new_value_entry.config(background=new_value_background)
@@ -244,9 +247,20 @@ def __create_new_value_entry(self, param_name, param, # pylint: disable=too-man
244247
param.value = self.local_filesystem.derived_parameters[self.current_file][param_name].value
245248
self.at_least_one_param_edited = True
246249

247-
new_value_entry = ttk.Entry(self.view_port, width=10, justify=tk.RIGHT)
248-
ParameterEditorTable.__update_new_value_entry_text(new_value_entry, param.value, param_default)
249-
bitmask_dict = param_metadata.get('Bitmask', None) if param_metadata else None
250+
bitmask_dict = None
251+
value_str = format(param.value, '.6f').rstrip('0').rstrip('.')
252+
if 'values' in param_metadata and param_metadata['values'] and \
253+
value_str in param_metadata['values']:
254+
selected_value = param_metadata['values'].get(value_str, None)
255+
new_value_entry = PairTupleCombobox(self.view_port, param_metadata['values'],
256+
value_str, param_name)
257+
new_value_entry.set(selected_value)
258+
new_value_entry.config(state='readonly', width=9, font=(get_font_family(new_value_entry), 9))
259+
new_value_entry.config(background='white') # does not work when done together with state='readonly'
260+
else:
261+
new_value_entry = ttk.Entry(self.view_port, width=10, justify=tk.RIGHT)
262+
ParameterEditorTable.__update_new_value_entry_text(new_value_entry, param.value, param_default)
263+
bitmask_dict = param_metadata.get('Bitmask', None) if param_metadata else None
250264
try:
251265
old_value = self.local_filesystem.file_parameters[self.current_file][param_name].value
252266
except KeyError as e:
@@ -405,7 +419,10 @@ def __on_parameter_add(self, fc_parameters):
405419

406420
def __on_parameter_value_change(self, event, current_file, param_name):
407421
# Get the new value from the Entry widget
408-
new_value = event.widget.get()
422+
if isinstance(event.widget, PairTupleCombobox):
423+
new_value = event.widget.get_selected_key()
424+
else:
425+
new_value = event.widget.get()
409426
try:
410427
old_value = self.local_filesystem.file_parameters[current_file][param_name].value
411428
except KeyError as e:

0 commit comments

Comments
 (0)