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

806 lines
28 KiB
Python

# Source Generated with Decompyle++
# File: child_unit.pyc (Python 2.6)
if __name__ == '__main__':
import main
main.run()
import mytime
import ConfigParser
import os.path as os
import sys
import marshal
import cPickle
import wx
import datetime
import control_panel
import svg_panel
import data_model
import countDSPs
import threading
import svg
import svg.document as svg
import traceback
import future
import protocol
import main
import dialog
import base64
import StringIO
import tempfile
import math
import socket
import server
import shutil
import d_protocol
from tetris.TetrisGame import TetrisGame
import zipfile
import one_unit
import string
import my_menu
import inspect
from definitions import *
default_encryption_key = 'nvbhfwieahscoiuafnrakjdfhaskjdhvlskdjncailsuydkdfjnalsuvhesrioiclioswoqweymdpwkxmnakcnxenwoawkomoqxsojdinoskdcmskjdfmaxkjnsdcjkndlkscntnvlakjsbxnlkjdbhvkjdgnlfcusxnl'
dspArchitectures = {
'1.9.16': 'MK2.1',
'1.9.31': 'MK2.2',
'1.10.16': 'MK2.2',
'1.10.18': 'MK2.1',
'1.10.30': 'MK2.2',
'1.10.31': 'MK2.3',
'1.10.37': 'MK2.1',
'1.10.51': 'MK2.1',
'1.10.65': 'MK3.1',
'1.10.66': 'MK3.1',
'1.10.67': 'MK3.1',
'1.11.16': 'MK2.3',
'1.11.30': 'MK2.2',
'1.11.31': 'MK2.5',
'1.11.37': 'MK2.1',
'18.20.71': 'MK2.1',
'54.1.1': 'MK2.2',
'54.10.51': 'MK2.1' }
def Key(*args):
return data_model.Key(*args)
def getString(str):
return one_unit.getString(str)
if os.name in mac_names:
newline = '\n'
else:
newline = '\r\n'
class logPanel(wx.Frame):
def __init__(self, parent):
try:
title = 'Hardware Log for ' + parent.active_unit.name.strip()
except:
title = 'Hardware Log'
wx.Frame.__init__(self, None, -1, title = title, size = (800, 430))
self.title = title
self.parent = parent
self.pdfDataSet = { }
self.isTCS = self.parent.isTCS
self.isZwembad = False
if self.parent.active_unit.name.lower().find('zwembad') >= 0:
self.isZwembad = True
tempP = wx.Panel(self)
if os.name in mac_names:
ph = 30
else:
ph = 10
wx.StaticText(tempP, -1, 'Fetching Data...', pos = (10, 10))
alkey = data_model.Key(protocol.STRUCT_ID_GLOBAL, protocol.MEMBER_ID_ACTIVITY_LOG, 0, 0)
parent.remote_link.set_get_key(alkey)
try:
self.SetPosition(parent.lastLogPosition)
except:
pass
self.Show(True)
one_unit.tryYield()
parent.waitForSync('cu.lP', key = alkey)
if parent.active_unit.MAC not in one_unit.app.unitLogs:
wx.StaticText(tempP, -1, 'No available data.', pos = (10, 10))
return None
tempP.Destroy()
self.p = wx.Panel(self, size = (800, 400 + ph))
self.nb = wx.Notebook(self.p, size = (800, 370 + ph))
self.signalLevelPanel = wx.Panel(self.nb)
self.signalLevelPanel.Bind(wx.EVT_PAINT, self.OnPaintSignalLevel)
if self.isTCS:
if self.isZwembad:
self.nb.AddPage(self.signalLevelPanel, 'Zwembad')
else:
self.nb.AddPage(self.signalLevelPanel, 'CO2 Level')
else:
self.nb.AddPage(self.signalLevelPanel, 'Input Signal Level')
self.gainReductionPanel = wx.Panel(self.nb)
self.gainReductionPanel.Bind(wx.EVT_PAINT, self.OnPaintGainReduction)
if self.isTCS:
if self.isZwembad:
self.nb.AddPage(self.gainReductionPanel, 'Lucht')
else:
self.nb.AddPage(self.gainReductionPanel, 'Pressure Change')
else:
self.nb.AddPage(self.gainReductionPanel, 'Output Gain Reduction')
self.temperaturePanel = wx.Panel(self.nb)
self.temperaturePanel.Bind(wx.EVT_PAINT, self.OnPaintTemperature)
if self.isZwembad:
self.nb.AddPage(self.temperaturePanel, 'Verwarming')
else:
self.nb.AddPage(self.temperaturePanel, 'Temperature')
self.messagesPanel = wx.Panel(self.nb)
self.nb.AddPage(self.messagesPanel, 'Messages')
(self.w, self.h) = self.GetSize()
self.bw = 10
self.msgLabels = { }
self.writeMessages()
if one_unit.app.mijnpc == True:
self.resetLogButton = wx.Button(self.p, -1, 'Clear', pos = (5, 373 + ph))
self.Bind(wx.EVT_BUTTON, self.onClear, self.resetLogButton)
self.refreshLogButton = wx.Button(self.p, -1, 'Refresh', pos = (705, 373 + ph))
self.Bind(wx.EVT_BUTTON, self.onRefresh, self.refreshLogButton)
self.exportLogButton = wx.Button(self.p, -1, 'Export', pos = (620, 373 + ph))
self.Bind(wx.EVT_BUTTON, self.onExport, self.exportLogButton)
self.SetSize((800, 450))
self.parent.lastLogPosition = self.GetPosition()
try:
self.nb.SetSelection(self.parent.lastLogPage)
except:
pass
def onExport(self, e):
print mytime.displayTime(), 'export'
dlg = wx.FileDialog(self, message = 'Save as....', defaultDir = one_unit.app.library_path, defaultFile = self.title + '.pdf', style = wx.SAVE | wx.CHANGE_DIR)
if dlg.ShowModal() == wx.ID_OK:
filename = dlg.GetPath()
if filename[-4:] not in ('.pdf',):
filename += '.txt'
one_unit.app.library_path = os.path.split(filename)[0]
dlg.Destroy()
else:
dlg.Destroy()
return None
print (dlg.ShowModal() == wx.ID_OK).displayTime(), 'cu.Saving Log to', filename
localtime = localtime
strftime = strftime
import time
timeString = strftime('%a, %d %b %Y %H:%M:%S', localtime())
import makePDF
res = makePDF.MyPDF(headerText = self.title + ' (MAC: ' + self.parent.active_unit.MAC + ') ' + timeString)
res.reset()
res.add_page()
res.set_font('Arial', size = 9)
for category in sorted(self.pdfDataSet.keys()):
if category == 'Messages':
continue
dataSet = self.pdfDataSet[category]
for line in dataSet:
res.multi_cell(400, 4, txt = line, align = 'L')
dataSet = self.pdfDataSet['Messages']
for line in dataSet:
res.multi_cell(400, 4, txt = line, align = 'L')
res.output(filename)
res.close()
def onRefresh(self, e):
self.parent.lastLogPosition = self.GetPosition()
self.parent.lastLogPage = self.nb.GetSelection()
wx.CallAfter(self.parent.showHardwareLog)
self.Destroy()
def onClear(self, e):
dlgMessage = getString('dlm')
dlgTitle = getString('hl')
res = wx.MessageBox(dlgMessage, dlgTitle, wx.OK | wx.CANCEL)
if res != wx.OK:
return None
key = data_model.Key(protocol.STRUCT_ID_COMMAND, protocol.MEMBER_ID_COMMAND, 0, protocol.cmdResetLog)
self.parent.set_value(key, 1)
mytime.sleep(1)
self.parent.set_value(key, 0)
def writeMessages(self):
self.pdfDataSet['Messages'] = []
self.pdfDataSet['Messages'].append('')
self.pdfDataSet['Messages'].append('Status Messages:')
try:
log = one_unit.app.unitLogs[self.parent.active_unit.MAC]
data = { }
minutes = None
hour = None
hours = None
days = None
i = 0
for logEntry in log['6 minute']:
data[i] = logEntry
i += 1
minutes = i
for logEntry in log['1 hour']:
data[i] = logEntry
i += 1
hour = i
for logEntry in log['16 hour']:
data[i] = logEntry
i += 1
hours = i
for logEntry in log['10 day']:
data[i] = logEntry
i += 1
days = i
except:
print mytime.displayTime(), 'ou.lp.opsl No data'
traceback.print_exc(file = sys.stdout)
return None
line = 0
lastMessage = ''
for t in data:
res = data[t]
timeString = str((1 + t) * 6) + ' minutes ago'
if t >= minutes and t < hour:
timeString = str(1 + t - minutes) + ' hours ago'
if t >= hour and t < hours:
timeString = str(int((1 + t - hour) * 16 / 24)) + ' days ago'
if t >= hours:
timeString = str((1 + t - hours) * 10) + ' days ago'
lastMessage = text
if os.name in mac_names:
splitLimit = 120
else:
splitLimit = 150
if len(text) > splitLimit:
while len(text) > splitLimit:
pos = text.find(',', splitLimit - 30)
text1 = text[:pos + 1]
text = ' ' + text[pos + 2:]
self.msgLabels[line] = wx.StaticText(self.messagesPanel, -1, text1, pos = (10, 10 + line * 20))
self.pdfDataSet['Messages'].append(text1)
line += 1
self.msgLabels[line] = wx.StaticText(self.messagesPanel, -1, text, pos = (10, 10 + line * 20))
self.pdfDataSet['Messages'].append(text)
line += 1
continue
self.msgLabels[line] = wx.StaticText(self.messagesPanel, -1, text, pos = (10, 10 + line * 20))
self.pdfDataSet['Messages'].append(text)
line += 1
if line == 0:
print mytime.displayTime(), 'No messages'
self.msgLabels['None'] = wx.StaticText(self.messagesPanel, -1, 'No messages.', pos = (10, 10))
self.pdfDataSet['Messages'].append('No Messages')
def drawScale(self, dc, low, high, unit, vlines):
dc.SetPen(wx.Pen(wx.BLACK, 2))
offset = 41
dc.DrawLine(offset - 1, self.h - 100, self.w - 30, self.h - 100)
dc.DrawLine(offset - 1, 20, offset - 1, self.h - 100)
dc.SetTextForeground(wx.BLACK)
if os.name in mac_names:
dc.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL))
else:
dc.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL))
if self.isTCS:
dc.DrawText('hours', 30, self.h - 93)
else:
dc.DrawText('minutes', 30, self.h - 93)
(w, h) = dc.GetTextExtent(unit)
dc.DrawText(unit, offset - 1 - w, 0)
dc.SetPen(wx.Pen(wx.BLACK, 1))
scale = (self.h - 120) / vlines
notch = (high - low) / vlines
for i in range(vlines + 1):
labelString = str(low + i * notch)
(w, h) = dc.GetTextExtent(labelString)
dc.DrawLine(offset - 1, self.h - 100 - i * scale, offset - 8, self.h - 100 - i * scale)
dc.DrawText(labelString, offset - 11 - w, self.h - 100 - h / 2 - i * scale)
def drawDataSet(self, dc, data1, data2, low, high, yellow, red, unit, noPeak = False, title = ''):
self.pdfDataSet[title] = []
self.pdfDataSet[title].append('')
self.pdfDataSet[title].append(title)
try:
if os.name in mac_names:
dc.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL))
else:
dc.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL))
log = one_unit.app.unitLogs[self.parent.active_unit.MAC]
data = { }
minutes = None
hour = None
hours = None
days = None
maxVal = -100
maxI = 0
i = 0
for logEntry in log['6 minute']:
data[i] = (logEntry[data1], logEntry[data2])
if data[i][1] >= maxVal:
maxVal = data[i][1]
maxI = i
i += 1
minutes = i
for logEntry in log['1 hour']:
data[i] = (logEntry[data1], logEntry[data2])
if data[i][1] >= maxVal:
maxVal = data[i][1]
maxI = i
i += 1
hour = i
for logEntry in log['16 hour']:
data[i] = (logEntry[data1], logEntry[data2])
if data[i][1] >= maxVal:
maxVal = data[i][1]
maxI = i
i += 1
hours = i
for logEntry in log['10 day']:
data[i] = (logEntry[data1], logEntry[data2])
if data[i][1] >= maxVal:
maxVal = data[i][1]
maxI = i
i += 1
days = i
except:
print mytime.displayTime(), 'ou.lp.opsl No data'
traceback.print_exc(file = sys.stdout)
return None
scale = (self.h - 120) / (high - low)
offset = 41
maxX = None
textMinutes = 0
textHours = 0
textDays = 0
for t in data:
if t < minutes:
if self.isTCS:
text = str(t + 1) + ' hours ago: '
else:
text = str((t + 1) * 6) + ' minutes ago: '
elif t < hour:
if self.isTCS:
text = str(t + 1 - minutes) + ' days ago: '
else:
text = str(t + 1 - minutes) + ' hours ago: '
elif t < hours:
if self.isTCS:
text = str((t + 1 - hour) / 2) + ' weeks ago: '
else:
text = str((t + 1 - hour) / 2) + ' days ago: '
elif t < days:
if self.isTCS:
text = str((t + 1 - hours) * 10) + ' weeks ago: '
else:
text = str((t + 1 - hours) * 10) + ' days ago: '
if t in (minutes, hour, hours):
dc.SetPen(wx.Pen(wx.BLACK, 2))
dc.DrawLine(offset + t * self.bw + 1, self.h - 85, offset + t * self.bw + 1, self.h - 100)
if t == minutes:
if self.isTCS:
dc.DrawText('days', offset + t * self.bw + 4, self.h - 93)
else:
dc.DrawText('hours', offset + t * self.bw + 4, self.h - 93)
if t == hour:
if self.isTCS:
dc.DrawText('weeks', offset + t * self.bw + 4, self.h - 93)
else:
dc.DrawText('days', offset + t * self.bw + 4, self.h - 93)
v = data[t][0]
text += 'Average: ' + str(v)
if v < low:
v = low
if v > high:
v = high
if v < yellow:
dc.SetPen(wx.Pen(wx.Colour(0, 220, 0), 1))
dc.SetBrush(wx.Brush(wx.Colour(0, 220, 0)))
elif v < red:
dc.SetPen(wx.Pen(wx.Colour(255, 142, 0), 1))
dc.SetBrush(wx.Brush(wx.Colour(255, 142, 0)))
else:
dc.SetPen(wx.Pen(wx.RED, 1))
dc.SetBrush(wx.Brush(wx.RED))
v = round((v - low) * scale, 0)
dc.DrawRectangle(offset + t * self.bw + 2, self.h - 101 - v, self.bw - 2, v)
v = data[t][1]
text += ', Peak: ' + str(v)
self.pdfDataSet[title].append(text)
if v < low:
v = low
if v > high:
v = high
dc.SetPen(wx.Pen(wx.BLACK, 1))
v = (v - low) * scale
if t == 0:
x = offset + 1 + t * self.bw
y = self.h - 103 - v
if noPeak == False:
dc.DrawLine(offset + t * self.bw + 2, self.h - 103 - v, offset + t * self.bw + self.bw, self.h - 103 - v)
x = offset + 1 + t * self.bw
y = self.h - 103 - v
if t == maxI:
maxX = x
maxY = y
dc.SetPen(wx.Pen(wx.BLACK, 1))
dc.DrawLine(offset + t * self.bw + 1, self.h - 95, offset + t * self.bw + 1, self.h - 100)
textPos = offset + t * self.bw - 6
if self.isTCS:
if t == 6 and t < minutes:
dc.DrawText('6', textPos, self.h - 93)
if t == 12 and t < minutes:
dc.DrawText('12', textPos, self.h - 93)
if t == 18 and t < minutes:
dc.DrawText('18', textPos, self.h - 93)
if t == 24 and t < minutes:
dc.DrawText('24', textPos, self.h - 93)
if t == 30 and t < minutes:
dc.DrawText('30', textPos, self.h - 93)
if t - minutes == 6 and t > minutes and t < hour:
dc.DrawText('3', textPos, self.h - 93)
if t - minutes == 14 and t > minutes and t < hour:
dc.DrawText('7', textPos, self.h - 93)
if t - hour == 4 and t > hour and t < hours:
dc.DrawText('4', textPos, self.h - 93)
if t - hour == 8 and t > hour and t < hours:
dc.DrawText('8', textPos, self.h - 93)
if t - hour == 12 and t > hour and t < hours:
dc.DrawText('12', textPos, self.h - 93)
if t - hours == 1:
dc.DrawText('15', textPos, self.h - 93)
if t - hours == 3:
dc.DrawText('45', textPos, self.h - 93)
t - hours == 3
if t == 9 and t < minutes:
dc.DrawText('60', textPos, self.h - 93)
if t == 19 and t < minutes:
dc.DrawText('120', textPos, self.h - 93)
if t == 29 and t < minutes:
dc.DrawText('180', textPos, self.h - 93)
if t - minutes == 6 and t > minutes and t < hour:
dc.DrawText('6', textPos + 3, self.h - 93)
if t - minutes == 12 and t > minutes and t < hour:
dc.DrawText('12', textPos, self.h - 93)
if t - hour == 6 and t > hour and t < hours:
dc.DrawText('4', textPos, self.h - 93)
if t - hour == 12 and t > hour and t < hours:
dc.DrawText('8', textPos, self.h - 93)
if t - hours in (1, 3):
dc.DrawText(str((t - hours) * 10), textPos, self.h - 93)
continue
if maxX != None:
if os.name in mac_names:
offset = 5
else:
offset = 7
dc.DrawText('X', maxX + self.bw / 2 - 4, maxY - offset)
dc.DrawText(str(maxVal) + unit, maxX + self.bw / 2 + 3, maxY - 13 - offset)
def OnPaintSignalLevel(self, event = None):
dc = wx.PaintDC(self.signalLevelPanel)
dc.Clear()
if self.isTCS:
if self.isZwembad:
self.drawScale(dc, 10, 40, u'°C', 30)
self.drawDataSet(dc, 3, 4, 10, 40, 100, 100, u'°C', noPeak = True, title = 'Zwembad:')
else:
self.drawScale(dc, 400, 1400, 'ppm', 20)
self.drawDataSet(dc, 3, 4, 400, 1400, 900, 1300, 'ppm', noPeak = True, title = 'CO2 reading (ppm):')
else:
self.drawScale(dc, -48, 24, 'dBu', 12)
self.drawDataSet(dc, 3, 4, -48, 24, 8, 14, 'dBu', title = 'Input Signal Level (dBu):')
def OnPaintGainReduction(self, event = None):
dc = wx.PaintDC(self.gainReductionPanel)
dc.Clear()
if self.isTCS:
if self.isZwembad:
self.drawScale(dc, -10, 40, u'°C', 50)
self.drawDataSet(dc, 1, 2, -10, 40, 100, 100, u'°C', noPeak = True, title = 'Lucht:')
else:
self.drawScale(dc, -1250, 1250, 'Pa', 25)
self.drawDataSet(dc, 5, 6, -1250, 1250, 400, 500, 'Pa', noPeak = True, title = 'Pressure Deviation (Pa):')
else:
self.drawScale(dc, 0, 15, 'dB', 15)
self.drawDataSet(dc, 5, 6, 0, 15, 0, 6, 'dB', title = 'Gain Reduction (dB):')
def OnPaintTemperature(self, event = None):
dc = wx.PaintDC(self.temperaturePanel)
dc.Clear()
if self.isTCS:
if self.isZwembad:
self.drawScale(dc, 0, 60, u'°C', 60)
self.drawDataSet(dc, 5, 6, 0, 60, 100, 100, u'°C', noPeak = True, title = 'Verwarming:')
else:
self.drawScale(dc, 0, 100, u'°C', 10)
self.drawDataSet(dc, 1, 2, 0, 100, 66, 71, u'°C', noPeak = True, title = u'Temperature (°C):')
else:
self.drawScale(dc, 0, 100, u'°C', 10)
self.drawDataSet(dc, 1, 2, 0, 100, 66, 71, u'°C', title = u'Temperature (°C):')
class Child_frame(wx.Frame):
def __init__(self, parent, *args, **kwds):
mystyle = wx.MINIMIZE_BOX | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN | wx.SYSTEM_MENU | wx.MAXIMIZE_BOX
self.main_config = parent.main_config
self.my_start_time = mytime.clock()
self.last_sorry_time = 0
self.history = { }
self.lastRestoredId = None
self.updating_from_nww = False
self.startTime = mytime.clock()
self.printedSyncTime = False
self.__name__ = 'Child Frame'
self.windowReference = None
self.modelNameFromUi = [
'',
'',
'',
'']
self.executeTask = None
self.isClosed = False
self.fastTimerRunning = False
self.flashSizePrinted = False
self.lastSelectedChannel = None
self.lastSnapshotTime = datetime.datetime.now()
self.blockSwitchViewWhenNotSynced = False
self.shouldBeVisible = True
self.clickTime = mytime.clock() + 1
self.isVisible = False
self.userBits = { }
self.MAC = 'Uninitialized'
try:
import keyfile
except:
print mytime.displayTime() + ' Failed to import keyfile'
traceback.print_exc(file = sys.stdout)
try:
self.preset_encryption_key = keyfile.preset_encryption_key
except:
self.preset_encryption_key = None
try:
self.backup_encryption_key = keyfile.backup_encryption_key
except:
self.backup_encryption_key = None
try:
self.no_border = self.main_config.get('ROOT', no_border)
if self.no_border == 'yes':
self.no_border = True
except:
if os.name in mac_names:
self.no_border = False
else:
self.no_border = True
if args[3] == True:
self.mv_panel = True
else:
self.mv_panel = False
args = args[:3]
try:
self.bgcolour = eval(self.main_config.get('ROOT', 'bgcolour'))
except:
self.bgcolour = (0, 0, 0)
try:
self.preset_extension = self.main_config.get('ROOT', 'preset_extension')
except:
self.preset_extension = 'preset'
try:
self.spk_lib_id = self.main_config.get('ROOT', 'speaker_lib_id')
except:
self.spk_lib_id = '#'
self.svg_scale_x = 1
self.svg_scale_y = 1
self.svg_file_scale_x = 1
self.svg_file_scale_y = 1
if self.no_border:
mystyle = wx.BORDER_NONE
mystyle &= ~(wx.RESIZE_BORDER | wx.RESIZE_BOX | wx.MAXIMIZE_BOX)
wx.Frame.__init__(self, style = mystyle, *args)
if os.name in mac_names:
self.bgpanel = wx.Panel(self, wx.ID_ANY, size = (2000, 2000))
self.bgpanel.SetBackgroundColour(self.bgcolour)
self.Show(False)
self.init_done = False
self.parent = parent
self.updatingFirmware = False
self.restartingAfterFirmwareUpdate = False
self.restartingAfterFirmwareUpdateDelay = None
self.SetBackgroundColour(self.bgcolour)
self.server = parent.server
self.last_index = 0
self.index_button_name = ''
self.progress = None
self.alwaysGrantAccessToOutPanel = False
self.views = None
self.preset_accessrights = 0
self.CanMaximize = False
self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
self.Bind(wx.EVT_SIZE, self.OnSize)
self.storeWithKey = None
def OnSize(self, e):
if self.init_done == False:
return None
if self.no_border == True:
self.frame_height = 0
else:
self.frame_height = 22
self.AutoCenter(self.current_view, self.GetSize())
def AutoCenter(self, view, size):
try:
client_area = wx.Display().GetClientArea()
x = client_area[2]
width = view.GetSize()[0]
height = view.GetSize()[1] + self.frame_height
x_pos = (size[0] - width) / 2
if self.menubar != None:
view.SetPosition((x_pos, self.menubar.GetSize()[1]))
self.menubar.SetSize((size[0], self.menubar.GetSize()[1]))
else:
view.SetPosition((x_pos, 0))
except:
pass
def OnLeftUp(self, e):
pass
def OnLeftDown(self, e):
pass
def refreshAccess(self):
accesskey = data_model.Key(protocol.STRUCT_ID_GLOBAL, protocol.MEMBER_ID_ACCESS_RIGHTS, 0, 0)
self.remote_link.set_get_key(accesskey)
userkey = data_model.Key(protocol.STRUCT_ID_GLOBAL, protocol.MEMBER_ID_CURRENT_USER, 0, 0)
self.remote_link.set_get_key(userkey)
self.waitForSync('cu.rA', key = userkey)
self.waitForSync('cu.rA', key = accesskey)
current_user = self.model.get(data_model.Key(protocol.STRUCT_ID_GLOBAL, protocol.MEMBER_ID_CURRENT_USER, 0, 0), self.MAC)
accesskey = data_model.Key(protocol.STRUCT_ID_PRESET_GLOBAL, protocol.MEMBER_ID_USER_ACCESS_RIGHTS, 0, current_user)
self.remote_link.set_get_key(accesskey)
self.waitForSync('cu.rA', key = accesskey)
def get_access(self):
try:
if mytime.clock() - self.my_start_time > 10:
skip_retry = True
else:
skip_retry = False
except:
skip_retry = False
accessrights = 0
current_user = 0
try:
if self.MAC[:4] in ('DEMO', 'GRPdeactivated', 'VN::'):
self.full_access = True
user_levels = {
one_unit.app.demo_locked_password: protocol.uLocked,
one_unit.app.demo_user_password: protocol.uUser,
one_unit.app.demo_admin_password: protocol.uAdmin,
one_unit.app.demo_developer_password: protocol.uDeveloper }
accessrights = 0xFFFFFFFFL
try:
current_user = user_levels[one_unit.app.check_password]
except:
current_user = protocol.uUser
self.accessrights = accessrights
preset_accessrights = 0xFFFFFFFFL
self.preset_accessrights = preset_accessrights
if self.active_unit.link_type == 'USB' and self.MK2 == True:
if current_user < protocol.uAdmin:
current_user = protocol.uAdmin
if one_unit.app.always_show_full_graphics == True:
accessrights |= protocol.arShowFullSkin
self.current_user = current_user
self.a