Simplify settings UI class
Classes shouldn't don't need to know about other settings classes. Related #2273
This commit is contained in:
parent
cdaffce463
commit
dd13993ff3
|
@ -56,6 +56,28 @@ _diversion_dialog = None
|
||||||
_rule_component_clipboard = None
|
_rule_component_clipboard = None
|
||||||
|
|
||||||
|
|
||||||
|
def create_all_settings(all_settings: list[Setting]) -> dict[str, list[Setting]]:
|
||||||
|
settings = {}
|
||||||
|
for s in sorted(all_settings, key=lambda setting: setting.label):
|
||||||
|
if s.name not in settings:
|
||||||
|
settings[s.name] = [s]
|
||||||
|
else:
|
||||||
|
prev_setting = settings[s.name][0]
|
||||||
|
prev_kind = prev_setting.validator_class.kind
|
||||||
|
if prev_kind != s.validator_class.kind:
|
||||||
|
logger.warning(
|
||||||
|
"ignoring setting {} - same name of {}, but different kind ({} != {})".format(
|
||||||
|
s.__name__, prev_setting.__name__, prev_kind, s.validator_class.kind
|
||||||
|
)
|
||||||
|
)
|
||||||
|
continue
|
||||||
|
settings[s.name].append(s)
|
||||||
|
return settings
|
||||||
|
|
||||||
|
|
||||||
|
ALL_SETTINGS = create_all_settings(SETTINGS)
|
||||||
|
|
||||||
|
|
||||||
class RuleComponentWrapper(GObject.GObject):
|
class RuleComponentWrapper(GObject.GObject):
|
||||||
def __init__(self, component, level=0, editable=False):
|
def __init__(self, component, level=0, editable=False):
|
||||||
self.component = component
|
self.component = component
|
||||||
|
@ -1335,25 +1357,6 @@ class SetValueControl(Gtk.HBox):
|
||||||
self.unsupported_label.show()
|
self.unsupported_label.show()
|
||||||
|
|
||||||
|
|
||||||
def create_all_settings(all_settings: list[Setting]) -> dict[str, Setting]:
|
|
||||||
settings = {}
|
|
||||||
for s in sorted(all_settings, key=lambda setting: setting.label):
|
|
||||||
if s.name not in settings:
|
|
||||||
settings[s.name] = [s]
|
|
||||||
else:
|
|
||||||
prev_setting = settings[s.name][0]
|
|
||||||
prev_kind = prev_setting.validator_class.kind
|
|
||||||
if prev_kind != s.validator_class.kind:
|
|
||||||
logger.warning(
|
|
||||||
"ignoring setting {} - same name of {}, but different kind ({} != {})".format(
|
|
||||||
s.__name__, prev_setting.__name__, prev_kind, s.validator_class.kind
|
|
||||||
)
|
|
||||||
)
|
|
||||||
continue
|
|
||||||
settings[s.name].append(s)
|
|
||||||
return settings
|
|
||||||
|
|
||||||
|
|
||||||
class _DeviceUI:
|
class _DeviceUI:
|
||||||
label_text = ""
|
label_text = ""
|
||||||
|
|
||||||
|
@ -1454,7 +1457,6 @@ class HostUI(ConditionUI):
|
||||||
|
|
||||||
|
|
||||||
class _SettingWithValueUI:
|
class _SettingWithValueUI:
|
||||||
ALL_SETTINGS = create_all_settings(SETTINGS)
|
|
||||||
MULTIPLE = [Kind.MULTIPLE_TOGGLE, Kind.MAP_CHOICE, Kind.MULTIPLE_RANGE]
|
MULTIPLE = [Kind.MULTIPLE_TOGGLE, Kind.MAP_CHOICE, Kind.MULTIPLE_RANGE]
|
||||||
ACCEPT_TOGGLE = True
|
ACCEPT_TOGGLE = True
|
||||||
|
|
||||||
|
@ -1493,7 +1495,7 @@ class _SettingWithValueUI:
|
||||||
vexpand=False,
|
vexpand=False,
|
||||||
)
|
)
|
||||||
self.widgets[lbl] = (0, 2, 1, 1)
|
self.widgets[lbl] = (0, 2, 1, 1)
|
||||||
self.setting_field = SmartComboBox([(s[0].name, s[0].label) for s in self.ALL_SETTINGS.values()])
|
self.setting_field = SmartComboBox([(s[0].name, s[0].label) for s in ALL_SETTINGS.values()])
|
||||||
self.setting_field.set_valign(Gtk.Align.CENTER)
|
self.setting_field.set_valign(Gtk.Align.CENTER)
|
||||||
self.setting_field.connect("changed", self._changed_setting)
|
self.setting_field.connect("changed", self._changed_setting)
|
||||||
self.setting_field.connect("changed", self._on_update)
|
self.setting_field.connect("changed", self._on_update)
|
||||||
|
@ -1546,7 +1548,7 @@ class _SettingWithValueUI:
|
||||||
if extra is not None:
|
if extra is not None:
|
||||||
choices |= NamedInts(**{str(extra): int(extra)})
|
choices |= NamedInts(**{str(extra): int(extra)})
|
||||||
return choices, extra
|
return choices, extra
|
||||||
settings = cls.ALL_SETTINGS.get(setting, [])
|
settings = ALL_SETTINGS.get(setting, [])
|
||||||
choices = UnsortedNamedInts()
|
choices = UnsortedNamedInts()
|
||||||
extra = None
|
extra = None
|
||||||
for s in settings:
|
for s in settings:
|
||||||
|
@ -1562,7 +1564,7 @@ class _SettingWithValueUI:
|
||||||
setting = device.settings.get(setting_name, None)
|
setting = device.settings.get(setting_name, None)
|
||||||
settings = [type(setting)] if setting else None
|
settings = [type(setting)] if setting else None
|
||||||
else:
|
else:
|
||||||
settings = cls.ALL_SETTINGS.get(setting_name, [None])
|
settings = ALL_SETTINGS.get(setting_name, [None])
|
||||||
setting = settings[0] # if settings have the same name, use the first one to get the basic data
|
setting = settings[0] # if settings have the same name, use the first one to get the basic data
|
||||||
val_class = setting.validator_class if setting else None
|
val_class = setting.validator_class if setting else None
|
||||||
kind = val_class.kind if val_class else None
|
kind = val_class.kind if val_class else None
|
||||||
|
|
Loading…
Reference in New Issue