parent
0fd262424e
commit
817c90e561
|
|
@ -45,6 +45,7 @@ class Kind(IntEnum):
|
||||||
MULTIPLE_RANGE = 0x40
|
MULTIPLE_RANGE = 0x40
|
||||||
HETERO = 0x80
|
HETERO = 0x80
|
||||||
MAP_RANGE = 0x102
|
MAP_RANGE = 0x102
|
||||||
|
COLOR = 0x200
|
||||||
|
|
||||||
|
|
||||||
class Setting:
|
class Setting:
|
||||||
|
|
|
||||||
|
|
@ -1644,7 +1644,7 @@ class LEDZoneSetting(settings.Setting):
|
||||||
label = _("LED Zone Effects")
|
label = _("LED Zone Effects")
|
||||||
description = _("Set effect for LED Zone") + "\n" + _("LED Control needs to be set to Solaar to be effective.")
|
description = _("Set effect for LED Zone") + "\n" + _("LED Control needs to be set to Solaar to be effective.")
|
||||||
feature = _F.COLOR_LED_EFFECTS
|
feature = _F.COLOR_LED_EFFECTS
|
||||||
color_field = {"name": _LEDP.color, "kind": settings.Kind.CHOICE, "label": None, "choices": colors}
|
color_field = {"name": _LEDP.color, "kind": settings.Kind.COLOR, "label": _("Color")}
|
||||||
speed_field = {"name": _LEDP.speed, "kind": settings.Kind.RANGE, "label": _("Speed"), "min": 0, "max": 255}
|
speed_field = {"name": _LEDP.speed, "kind": settings.Kind.RANGE, "label": _("Speed"), "min": 0, "max": 255}
|
||||||
period_field = {"name": _LEDP.period, "kind": settings.Kind.RANGE, "label": _("Period"), "min": 100, "max": 5000}
|
period_field = {"name": _LEDP.period, "kind": settings.Kind.RANGE, "label": _("Period"), "min": 100, "max": 5000}
|
||||||
intensity_field = {"name": _LEDP.intensity, "kind": settings.Kind.RANGE, "label": _("Intensity"), "min": 0, "max": 100}
|
intensity_field = {"name": _LEDP.intensity, "kind": settings.Kind.RANGE, "label": _("Intensity"), "min": 0, "max": 100}
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@ class GtkSignal(Enum):
|
||||||
NOTIFY_ACTIVE = "notify::active"
|
NOTIFY_ACTIVE = "notify::active"
|
||||||
TOGGLED = "toggled"
|
TOGGLED = "toggled"
|
||||||
VALUE_CHANGED = "value-changed"
|
VALUE_CHANGED = "value-changed"
|
||||||
|
COLOR_SET = "color-set"
|
||||||
|
|
||||||
|
|
||||||
def _read_async(setting, force_read, sbox, device_is_online, sensitive):
|
def _read_async(setting, force_read, sbox, device_is_online, sensitive):
|
||||||
|
|
@ -565,6 +566,10 @@ class HeteroKeyControl(Gtk.HBox, Control):
|
||||||
item_box.set_active(0)
|
item_box.set_active(0)
|
||||||
item_box.connect(GtkSignal.CHANGED.value, self.changed)
|
item_box.connect(GtkSignal.CHANGED.value, self.changed)
|
||||||
self.pack_start(item_box, False, False, 0)
|
self.pack_start(item_box, False, False, 0)
|
||||||
|
elif item["kind"] == settings.Kind.COLOR:
|
||||||
|
item_box = Gtk.ColorButton()
|
||||||
|
item_box.connect(GtkSignal.COLOR_SET.value, self.changed)
|
||||||
|
self.pack_start(item_box, False, False, 0)
|
||||||
elif item["kind"] == settings.Kind.RANGE:
|
elif item["kind"] == settings.Kind.RANGE:
|
||||||
item_box = Scale()
|
item_box = Scale()
|
||||||
item_box.set_range(item["min"], item["max"])
|
item_box.set_range(item["min"], item["max"])
|
||||||
|
|
@ -579,7 +584,14 @@ class HeteroKeyControl(Gtk.HBox, Control):
|
||||||
def get_value(self):
|
def get_value(self):
|
||||||
result = {}
|
result = {}
|
||||||
for k, (_lblbox, box) in self._items.items():
|
for k, (_lblbox, box) in self._items.items():
|
||||||
result[str(k)] = box.get_value()
|
if isinstance(box, Gtk.ColorButton):
|
||||||
|
rgba = box.get_rgba()
|
||||||
|
r = int(rgba.red * 255)
|
||||||
|
g = int(rgba.green * 255)
|
||||||
|
b = int(rgba.blue * 255)
|
||||||
|
result[str(k)] = (r << 16) | (g << 8) | b
|
||||||
|
else:
|
||||||
|
result[str(k)] = box.get_value()
|
||||||
result = hidpp20.LEDEffectSetting(**result)
|
result = hidpp20.LEDEffectSetting(**result)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
@ -589,7 +601,13 @@ class HeteroKeyControl(Gtk.HBox, Control):
|
||||||
for k, v in value.__dict__.items():
|
for k, v in value.__dict__.items():
|
||||||
if k in self._items:
|
if k in self._items:
|
||||||
(lblbox, box) = self._items[k]
|
(lblbox, box) = self._items[k]
|
||||||
box.set_value(v)
|
if isinstance(box, Gtk.ColorButton):
|
||||||
|
rgba = Gdk.RGBA()
|
||||||
|
color_string = f"#{v:06X}" # e.g. "#FF0000"
|
||||||
|
rgba.parse(color_string)
|
||||||
|
box.set_rgba(rgba)
|
||||||
|
else:
|
||||||
|
box.set_value(v)
|
||||||
else:
|
else:
|
||||||
self.sbox._failed.set_visible(True)
|
self.sbox._failed.set_visible(True)
|
||||||
self.setup_visibles(value.ID if value is not None else 0)
|
self.setup_visibles(value.ID if value is not None else 0)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue