Deplace l'overlay Cocoa derriere le contrat Overlay, sans le modifier
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
5f83e4c6a3
commit
3c3ea4444d
4
app.py
4
app.py
@ -30,7 +30,7 @@ from pynput import keyboard
|
|||||||
|
|
||||||
from controller import ZonzaController
|
from controller import ZonzaController
|
||||||
from core import CONFIG, validate_config
|
from core import CONFIG, validate_config
|
||||||
from pulse_window import PulseWindow
|
from interface import classe_overlay_pour
|
||||||
from systeme import choisir_systeme
|
from systeme import choisir_systeme
|
||||||
|
|
||||||
_STATE_TITLES = {
|
_STATE_TITLES = {
|
||||||
@ -49,7 +49,7 @@ class ZonzaApp(NSObject):
|
|||||||
return None
|
return None
|
||||||
self._item = None
|
self._item = None
|
||||||
self._sounds_item = None
|
self._sounds_item = None
|
||||||
self.pulse = PulseWindow.alloc().init()
|
self.pulse = classe_overlay_pour().alloc().init()
|
||||||
self.controller = ZonzaController(
|
self.controller = ZonzaController(
|
||||||
CONFIG, self.pulse, on_state=self._set_state,
|
CONFIG, self.pulse, on_state=self._set_state,
|
||||||
run_on_main=AppHelper.callAfter,
|
run_on_main=AppHelper.callAfter,
|
||||||
|
|||||||
11
interface/__init__.py
Normal file
11
interface/__init__.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
"""Choisit l'implémentation d'overlay selon la plateforme."""
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def classe_overlay_pour(plateforme=None):
|
||||||
|
"""Rend la CLASSE d'overlay (pas une instance : Cocoa exige `alloc().init()`)."""
|
||||||
|
plateforme = plateforme or sys.platform
|
||||||
|
if plateforme.startswith("darwin"):
|
||||||
|
from interface.cocoa.overlay import PulseWindow
|
||||||
|
return PulseWindow
|
||||||
|
raise NotImplementedError(f"Aucune interface pour : {plateforme}")
|
||||||
0
interface/cocoa/__init__.py
Normal file
0
interface/cocoa/__init__.py
Normal file
16
tests/test_interface.py
Normal file
16
tests/test_interface.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
"""La fabrique rend un overlay conforme au contrat, sans ouvrir de fenêtre."""
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from interface import classe_overlay_pour
|
||||||
|
|
||||||
|
|
||||||
|
def test_l_overlay_macos_declare_tout_le_contrat():
|
||||||
|
classe = classe_overlay_pour("darwin")
|
||||||
|
for methode in ("show", "hide", "set_level", "set_status", "rearmer_garde"):
|
||||||
|
assert callable(getattr(classe, methode, None)), f"{methode} manque"
|
||||||
|
|
||||||
|
|
||||||
|
def test_une_plateforme_inconnue_est_refusee_clairement():
|
||||||
|
with pytest.raises(NotImplementedError) as e:
|
||||||
|
classe_overlay_pour("haiku-os")
|
||||||
|
assert "haiku-os" in str(e.value)
|
||||||
Loading…
Reference in New Issue
Block a user