Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
9ee063a
WIP: Multi light support
cozybuild Jan 19, 2025
c5635f9
Add button for adding lights
cozybuild Feb 1, 2025
df3e66a
feat (locales): Add missing title for Add IP to List button
DavidVallaLope May 6, 2025
75f709e
feat (core): Add get_light_data implementation
DavidVallaLope May 6, 2025
6082cb2
fix (core): Fixed json parsin on get_light_data method
DavidVallaLope May 6, 2025
1994e85
feature (Core): Refactor update_light to use current settings from El…
DavidVallaLope May 6, 2025
08c6120
fix (Core): Fix update_lighs and get_light_data implementations
DavidVallaLope May 6, 2025
fac9f26
feat (core): Add brightness and toggle control
DavidVallaLope May 6, 2025
a2ae842
feat (Core): Refactor temperature control with Dial
DavidVallaLope May 6, 2025
4da63e3
feat (Core): Add current_status property and refactor update_light
DavidVallaLope May 6, 2025
2582318
Refactor (network-imprv): Change properties setup and request
DavidVallaLope May 7, 2025
6d2b2e2
Refactor (network-imprv): Remove unused locking mechanism and methods
DavidVallaLope May 7, 2025
8704ef1
Refactor (Display): Add K Temperature property for display
DavidVallaLope May 7, 2025
401d883
Refactor (network-imprv): Change method on Toggle action
DavidVallaLope May 7, 2025
0e8d078
fix (core): Fix overlap issues with configurations and IPs
DavidVallaLope May 8, 2025
43513c6
fix (Dial): Change screen text to update after light update
DavidVallaLope May 8, 2025
a104790
fix (IDButton): Change to set_property implementation for changes
DavidVallaLope May 8, 2025
d67ecd4
Refactor (core): Change set_properties to only work with specific values
DavidVallaLope May 8, 2025
76a6871
feat (SetButton): Implement set_property method to use API and local …
DavidVallaLope May 8, 2025
fbc70b5
fix (Core): Update icons on property update
DavidVallaLope May 8, 2025
60be3da
fix (docs): Change the REPO url inside Plugin definition
DavidVallaLope May 8, 2025
60fc3b1
fix (icon-update): Change method call to event call on update
DavidVallaLope May 9, 2025
21904ec
fix (display): Change the formula for Temperature in K
DavidVallaLope May 12, 2025
857841f
fix (ui): Devices dropdown picks current config
DavidVallaLope May 15, 2025
4494d75
fix: diverse issues
caesarakalaeii Oct 19, 2025
bf81c9a
Merge pull request #15 from caesarakalaeii/multi-light-support
cozybuild Nov 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
345 changes: 267 additions & 78 deletions actions/ElgatoKeyLight/Core.py

Large diffs are not rendered by default.

119 changes: 78 additions & 41 deletions actions/ElgatoKeyLight/Dial.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,27 @@
# Import StreamController modules
from gi.repository import Gtk, Adw
from src.backend.DeckManagement.InputIdentifier import Input, InputEvent
from enum import Enum

from .Core import Core

# Import gtk modules - used for the config rows
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw


class DialProperty(Enum):
Brightness = 0
Temperature = 1


class ToggleProperty(Enum):
ToggleLightOnOff = 0
ChangeBrightnessTemperature = 1


class Dial(Core):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
Expand All @@ -26,7 +30,6 @@ def __init__(self, *args, **kwargs):
self.current_dial_selection = 0
self.current_toggle_selection = 0


def on_ready(self) -> None:
self.load_local_saved_config()
self.update_icon()
Expand All @@ -35,58 +38,74 @@ def on_ready(self) -> None:
self.plugin_base.backend.on_brightness_changed.subscribe(self.update_labels)
self.plugin_base.backend.on_temperature_changed.subscribe(self.update_labels)


def get_config_rows(self) -> list:
parent_entries = super().get_config_rows()

self.toggle_property_selection = Gtk.StringList()
self.toggle_property_selection.append(self.plugin_base.locale_manager.get("actions.toggle_selection.light_on_off"))
self.toggle_property_selection.append(self.plugin_base.locale_manager.get("actions.toggle_selection.brightness_temperature"))
self.toggle_property_selection.append(
self.plugin_base.locale_manager.get("actions.toggle_selection.light_on_off")
)
self.toggle_property_selection.append(
self.plugin_base.locale_manager.get(
"actions.toggle_selection.brightness_temperature"
)
)

self.property_selection = Gtk.StringList()

for property in DialProperty:
self.property_selection.append(property.name)

self.step_size = Adw.SpinRow.new_with_range(1, 10, 1)
self.step_size.set_title(self.plugin_base.locale_manager.get("actions.step_size.title"))
self.step_size.set_title(
self.plugin_base.locale_manager.get("actions.step_size.title")
)
self.step_size.set_value(self.selected_step_size)

self.dial_selection = Adw.ComboRow(title=self.plugin_base.locale_manager.get("actions.dial_selection.title"), model=self.property_selection)
self.dial_selection = Adw.ComboRow(
title=self.plugin_base.locale_manager.get("actions.dial_selection.title"),
model=self.property_selection,
)
self.dial_selection.set_selected(self.current_dial_selection)

self.toggle_selection = Adw.ComboRow(title=self.plugin_base.locale_manager.get("actions.toggle_selection.title"), model=self.toggle_property_selection)
self.toggle_selection = Adw.ComboRow(
title=self.plugin_base.locale_manager.get("actions.toggle_selection.title"),
model=self.toggle_property_selection,
)
self.toggle_selection.set_selected(self.current_toggle_selection)

self.step_size.connect("notify::text", self.on_step_size_changed)
self.dial_selection.connect("notify::selected", self.on_dial_selection_changed)
self.toggle_selection.connect("notify::selected", self.on_toggle_selection_changed)

return parent_entries + [self.dial_selection, self.toggle_selection, self.step_size]
self.toggle_selection.connect(
"notify::selected", self.on_toggle_selection_changed
)

return parent_entries + [
self.dial_selection,
self.toggle_selection,
self.step_size,
]

def on_step_size_changed(self, spinner: Adw.SpinRow, *args):
self.selected_step_size = int(self.step_size.get_value())
self.save_settings()


def on_dial_selection_changed(self, spinner: Adw.ComboRow, *args):
self.current_dial_selection = int(self.dial_selection.get_selected())
self.save_settings()


def on_toggle_selection_changed(self, spinner: Adw.ComboRow, *args):
self.current_toggle_selection = int(self.toggle_selection.get_selected())
self.save_settings()


def load_local_saved_config(self):
local_settings = self.get_settings()

self.selected_step_size = local_settings.get("step_size") or 1
self.current_dial_selection = local_settings.get("current_dial_selection") or 0
self.current_toggle_selection = local_settings.get("current_toggle_selection") or 0

self.current_toggle_selection = (
local_settings.get("current_toggle_selection") or 0
)

def save_settings(self):
local_settings = self.get_settings()
Expand All @@ -96,26 +115,28 @@ def save_settings(self):
local_settings["current_toggle_selection"] = self.current_toggle_selection
self.set_settings(local_settings)


def event_callback(self, event: InputEvent, data: dict) -> None:
if event == Input.Key.Events.DOWN or event == Input.Dial.Events.DOWN:
self.on_key_down()
return

new_value = 0
if str(event) == str(Input.Dial.Events.TURN_CW):
new_value = +self.selected_step_size
if str(event) == str(Input.Dial.Events.TURN_CCW):
new_value = -self.selected_step_size

is_brightness = self.current_dial_selection == DialProperty.Brightness.value
if is_brightness:
self.modify_brightness(new_value)
else:
self.modify_temperature(new_value)

self.update_labels()
if event == Input.Key.Events.DOWN or event == Input.Dial.Events.DOWN:
self.on_key_down()
return

new_value = 0
if str(event) == str(Input.Dial.Events.TURN_CW):
new_value = +self.selected_step_size
if str(event) == str(Input.Dial.Events.TURN_CCW):
new_value = -self.selected_step_size

is_brightness = self.current_dial_selection == DialProperty.Brightness.value
if is_brightness:
self.set_property(
"brightness", max(1, min(self.current_brightness + new_value, 100))
)
else:
self.set_property(
"temperature", max(143, min(self.current_temperature + new_value, 344))
)

self.update_labels()

def toggle_brightness_temperature(self):
if self.current_dial_selection == DialProperty.Brightness.value:
Expand All @@ -125,18 +146,34 @@ def toggle_brightness_temperature(self):

self.save_settings()


def update_labels(self):
if self.current_dial_selection == DialProperty.Brightness.value:
self.set_top_label(text=self.plugin_base.locale_manager.get("actions.current_brightness.title"))
self.set_bottom_label(text=self.plugin_base.locale_manager.get("actions.current_brightness.value") % self.current_brightness)
self.set_top_label(
text=self.plugin_base.locale_manager.get(
"actions.current_brightness.title"
)
)
self.set_bottom_label(
text=self.plugin_base.locale_manager.get(
"actions.current_brightness.value"
)
% self.current_brightness
)
else:
self.set_top_label(text=self.plugin_base.locale_manager.get("actions.current_temperature.title"))
self.set_bottom_label(text=str(self.current_temperature))

self.set_top_label(
text=self.plugin_base.locale_manager.get(
"actions.current_temperature.title"
)
)
self.set_bottom_label(
text=self.plugin_base.locale_manager.get(
"actions.current_temperature.value"
)
% int(self.current_k_temperature)
)

def on_key_down(self) -> None:
if self.current_toggle_selection == ToggleProperty.ToggleLightOnOff.value:
self.toggle_light()
self.set_property("on", None)
else:
self.toggle_brightness_temperature()
30 changes: 20 additions & 10 deletions actions/ElgatoKeyLight/IncreaseDecreaseButton.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,29 @@
# Import StreamController modules
from gi.repository import Gtk, Adw
from src.backend.DeckManagement.InputIdentifier import Input, InputEvent
from enum import Enum

from .Core import Core

# Import gtk modules - used for the config rows
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw


class AvailableProperty(Enum):
Brightness = 0
Temperature = 1


class IncreaseDecreaseButton(Core):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

self.selected_step_size = 1
self.current_dial_selection = 0


def on_ready(self) -> None:
self.load_local_saved_config()
self.update_icon()
Expand All @@ -35,23 +37,26 @@ def get_config_rows(self) -> list:
self.property_selection.append(property.name)

self.step_size = Adw.SpinRow.new_with_range(-10, 10, 1)
self.step_size.set_title(self.plugin_base.locale_manager.get("actions.step_size.title"))
self.step_size.set_title(
self.plugin_base.locale_manager.get("actions.step_size.title")
)
self.step_size.set_value(self.selected_step_size)

self.dial_selection = Adw.ComboRow(title=self.plugin_base.locale_manager.get("actions.dial_selection.title"), model=self.property_selection)
self.dial_selection = Adw.ComboRow(
title=self.plugin_base.locale_manager.get("actions.dial_selection.title"),
model=self.property_selection,
)
self.dial_selection.set_selected(self.current_dial_selection)

self.step_size.connect("notify::text", self.on_step_size_changed)
self.dial_selection.connect("notify::selected", self.on_dial_selection_changed)

return parent_entries + [self.dial_selection, self.step_size]


def on_step_size_changed(self, spinner: Adw.SpinRow, *args):
self.selected_step_size = int(self.step_size.get_value())
self.save_settings()


def on_dial_selection_changed(self, spinner: Adw.ComboRow, *args):
self.current_dial_selection = int(self.dial_selection.get_selected())
self.save_settings()
Expand All @@ -62,7 +67,6 @@ def load_local_saved_config(self):
self.selected_step_size = local_settings.get("step_size") or 1
self.current_dial_selection = local_settings.get("current_dial_selection") or 0


def save_settings(self):
local_settings = self.get_settings()

Expand All @@ -73,8 +77,14 @@ def save_settings(self):
def on_key_down(self) -> None:
new_value = 0
new_value = +self.selected_step_size
is_brightness = self.current_dial_selection == AvailableProperty.Brightness.value
is_brightness = (
self.current_dial_selection == AvailableProperty.Brightness.value
)
if is_brightness:
self.modify_brightness(new_value)
self.set_property(
"brightness", max(1, min(self.current_brightness + new_value, 100))
)
else:
self.modify_temperature(new_value)
self.set_property(
"temperature", max(143, min(self.current_temperature + new_value, 344))
)
Loading