49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
"""Input Devices tab: same shape as Output Devices (see output_tab.py) but for
|
|
recording devices (pactl sources) — mic gain meter/L-R pair, mute, live peak
|
|
bar, profile dropdown, "Set Default"."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import gi
|
|
|
|
gi.require_version("Gtk", "4.0")
|
|
from gi.repository import Gtk # noqa: E402
|
|
|
|
from ui.device_card import DeviceCard
|
|
from ui.scroll_row import ScrollRow
|
|
|
|
|
|
class InputTab(Gtk.Box):
|
|
def __init__(self, backend, peaks) -> None:
|
|
super().__init__(orientation=Gtk.Orientation.VERTICAL)
|
|
self.add_css_class("sb-tab-page")
|
|
self._backend = backend
|
|
self._peaks = peaks
|
|
self._default_name = ""
|
|
self._row = ScrollRow(self._make_card, empty_text="No input devices found")
|
|
self.append(self._row)
|
|
|
|
def _make_card(self, item: dict, cards_by_id: dict, default_name: str) -> DeviceCard:
|
|
return DeviceCard(self._backend, self._peaks, "source", item, cards_by_id,
|
|
default_name, self._backend.set_default_source)
|
|
|
|
def refresh(self) -> None:
|
|
def got_defaults(_sink_name: str, source_name: str) -> None:
|
|
self._default_name = source_name
|
|
|
|
def got_cards(cards: list[dict]) -> None:
|
|
cards_by_id = {c["id"]: c for c in cards}
|
|
|
|
def got_sources(sources: list[dict]) -> None:
|
|
self._row.sync(sources, cards_by_id, self._default_name)
|
|
self._backend.list_sources(got_sources)
|
|
self._backend.list_cards(got_cards)
|
|
self._backend.get_defaults(got_defaults)
|
|
|
|
def activate(self) -> None:
|
|
self._row.activate()
|
|
self.refresh()
|
|
|
|
def deactivate(self) -> None:
|
|
self._row.deactivate()
|