ui: add support to Setting condition
This commit is contained in:
parent
e628298c0a
commit
c53c77f427
|
@ -518,6 +518,7 @@ class DiversionDialog:
|
||||||
(_('Key'), _DIV.Key, ''),
|
(_('Key'), _DIV.Key, ''),
|
||||||
(_('Test'), _DIV.Test, next(iter(_DIV.TESTS))),
|
(_('Test'), _DIV.Test, next(iter(_DIV.TESTS))),
|
||||||
(_('Test bytes'), _DIV.TestBytes, [0, 1, 0]),
|
(_('Test bytes'), _DIV.TestBytes, [0, 1, 0]),
|
||||||
|
(_('Setting'), _DIV.Setting, [None, '', None]),
|
||||||
(_('Mouse Gesture'), _DIV.MouseGesture, ''),
|
(_('Mouse Gesture'), _DIV.MouseGesture, ''),
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
@ -1861,11 +1862,13 @@ def _from_named_ints(v, all_values):
|
||||||
|
|
||||||
|
|
||||||
class SetValueControl(Gtk.HBox):
|
class SetValueControl(Gtk.HBox):
|
||||||
def __init__(self, on_change, *args, **kwargs):
|
def __init__(self, on_change, *args, accept_toggle=True, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.on_change = on_change
|
self.on_change = on_change
|
||||||
self.toggle_widget = SmartComboBox([('Toggle', _('Toggle'), '~'), (True, _('True'), 'True', 'yes', 'on', 't', 'y'),
|
self.toggle_widget = SmartComboBox([
|
||||||
(False, _('False'), 'False', 'no', 'off', 'f', 'n')],
|
*([('Toggle', _('Toggle'), '~')] if accept_toggle else []), (True, _('True'), 'True', 'yes', 'on', 't', 'y'),
|
||||||
|
(False, _('False'), 'False', 'no', 'off', 'f', 'n')
|
||||||
|
],
|
||||||
case_insensitive=True)
|
case_insensitive=True)
|
||||||
self.toggle_widget.connect('changed', self._changed)
|
self.toggle_widget.connect('changed', self._changed)
|
||||||
self.range_widget = Gtk.SpinButton.new_with_range(0, 0xFFFF, 1)
|
self.range_widget = Gtk.SpinButton.new_with_range(0, 0xFFFF, 1)
|
||||||
|
@ -2016,14 +2019,14 @@ def _all_settings():
|
||||||
return settings
|
return settings
|
||||||
|
|
||||||
|
|
||||||
class SetUI(ActionUI):
|
class _SettingWithValueUI:
|
||||||
|
|
||||||
CLASS = _DIV.Set
|
|
||||||
|
|
||||||
ALL_SETTINGS = _all_settings()
|
ALL_SETTINGS = _all_settings()
|
||||||
|
|
||||||
MULTIPLE = [_SKIND.multiple_toggle, _SKIND.map_choice, _SKIND.multiple_range]
|
MULTIPLE = [_SKIND.multiple_toggle, _SKIND.map_choice, _SKIND.multiple_range]
|
||||||
|
|
||||||
|
ACCEPT_TOGGLE = True
|
||||||
|
|
||||||
def create_widgets(self):
|
def create_widgets(self):
|
||||||
|
|
||||||
self.widgets = {}
|
self.widgets = {}
|
||||||
|
@ -2057,7 +2060,7 @@ class SetUI(ActionUI):
|
||||||
|
|
||||||
self.value_lbl = Gtk.Label(_('Value'), halign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER, hexpand=True, vexpand=False)
|
self.value_lbl = Gtk.Label(_('Value'), halign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER, hexpand=True, vexpand=False)
|
||||||
self.widgets[self.value_lbl] = (2, 1, 1, 1)
|
self.widgets[self.value_lbl] = (2, 1, 1, 1)
|
||||||
self.value_field = SetValueControl(self._on_update)
|
self.value_field = SetValueControl(self._on_update, accept_toggle=self.ACCEPT_TOGGLE)
|
||||||
self.value_field.set_valign(Gtk.Align.CENTER)
|
self.value_field.set_valign(Gtk.Align.CENTER)
|
||||||
self.value_field.set_size_request(250, 35)
|
self.value_field.set_size_request(250, 35)
|
||||||
self.widgets[self.value_field] = (3, 1, 1, 1)
|
self.widgets[self.value_field] = (3, 1, 1, 1)
|
||||||
|
@ -2239,7 +2242,6 @@ class SetUI(ActionUI):
|
||||||
|
|
||||||
def _on_update(self, *_args):
|
def _on_update(self, *_args):
|
||||||
if not self._ignore_changes and self.component:
|
if not self._ignore_changes and self.component:
|
||||||
super()._on_update(*_args)
|
|
||||||
self._update_validation()
|
self._update_validation()
|
||||||
|
|
||||||
def _update_validation(self):
|
def _update_validation(self):
|
||||||
|
@ -2265,7 +2267,6 @@ class SetUI(ActionUI):
|
||||||
self.value_field.choice_widget.get_child().set_icon_from_icon_name(Gtk.EntryIconPosition.SECONDARY, icon)
|
self.value_field.choice_widget.get_child().set_icon_from_icon_name(Gtk.EntryIconPosition.SECONDARY, icon)
|
||||||
|
|
||||||
def show(self, component, editable):
|
def show(self, component, editable):
|
||||||
super().show(component, editable)
|
|
||||||
a = iter(component.args)
|
a = iter(component.args)
|
||||||
with self.ignore_changes():
|
with self.ignore_changes():
|
||||||
device_str = next(a, None)
|
device_str = next(a, None)
|
||||||
|
@ -2340,6 +2341,36 @@ class SetUI(ActionUI):
|
||||||
return device_disp + ' ' + ' '.join(map(lambda s: shlex_quote(str(s)), [*disp, *a]))
|
return device_disp + ' ' + ' '.join(map(lambda s: shlex_quote(str(s)), [*disp, *a]))
|
||||||
|
|
||||||
|
|
||||||
|
class SetUI(_SettingWithValueUI, ActionUI):
|
||||||
|
|
||||||
|
CLASS = _DIV.Set
|
||||||
|
ACCEPT_TOGGLE = True
|
||||||
|
|
||||||
|
def show(self, component, editable):
|
||||||
|
ActionUI.show(self, component, editable)
|
||||||
|
_SettingWithValueUI.show(self, component, editable)
|
||||||
|
|
||||||
|
def _on_update(self, *_args):
|
||||||
|
if not self._ignore_changes and self.component:
|
||||||
|
ActionUI._on_update(self, *_args)
|
||||||
|
_SettingWithValueUI._on_update(self, *_args)
|
||||||
|
|
||||||
|
|
||||||
|
class SettingUI(_SettingWithValueUI, ConditionUI):
|
||||||
|
|
||||||
|
CLASS = _DIV.Setting
|
||||||
|
ACCEPT_TOGGLE = False
|
||||||
|
|
||||||
|
def show(self, component, editable):
|
||||||
|
ConditionUI.show(self, component, editable)
|
||||||
|
_SettingWithValueUI.show(self, component, editable)
|
||||||
|
|
||||||
|
def _on_update(self, *_args):
|
||||||
|
if not self._ignore_changes and self.component:
|
||||||
|
ConditionUI._on_update(self, *_args)
|
||||||
|
_SettingWithValueUI._on_update(self, *_args)
|
||||||
|
|
||||||
|
|
||||||
COMPONENT_UI = {
|
COMPONENT_UI = {
|
||||||
_DIV.Rule: RuleUI,
|
_DIV.Rule: RuleUI,
|
||||||
_DIV.Not: NotUI,
|
_DIV.Not: NotUI,
|
||||||
|
@ -2353,6 +2384,7 @@ COMPONENT_UI = {
|
||||||
_DIV.Key: KeyUI,
|
_DIV.Key: KeyUI,
|
||||||
_DIV.Test: TestUI,
|
_DIV.Test: TestUI,
|
||||||
_DIV.TestBytes: TestBytesUI,
|
_DIV.TestBytes: TestBytesUI,
|
||||||
|
_DIV.Setting: SettingUI,
|
||||||
_DIV.MouseGesture: MouseGestureUI,
|
_DIV.MouseGesture: MouseGestureUI,
|
||||||
_DIV.KeyPress: KeyPressUI,
|
_DIV.KeyPress: KeyPressUI,
|
||||||
_DIV.MouseScroll: MouseScrollUI,
|
_DIV.MouseScroll: MouseScrollUI,
|
||||||
|
|
Loading…
Reference in New Issue