Files
maikandClaude Opus 4.8 a7c93fa266 Erster Commit: nativer Linux-Port aus macOS-Bytecode
Läuft die Voice Acoustic VA-Remotecontrol (AllDSP AllControl) nativ unter Linux
auf echtem wxGTK 3.0 — ohne Wine und ohne dekompilierten App-Code. Ausgeführt wird
das unveränderte Python-2.7-Bytecode aus dem macOS-.app; C-Extensions (wxGTK/numpy/
scipy/PortAudio) kommen nativ aus Debian stretch.

Enthält: va/ (Original-.pyc + pure-Python-Libs + Assets + launch.py mit den drei
Linux-Fixes), Dockerfile/run.sh/entrypoint.sh, reference/ (dekompilierter Quellcode
zum Debuggen) und README/STATUS. img.cache (378 MB, regenerierbar) ist per
.gitignore ausgeschlossen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-20 19:57:01 +02:00

349 lines
14 KiB
Python

# uncompyle6 version 3.9.3
# Python bytecode version base 2.6 (62161)
# Decompiled from: Python 3.9.25 (main, Oct 31 2025, 23:16:49)
# [GCC 14.2.0]
# Embedded file name: dialog.pyc
# Compiled at: 2024-11-13 12:27:50
import mytime, wx, os, data_model, traceback, one_unit, sys, inspect, protocol
mac_names = 'posix'
def getString(strID):
return one_unit.getString(strID)
class Dialog(wx.Dialog):
def __init__(self, parent, id, title, infotext='', optkey=None, optmask=0, opttext={}, bgcolour=(220, 220, 220), fgcolour=(70, 70, 70), OK_Only=False, textkey=None, default_text=None, IsPassword=False, Set=True, Wrap=400, size=(250, 100), bg=None, choices={}, value_mask=None, selectkey=None, default_choice=0, OK_Enable=True, OKtext='Ok', Canceltext='Cancel', OK_Show=True, max=None, default_options=0, always_use_default_choice=False):
wx.Dialog.__init__(self, None, wx.ID_ANY, title, size=size, style=wx.STAY_ON_TOP | wx.CAPTION | wx.DEFAULT_DIALOG_STYLE)
self.parent = parent
self.value_mask = value_mask
self.optkey = optkey
self.updating = False
self.response = 'Cancel'
self.textkey = textkey
self.selectkey = selectkey
self.options = default_options
self.choices = choices
self.default_options = default_options
self.max = max
self.optmask = optmask
self.frame_height = 2 * wx.SystemSettings.GetMetric(wx.SYS_CAPTION_Y) + wx.SystemSettings.GetMetric(wx.SYS_BORDER_Y)
if os.name in mac_names:
self.frame_height = 24
self.chkboxes = {}
self.Set = Set
self.infotext = None
self.textpanel = wx.Panel(self, -1)
textvbox = wx.BoxSizer(wx.VERTICAL)
textfieldpanel = wx.Panel(self, -1)
textfieldvbox = wx.BoxSizer(wx.VERTICAL)
selectfieldpanel = wx.Panel(self, -1)
selectfieldvbox = wx.BoxSizer(wx.VERTICAL)
optionspanel = wx.Panel(self, -1)
optionsvbox = wx.BoxSizer(wx.VERTICAL)
buttonspanel = wx.Panel(self, -1)
buttonshbox = wx.BoxSizer(wx.HORIZONTAL)
mainvbox = wx.BoxSizer(wx.VERTICAL)
if infotext != '':
textstring = wx.StaticText(self.textpanel, -1, infotext, style=wx.ALIGN_LEFT)
textstring.Wrap(Wrap)
textstring.SetForegroundColour(fgcolour)
textvbox.Add(textstring, 1, wx.EXPAND)
self.textpanel.SetSizer(textvbox)
if Wrap > 0:
textvbox.SetMinSize((Wrap, 10))
else:
textvbox.SetMinSize(size)
mainvbox.Add(self.textpanel, 0, border=10, flag=wx.ALL)
self.infotext = textstring
self.infostring = infotext
self.wrap = Wrap
if textkey != None:
textval = ''
if default_text == None:
try:
textval = self.parent.model.get(textkey)
retries = 20
while textval == None and retries > 0:
print mytime.clock(), 'Retrieving text value for dialog with key', textkey
self.parent.remote_link.set_get_key(textkey)
retries -= 1
mytime.sleep(0.1)
textval = self.parent.model.get(textkey)
except:
print mytime.displayTime() + ' Failed to get text for dialog'
traceback.print_exc(file=sys.stdout)
if textval == None:
textval = ''
if default_text != None:
textval = default_text
if IsPassword == True:
style = wx.TE_PROCESS_ENTER | wx.TE_PASSWORD
else:
style = wx.TE_PROCESS_ENTER
textfield = wx.TextCtrl(textfieldpanel, 3, unicode(textval), style=style)
textfieldvbox.Add(textfield, 1, border=5, flag=wx.ALIGN_LEFT | wx.ALL)
textfield.SetFocus()
textfieldpanel.SetSizer(textfieldvbox)
mainvbox.Add(textfieldpanel, 0, border=10, flag=wx.LEFT | wx.RIGHT)
self.textfield = textfield
if selectkey != None:
selectval = None
try:
selectval = self.parent.model.get(selectkey)
retries = 20
while selectval == None and retries > 0:
print mytime.clock(), 'Retrieving select value for dialog with key', selectkey
self.parent.remote_link.set_get_key(selectkey)
retries -= 1
mytime.sleep(0.1)
selectval = self.parent.model.get(selectkey)
if value_mask != None:
selectval = int(int(selectval) & value_mask)
except:
traceback.print_exc(file=sys.stdout)
else:
if selectval == None or always_use_default_choice == True:
selectval = default_choice
if selectval not in self.choices.keys():
selectval = default_choice
style = wx.BORDER_NONE | wx.CB_READONLY
mychoices = []
for i in sorted(choices.keys()):
mychoices.append(choices[i])
selectfield = wx.ComboBox(selectfieldpanel, 30, choices=mychoices, style=style)
selectfield.SetStringSelection(self.choices[selectval])
selectfieldvbox.Add(selectfield, 1, border=5, flag=wx.ALIGN_LEFT | wx.ALL)
selectfieldpanel.SetSizer(selectfieldvbox)
mainvbox.Add(selectfieldpanel, 0, border=10, flag=wx.LEFT | wx.RIGHT)
self.selectfield = selectfield
if optkey != None and optmask != 0:
try:
options = int(self.parent.model.get(optkey))
except:
options = default_options
else:
chkboxes = {}
for i in range(0, 31):
optnr = optmask & 1 << i
val = options & 1 << i
if optnr > 0:
try:
this_opttext = opttext[optnr]
except:
this_opttext = 'Unlisted Option: ' + hex(optnr)
else:
chkboxes[i] = wx.CheckBox(optionspanel, -1, this_opttext)
chkboxes[i].SetForegroundColour(fgcolour)
optionsvbox.Add(chkboxes[i], 1, border=5, flag=wx.ALIGN_LEFT | wx.ALL)
if val > 0:
chkboxes[i].SetValue(1)
optionspanel.SetSizer(optionsvbox)
optionsvbox.SetMinSize((250, 10))
mainvbox.Add(optionspanel, 0, border=10, flag=wx.LEFT | wx.RIGHT)
self.chkboxes = chkboxes
self.OK_button = wx.Button(buttonspanel, 1, OKtext)
self.OK_button.Enable(OK_Enable)
self.OK_button.Show(OK_Show)
buttonshbox.Add(self.OK_button, 1, border=0, flag=wx.ALL)
if OK_Only == False:
buttonshbox.Add(wx.Button(buttonspanel, 2, Canceltext), 1, border=0, flag=wx.ALL)
buttonspanel.SetSizer(buttonshbox)
if OK_Only == True:
buttonshbox.SetMinSize((75, self.frame_height))
else:
buttonshbox.SetMinSize((150, self.frame_height))
mainvbox.Add(buttonspanel, 0, border=5, flag=wx.ALL)
self.SetSizerAndFit(mainvbox)
self.Centre()
self.textvbox = textvbox
self.SetBackgroundColour(bgcolour)
self.Bind(wx.EVT_TEXT_ENTER, self.OnOK, id=3)
self.Bind(wx.EVT_COMBOBOX, self.OnCombo, id=30)
self.Bind(wx.EVT_BUTTON, self.OnOK, id=1)
self.Bind(wx.EVT_BUTTON, self.OnCancel, id=2)
self.CenterOnScreen()
self.mainvbox = mainvbox
self.response = None
self.initialSize = self.GetSize()
self.initialPosition = self.GetPosition()
return
def OnCombo(self, evt):
self.Raise()
return
def OnEraseBackground(self, evt):
"""
Add a picture to the background
"""
dc = evt.GetDC()
if not dc:
dc = wx.ClientDC(self)
rect = self.GetUpdateRegion().GetBox()
dc.SetClippingRect(rect)
dc.Clear()
bmp = wx.Bitmap(self.bg)
dc.DrawBitmap(bmp, 0, 0)
self.Raise()
return
def OnOK(self, evt):
self.response = 'OK'
try:
if self.textkey != None and self.Set == True:
val = self.textfield.GetValue()
if self.max != None:
try:
if float(val) > self.max:
val = self.max
except:
pass
self.parent.set_value(self.textkey, val)
if self.optkey != None and self.optmask != 0:
try:
options = int(self.parent.model.get(self.optkey))
except:
options = self.default_options
else:
for i in range(0, 31):
optnr = self.optmask & 1 << i
val = 1 << i
if optnr > 0:
if self.chkboxes[i].GetValue() == True:
options |= val
else:
options &= 4294967295L - val
if self.Set == True:
self.parent.set_value(self.optkey, options)
self.options = options
if self.selectkey != None and self.Set == True:
s = self.selectfield.GetStringSelection()
for (k, v) in self.choices.items():
if v == s:
v = k
print mytime.displayTime() + ' setting to', v, 'mask', self.value_mask
if self.value_mask != None:
val = int(self.parent.model.get(self.selectkey)) & (4294967295L ^ self.value_mask)
val |= int(v)
v = val
self.parent.set_value(self.selectkey, v)
except:
traceback.print_exc(file=sys.stdout)
if self.IsModal() == False:
self.Destroy()
else:
self.Close()
return
def OnCancel(self, evt):
if self.IsModal == False:
self.Destroy()
else:
self.Close()
return
def Update(self, text):
while self.updating == True:
mytime.sleep(0.1)
self.updating = True
self.infostring = unicode(text)
if os.name in mac_names:
self.textvbox.Detach(self.infotext)
self.infotext.Destroy()
self.infotext = wx.StaticText(self.textpanel, -1, self.infostring, style=wx.ALIGN_LEFT | wx.ST_NO_AUTORESIZE)
self.textvbox.Add(self.infotext, 1, wx.EXPAND)
else:
self.infotext.SetLabel(self.infostring)
self.infotext.Wrap(self.wrap)
self.Layout()
self.SetSizerAndFit(self.mainvbox)
self.updating = False
return
def EnableOK(self, OK_Enable):
self.OK_button.Enable(OK_Enable)
return
def ShowOK(self, OK_Enable):
self.OK_button.Show(OK_Enable)
return
aantalBits = 32
class mapOutputToInput(wx.Dialog):
def __init__(self, parent, bits, title):
self.parent = parent
x = 50 + len(self.parent.unit_channels) * 50
y = 110 + 18 * aantalBits
size = (x, y)
wx.Dialog.__init__(self, None, wx.ID_ANY, title, size=size, style=wx.STAY_ON_TOP | wx.CAPTION | wx.DEFAULT_DIALOG_STYLE)
self.p = wx.Panel(self)
self.p.SetSize(size)
self.res = bits
self.response = 'Cancel'
self.OK_button = wx.Button(self.p, 1, 'OK', pos=(size[0] - 200, size[1] - 60), size=(80,
20))
self.Cancel_button = wx.Button(self.p, 2, 'Cancel', pos=(size[0] - 100, size[1] - 60), size=(80,
20))
self.Bind(wx.EVT_BUTTON, self.OnOK, id=1)
self.Bind(wx.EVT_BUTTON, self.OnCancel, id=2)
self.flags = {}
self.enable = {}
x = 30
for channel in sorted(bits.keys()):
if channel < 128:
wx.StaticText(self.p, -1, 'In ' + str(channel + 1), pos=(x, 20))
else:
wx.StaticText(self.p, -1, 'Out ' + str(channel - 127), pos=(x, 20))
val = bits[channel]
self.flags[channel] = {}
for i in range(aantalBits):
y = 40 + i * 18
channelString = str(i + 1)
self.flags[channel][i] = wx.CheckBox(self.p, -1, channelString, pos=(x, y), size=(50,
18))
self.flags[channel][i].SetValue(val & 1 << i)
x += 50
return
def OnOK(self, evt):
for channel in self.parent.unit_channels:
val = 0
for i in range(aantalBits):
val += self.flags[channel][i].GetValue() << i
self.res[channel] = val
self.response = 'OK'
if self.IsModal() == False:
self.Destroy()
else:
self.Close()
return
def OnCancel(self, evt):
if self.IsModal == False:
self.Destroy()
else:
self.Close()
return
# okay decompiling pycode/dialog.pyc