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>
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
from FPDF import *
|
||||
|
||||
class TOC(FPDF):
|
||||
def __init__(this, orientation='P',unit='mm',format='A4'):
|
||||
this._toc=[]
|
||||
this._numbering=0
|
||||
this._numberingFooter=0
|
||||
this._numPageNum=1
|
||||
FPDF.__init__(this,orientation,unit,format)
|
||||
|
||||
def AddPage(this,orientation=''):
|
||||
FPDF.AddPage(this,orientation)
|
||||
if(this._numbering):
|
||||
this._numPageNum+=1
|
||||
|
||||
def startPageNums(this):
|
||||
this._numbering=1
|
||||
this._numberingFooter=1
|
||||
|
||||
def stopPageNums(this):
|
||||
this._numbering=0
|
||||
|
||||
def numPageNo(this):
|
||||
return this._numPageNum
|
||||
|
||||
def TOC_Entry(this,txt,level=0):
|
||||
this._toc+=[{'t':txt,'l':level,'p':this.numPageNo()}]
|
||||
|
||||
def insertTOC(this,location=1,labelSize=20,entrySize=10,tocfont='Times',label='Table of Contents'):
|
||||
#make toc at end
|
||||
this.stopPageNums()
|
||||
this.AddPage()
|
||||
tocstart=this.page
|
||||
|
||||
this.SetFont(tocfont,'B',labelSize)
|
||||
this.Cell(0,5,label,0,1,'C')
|
||||
this.Ln(10)
|
||||
|
||||
for t in this._toc:
|
||||
#Offset
|
||||
level=t['l']
|
||||
if(level>0):
|
||||
this.Cell(level*8)
|
||||
weight=''
|
||||
if(level==0):
|
||||
weight='B'
|
||||
Str=t['t']
|
||||
this.SetFont(tocfont,weight,entrySize)
|
||||
strsize=this.GetStringWidth(Str)
|
||||
this.Cell(strsize+2,this.FontSize+2,Str)
|
||||
|
||||
#Filling dots
|
||||
this.SetFont(tocfont,'',entrySize)
|
||||
PageCellSize=this.GetStringWidth(str(t['p']))+2
|
||||
w=this.w-this.lMargin-this.rMargin-PageCellSize-(level*8)-(strsize+2)
|
||||
nb=w/this.GetStringWidth('.')
|
||||
dots=str_repeat('.',nb)
|
||||
this.Cell(w,this.FontSize+2,dots,0,0,'R')
|
||||
|
||||
#Page number
|
||||
this.Cell(PageCellSize,this.FontSize+2,str(t['p']),0,1,'R')
|
||||
|
||||
#grab it and move to selected location
|
||||
n=this.page
|
||||
n_toc = n - tocstart + 1
|
||||
last = []
|
||||
|
||||
#store toc pages
|
||||
for i in xrange(tocstart,n+1):
|
||||
last+=[this.pages[i]]
|
||||
|
||||
#move pages
|
||||
for i in xrange(tocstart-1,location-1,-1):
|
||||
#~ for(i=tocstart - 1;i>=location-1;i--)
|
||||
this.pages[i+n_toc]=this.pages[i]
|
||||
|
||||
#Put toc pages at insert point
|
||||
for i in xrange(0,n_toc):
|
||||
this.pages[location + i]=last[i]
|
||||
|
||||
def Footer(this):
|
||||
if(this._numberingFooter==0):
|
||||
return
|
||||
#Go to 1.5 cm from bottom
|
||||
this.SetY(-15)
|
||||
#Select Arial italic 8
|
||||
this.SetFont('Arial','I',8)
|
||||
this.Cell(0,7,str(this.numPageNo()),0,0,'C');
|
||||
if(this._numbering==0):
|
||||
this._numberingFooter=0
|
||||
Reference in New Issue
Block a user