LibreOffice 7.1 Hjelp
Ved siden av tilordne makroer til hendelser , kan man overvåke LibreOffice-dokumenthendelser. Applikasjonsprogrammeringsgrensesnitt (API) kringkastere er ansvarlige for å kalle opp hendelsesskript. I motsetning til lyttere som må ha definert alle støttede metoder, selv om de ikke brukes, krever dokumentovervåkere bare to metoder ved siden av lenkede hendelseskript.
Overvåking illustreres her for Basic og Python ved hjelp av objektorientert programmering. Å tilordne OnLoad script, til Åpne Dokument hendelsen, er nok til å starte og avslutte dokumentovervåking. -menyen -fanen brukes til å tilordne begge skriptene.
Å avskjære hendelser hjelper deg med å sette skript før og etter forhold, for eksempel å laste inn og laste ned biblioteker eller spore skriptbehandling i bakgrunnen. Access2Base Sporing -modulbruk illustrerer den andre konteksten.
Overvåkning av hendelser starter fra objektinstansering og stopper til slutt når Python slipper objektet. Hevede hendelser rapporteres ved å bruke Access2Base konsollen.
OnLoad og OnUnload -hendelser kan benyttes til å angi og deaktivere Python-programbanen. De beskrives som Åpne dokumenter og Dokument lukket .
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import os.path, uno, unohelper
from com.sun.star.document import DocumentEvent, \
XDocumentEventListener as AdapterPattern
from com.sun.star.lang import EventObject
klasse UiDocument(unohelper.Base, AdapterPattern):
""Overvåk dokumenthendelser""
'''
tilpasset fra 'Python script for å overvåke OnSave event' ved
https://forum.openoffice.org/en/forum/viewtopic.php?t=68887
'''
def __init__(self):
"" "Overvåkning av dokumenthendelser" ""
'' 'rapport ved bruk av Access2Base.Sporings-konsoll ELLER
rapport i 1. ark, første kolonne for Calc-dokumenter '''
ctx = uno.getComponentContext()
smgr = ctx.getServiceManager()
desktop = smgr.createInstanceWithContext(
'com.sun.star.frame.Desktop' , ctx)
self.doc = desktop.CurrentComponent
#self.row = 0 # avkommenter for Calc-dokumenter
Console.setLevel("DEBUG")
self.listen () # Begynn å overvåke dok. hendelser
@property
def Filename(self) -> str:
sys_filename = uno.fileUrlToSystemPath(self.doc.URL)
return os.path.basename(sys_filename)
def setCell(self, calcDoc, txt: str):
"""Output doc. Hendelser i første kolonne i et Calc regneark" ""
sheet = calcDoc.getSheets().getByIndex(0)
sheet.getCellByPosition(0,self.row).setString(txt)
self.row = self.row + 1
def listen (self, * args): # OnLoad / OnNew tidligst
"""Start dokument. Overvåkning av hendelser"""
self.doc.addDocumentEventListener(self)
Console.log ("INFO", "Dokumenthendelser logges", Aktiv)
def sov(selv, * args): # OnUnload senest (valgfritt)
""" Stopp dok.-hendelsesovervåking """
self.doc.removeDocumentEventListener(self)
Konsoll.log ("INFO", "Dokumenthendelser er logget", Sant)
def documentEventOccured(self, event: DocumentEvent):
""" Oppfanger alle dok- hendelser """
#self.setCell(event.Source, event.EventName) # kun for Calc-dokument
Console.log("DEBUG",
event.EventName+" in "+self.Filename,
False)
def disposing(self, event: EventObject):
""" Frislipp alle aktiviteter """
self.sleep()
Console.show()
def OnLoad(*args): # 'Open Document'-hendelse
listener = UiDocument() # Initiates listening
def OnUnload(*args): # «Dokument har blitt lukket»-hendelse
send # (valgfritt) utført når det avsluttes
g_exportedScripts = (OnLoad,)
from com.sun.star.script.provider import XScript
class Console():
"""
(Bak/For) grunnkonsoll for å rapportere / logge programkjøring.
"""
@staticmethod
def trace(*args,**kwargs):
"""Skriv ut frie gjenstandsliste til konsollen"""
scr = Console._a2bScript(script='DebugPrint', module='Compatible')
scr.invoke((args),(),())
@staticmethod
def log(level: str, text: str, msgBox=False):
"""Legg loggmelding til konsollen, valgfri brukerspørring """
scr = Console._a2bScript(script='TraceLog')
scr.invoke((level,text,msgBox),(),())
@staticmethod
def setLevel(logLevel: str):
"""Sett nedre grense for loggmeldinger """
scr = Console._a2bScript(script='TraceLevel')
scr.invoke((logLevel,),(),())
@staticmethod
def show():
""" Vis konsollinnhold/dialog """
scr = Console._a2bScript(script='TraceConsole')
scr.invoke((),(),())
@staticmethod
def _a2bScript(script: str, library='Access2Base',
module='Trace') -> XScript:
''' Grab application-based Basic script '''
sm = uno.getComponentContext().ServiceManager
mspf = sm.createInstanceWithContext(
"com.sun.star.script.provider.MasterScriptProviderFactory",
uno.getComponentContext())
scriptPro = mspf.createScriptProvider("")
scriptName = "vnd.sun.star.script:"+library+"."+module+"."+script+"?language=Basic&location=application"
xScript = scriptPro.getScript(scriptName)
return xScript
Husk den feilstavede metoden documentEventOccured som arver en skrivefeil fra LibreOffice Application Programming Interface (API).
Start applikasjon og Lukk applikasjons hendelser kan henholdsvis brukes til å angi og deaktivere Python-sti for brukerskript eller LibreOffice-skript. På lignende måte kan dokumentbaserte Python-biblioteker eller -moduler lastes inn og frigjøres ved hjelp av Åpne dokument og Dockment lukket hendelser. Se Importere Python-moduler for mer informasjon.
The Onload script is assigned to Open document event using menu tab. Events monitoring starts from the moment a ConsoleLogger object is instantiated and ultimately stops when Basic engine releases it. OnLoad event loads necessary Basic libraries, while caught events are reported using Access2Base.Trace module.
REM controller.Events-modul
Option Explicit
Privat _obj As Object ' Kontroller.KonsollLogger-forekomst
Sub OnLoad(evt As com.sun.star.document.DocumentEvent) ' >> Open Document <<
_obj = New ConsoleLogger : _obj.Start(evt)
End Sub ' controller.OnLoad
' ----
REM kontroller.KonsollLogger-klassemodul
Option Explicit
Option Compatible
Option ClassModule
' ADAPTER design pattern object to be instantiated in « Open Document » event
Private Const UI_PROMPT = True
Private Const UI_NOPROMPT = False ' Set it to True to visualise documents events
' CONSTRUCTOR/DESTRUCTOR
Private Sub Class_Initialize()
End Sub ' controller.ConsoleLogger.Initialize
Private Sub Class_Terminate()
End Sub ' controller.ConsoleLogger.Terminate
' MEDLEMMER
Private _evtAdapter As Object ' com.sun.star.document.XDocumentEventBroadcaster
' PROPERTIES
Private Property Get FileName As String
''' Systemavhengig filnavn '''
Const _LIBRARY = "Tools" : With GlobalScope.BasicLibraries
If Not .IsLibraryLoaded(_LIBRARY) Then .LoadLibrary(_LIBRARY)
End With
Filename = Tools.Strings.FilenameOutofPath(ThisComponent.URL)
End Property ' controller.ConsoleLogger.Filename
' METODER
Private Sub _documentEventOccured(evt As com.sun.star.document.DocumentEvent)
''' Overvåking av dokumenthendelser '''
Access2Base.Trace.TraceLog("DEBUG", _
evt.EventName &" in "& Filename(evt.Source.URL), _
UI_NOPROMPT)
Select Case evt.EventName
Case "OnUnload" : _Stop(evt)
End Select
End Sub ' controller.ConsoleLogger._documentEventOccured
Private Sub _disposing(evt As com.sun.star.lang.EventObject)
End Sub ' controller.ConsoleLogger.disposing
Public Sub Start(Optional evt As com.sun.star.document.DocumentEvent)
''' Igangsetting av dokumenthendelseslogging '''
Const _LIBRARY = "Access2Base" : With GlobalScope.BasicLibraries
If Not .IsLibraryLoaded(_LIBRARY) Then .LoadLibrary(_LIBRARY)
End With : Access2Base.Trace.TraceLevel("DEBUG")
Access2Base.Trace.TraceLog("INFO", _
IIf(IsMissing(evt),"",evt.EventName & "-") & "Dokumenthendelser logges", _
UI_PROMPT)
_evtAdapter = CreateUnoListener( "_", "com.sun.star.document.XDocumentEventListener" )
ThisComponent.addDocumentEventListener( _evtAdapter )
End Sub ' controller.ConsoleLogger.Start
Private Sub _Stop(Optional evt As com.sun.star.document.DocumentEvent)
''' Avslutt loggføring av dokumenthendelser '''
ThisComponent.removeDocumentEventListener( _evtAdapter )
Access2Base.Trace.TraceLog("INFO", _
IIf(IsMissing(evt),"",evt.EventName & "-") & "Dokumenthendelser er loggført", _
UI_PROMPT)
Access2Base.Trace.TraceConsole() ' Captured events dialog
End Sub ' controller.ConsoleLogger._Stop
' EVENTS
' Koden din for håndterte hendelser lagres her
Vær oppmerksom på den feilstavede metoden _documentEventOccured som arver en skrivefeil fra LibreOffice Application Programming Interface (API).
Kringkaster-API-objektet inneholder listen over hendelser den er ansvarlig for:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uno, apso_utils as ui
def displayAvailableEvents():
"" "Vis dokumenthendelser" ""
'''
tilpasset fra DisplayAvailableEvents () av A. Pitonyak
https://forum.openoffice.org/en/forum/viewtopic.php?&t=43689
'''
ctx = XSCRIPTCONTEXT.getComponentContext()
smgr = ctx.ServiceManager
geb = smgr.createInstanceWithContext(
"com.sun.star.frame.GlobalEventBroadcaster", ctx)
events = geb.Events.getElementNames()
ui.msgbox('; '.join(events))
g_exportedScripts = (displayAvailableEvents,)
Alternativ Python Script Organizer (APSO) utvidelse brukes til å gjengi hendelsesinformasjon på skjermen.
Sub DisplayAvailableEvents
'''Vis dokumenthendelser'''
Dim geb As Object ' com.sun.star.frame.GlobalEventBroadcaster
Dim events() As String
geb = CreateUnoService("com.sun.star.frame.GlobalEventBroadcaster")
events = geb.Events.ElementNames()
MsgBox Join(events, "; ")
End Sub