# 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()