img.cache (~378 MB) sind die vor-gerenderten Button-/Status-Bitmaps der Control-Panels und NICHT regenerierbar (keine PNG-Quellen). Ohne sie bricht das Panel mit "Failed to get image ..." (z.B. cs_in3_off). Waren versehentlich per .gitignore ausgeschlossen -> zurück ins Repo. Zusätzlich: VA_SVG_WINPATH deckt jetzt auch diagram.py ab, damit der EQ nicht auf negatives Y (außerhalb des Panels) positioniert wird. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
73 lines
3.3 KiB
Python
73 lines
3.3 KiB
Python
# Nativer Linux-Start der VA-Remotecontrol aus ORIGINAL-macOS-Bytecode.
|
|
# Kein py2app-Bootstrap noetig - wir importieren das App-Hauptmodul direkt.
|
|
# (main.pyc aus dem Bundle tut dasselbe, ruft aber vorab `import scipy` auf;
|
|
# hier direkt one_unit, damit Tracebacks sauber aus dem echten Fehler kommen.)
|
|
import sys
|
|
import os
|
|
|
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
|
|
# --- Linux-Kompatibilitaets-Fixes (non-invasiv, kein Bytecode-Patch) ---
|
|
|
|
# Fix 1: one_unit.start() prueft auf Nicht-Darwin die Windows-Version via
|
|
# int(platform.version()[0]) / [2]. Unter Linux beginnt platform.version() mit
|
|
# "#1 SMP ..." -> int('#') wirft ValueError. Der Fehler wird zwar gefangen,
|
|
# deaktiviert dabei aber RTA (Mikrofon-Analyzer). Wir liefern einen Windows-
|
|
# artigen String (>= 6.1), damit die Pruefung sauber durchlaeuft und RTA aktiv bleibt.
|
|
import platform as _platform
|
|
_v = _platform.version()
|
|
if not (len(_v) >= 3 and _v[0].isdigit() and _v[2].isdigit()):
|
|
_platform.version = lambda: '6.1.7601'
|
|
|
|
import one_unit
|
|
|
|
# Fix 2: Diese wxGTK-Build wandelt wx-C++-Assertions in Python-Exceptions um
|
|
# (Default PYAPP_ASSERT_EXCEPTION). Auf Mac/Release-wx sind sie unterdrueckt.
|
|
# Sonst crasht z.B. flatmenu.DrawMenuBar an einer transienten negativen
|
|
# Bitmapgroesse waehrend des fruehen Menue-Layouts. one_unit.app = wx.App(0)
|
|
# existiert bereits nach dem Import -> Assert-Modus auf SUPPRESS setzen.
|
|
try:
|
|
import wx
|
|
one_unit.app.SetAssertMode(wx.PYAPP_ASSERT_SUPPRESS)
|
|
except Exception:
|
|
pass
|
|
|
|
# Fix 3: my_menu.my_MenuBar setzt self.left_down nur im Nicht-Mac-Zweig von
|
|
# __init__. Linux laeuft als "mac" (mac_names='posix'), daher wird der Zweig
|
|
# uebersprungen und das Attribut fehlt - my_MenuBar.OnPaint braucht es aber.
|
|
# Klassen-Default ergaenzen; Instanzen, die es setzen, ueberschreiben ihn weiter.
|
|
try:
|
|
import my_menu as _my_menu
|
|
if not hasattr(_my_menu.my_MenuBar, 'left_down'):
|
|
_my_menu.my_MenuBar.left_down = False
|
|
except Exception:
|
|
pass
|
|
|
|
# Fix 4 (TEST, env-gated): Die SVG-Regler (svg_panel.Slider etc.) haben zwei
|
|
# Koordinaten-Pfade: "mac" (Y gespiegelt, +17/16px-Offsets) und Windows (Top-Left-Y).
|
|
# Umgeschaltet per `if os.name in mac_names` mit mac_names='posix' -> Linux nimmt
|
|
# faelschlich den mac-Pfad, obwohl wxGTK wie Windows mit Top-Left-Ursprung zeichnet.
|
|
# Folge: Fader laesst sich nicht greifen/ziehen. Wir zwingen svg_panel auf den
|
|
# Windows-Pfad, indem mac_names so gesetzt wird, dass os.name='posix' NICHT enthalten ist.
|
|
# Aktivieren mit VA_SVG_WINPATH=1.
|
|
if os.environ.get('VA_SVG_WINPATH') == '1':
|
|
# GUI-Module, deren `mac_names`-Zweige reine Koordinaten/Rendering-Logik sind
|
|
# (Mac-Pfad = Y gespiegelt/versetzt -> auf Linux falsch: Fader nicht greifbar,
|
|
# EQ-Diagramm auf negatives Y = ausserhalb des Panels). Bewusst NUR GUI-Module -
|
|
# die Protokoll-Module (d_protocol, d_keepalive) nutzen mac_names fuer Zeilenenden/
|
|
# Serial und werden NICHT angefasst.
|
|
_gui_mods = ['svg_panel', 'diagram']
|
|
_done = []
|
|
for _m in _gui_mods:
|
|
try:
|
|
__import__(_m)
|
|
sys.modules[_m].mac_names = '__winpath__'
|
|
_done.append(_m)
|
|
except Exception:
|
|
pass
|
|
sys.stderr.write('[launch] VA_SVG_WINPATH=1 -> Windows-Koordinatenpfad fuer: %s\n' % ', '.join(_done))
|
|
|
|
if __name__ == '__main__':
|
|
frame = one_unit.main_application(sys.argv)
|
|
frame.start()
|