mmm... A questo punto vale la pena condividere un attimo il mio modo di fare, in maniera che altri possano valutarlo, adottarlo e/o correggerlo.
In pratica io edito gli script di Python al volo avviandoli direttamente da IDE di Basic con Libreoffice, senza necessariamente riavviare tutto, nel modo che provo ad esporre qui.
Intanto premetto che sto sviluppando LeenO (leeno.org) e sto iniziando ad implementare qualche riga in python per la grande versatilità che offre.
Trattandosi di codice che finisce poi pacchettizzato in formato OXT, ho indicato in
manifest.xml, con le altre, la seguente riga:
Codice: Seleziona tutto
<manifest:file-entry manifest:media-type="application/vnd.sun.star.framework-script" manifest:full-path="pyLeenO"/>
in cui
pyLeenO è la subdir dell'estensione che ospita tutti i file *.py
In Basic ho questo codice:
Codice: Seleziona tutto
Function LeenO_Path
If NOT GlobalScope.BasicLibraries.isLibraryLoaded( "Tools" ) Then
GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
End If
Dim pip As Object, extensionLocation As String
Const extensionIdentifier = "org.giuseppe-vizziello.leeno"
' Const extensionIdentifier = "put the identifier value from the description.xml here"
pip = GetDefaultContext.getValueByName("/singletons/com.sun.star.deployment.PackageInformationProvider")
extensionLocation = pip.getPackageLocation(extensionIdentifier)
' display a human readable address
' MsgBox(ConvertFromURL(extensionLocation)
sURL = (ConvertFromURL(extensionLocation))
' LeenO_Path = FileNameoutofPath(sURL)
LeenO_Path = extensionLocation ' full path
End Function
rem ----------------------------------------------------------------------
Sub Script_py
'xray StarDesktop.getCurrentFrame.getContainerWindow.getToolkit
rem RIF: http://bit.ly/1b4d3dF
Dim MasterScriptProviderFactory as Object
Dim MasterScriptProvider as Object
Dim Script as Object
Dim Url as String
' Dim PythonResult as object
sName = FileNameoutofPath(LeenO_Path) 'nome file
'Print sName
sModulo = "FormulaSemplice.py"
sFunzione = "$oMacroTest1"
Url = "vnd.sun.star.script:" & sName & "|pyLeenO|" & sModulo & sFunzione &"?language=Python&location=user:uno_packages"
'Print Url
MasterScriptProviderFactory = createUnoService("com.sun.star.script.provider.MasterScriptProviderFactory")
MasterScriptProvider = MasterScriptProviderFactory.createScriptProvider("")
Script = MasterScriptProvider.getScript(Url)
'xray Script
Script.invoke(Array(),Array(),Array())
' PythonResult = Script.invoke(Array(),Array(),Array())
End Sub
A questo punto posso editare con Geany, o altro editor avanzato, il codice Python ed avviarlo al volo da IDE di Basic da
Script_py.
Preciso che
LeenO_Path mi serve ad individuare di volta in volta in nome della dir di installazione dell'estensione che varia per via del timestamp che gli metto in fase di pacchettizzazione.
Ovviamente non è tutta farina del mio sacco... mi sono solo limitato ad assemblare del codice preso in giro.
Così facendo però, mi par di capire che
oEvent messo in
def oMacroTest1(oEvent): non mi può aiutare.
Ho alternative o sono costretto ad avviare lo script Python tramite un evento? Ne sarei in difficoltà.