LibreOffice 24.8 žinynas
Šalia makrokomandų priskyrimas įvykiams arba kuriant įvykių klausytojus, galima naudoti dialogo langų tvarkykles, kurių principas yra nustatyti UNO raktinius žodžius ar metodus, kurie yra susieti su stebimais įvykiais. Įvykių tvarkytojas yra atsakingas už metodų vykdymą naudojant vnd.sun.star.UNO:<method_name> protokolą. Skirtingai nuo dalyvių, kuriems reikia apibrėžti visus palaikomus metodus, net jei jie ir nenaudojami, dialogo tvarkyklėms reikia tik dviejų metodų virš esamų valdymo skriptų.
Šio požiūrio pranašumai yra šie:
Jis supakuoja kodą įvykių valdomoms makrokomandoms tvarkyti,
jis dekoreliuoja įvykius iš makrokomandų pavadinimų, o tai palengvina priežiūrą ar atnaujinimus, ypač perkeliant makrokomandas ar modulius.
Šis mechanizmas yra iliustruojamas „Basic“ ir „Python“ kalboms naudojant importuotą dialogo Access2Base dlgTrace kopiją. Aiškumo sumetimais išimčių tvarkymas ir lokalizavimas praleidžiami.
Exportuoti Access2Base dlgTrace dialogą ir importuoti jį į MyLib taikomąją biblioteką.
Dialogo tvarkytuvės valdymo savybių srityje naudokite skirtuką „Įvykiai“, kad pakeistumėte makrokomandas komponentų priskyrimais, ir numatytuose metoduose įveskite pavadinimus:
Nustatykite Persiųsti į failą dialogo mygtuko komponento metodo vardą _dump2File
Pasirinktinai apibrėžkite txtTracelog paspausto mygtuko ir paspausto pelės klavišo įvykių komponentų metodų vardus _openHelp
Pasirinktinai apibrėžkite Gerai mygtuko, gaunančio židinio įvykio komponento metodą, pavadinimą onOkHasfocus
Įvykiuose, kuriems priskirti veiksmai, turėtų būti paminėtas vnd.sun.star.UNO: protokolas.
createDialogWithHandler metodo com.sun.star.awt.DialogProvider2 paslauga naudojama dialogui nustatyti ir jam tvarkyti. Tvarkytuvas valdo įgyvendinimo com.sun.star.awt.XDialogEventHandler sąsają.
Visi komponentų metodų pavadinimai turi būti išreikštai aprašyti naudojant dialogo tvarkytuvą.
Šiame pavyzdyje dialogo langas yra kompiuteryje.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uno, unohelper
from com.sun.star.awt import XDialogEventHandler
_DLG_PROVIDER = "com.sun.star.awt.DialogProvider2"
class Console(unohelper.Base, XDialogEventHandler):
""" Access2Base konsolės tvarkytuvas """
''' « Créer un dialogue avec gestionnaire d'événements » adaptavo JM Zambon
https://wiki.openoffice.org/wiki/FR/Documentation/Python/Creating_Dialog_with_Handler '''
def show(self):
dialog = self.getDialog("MyLib.dlgTrace", embedded=True)
dialog.Title = "Konsole"
dialog.execute()
def callHandlerMethod(self, dialog, event, method):
if method == '_dump2File':
event.Source.setLabel("dump requested")
scr = getBasicScript(script="_DumpToFile", module="Trace",
library='Access2Base')
scr.invoke((event,), (), ())
elif method == '_openHelp':
_msgbox('Not yet implemented')
dialog.endDialog(1)
else:
return False
def getSupportedMethodNames(self):
return ('_dump2File', '_openHelp')
def getDialog(self, libr_dlg: str, embedded=False):
""" Sukurti dialogą iš vietos """
smgr = XSCRIPTCONTEXT.getComponentContext().ServiceManager
if embedded:
model = XSCRIPTCONTEXT.getDocument()
dp = smgr.createInstanceWithArguments(_DLG_PROVIDER, (model,))
location = "?location=document"
else:
dp = smgr.createInstanceWithContext(_DLG_PROVIDER, ctx)
location = "?location=application"
dlg = dp.createDialogWithHandler("vnd.sun.star.script:"+libr_dlg+location, self)
return dlg
# def getBasicScript() # see note
def _msgbox(prompt='', title=''):
''' Negražus MsgBox '''
import msgbox
mb = msgbox.MsgBox(uno.getComponentContext())
mb.addButton('Howdy')
mb.show(prompt,0,title)
def ConsoleHandler():
Console().show()
g_exportedScripts = (ConsoleHandler,)
Kaip ir tikėtasi, onOkHasFocus trūkstamas metodas sudaro išimtį.
Nurodoma į „Python“ kreipinių į „LibreOffice Basic“ tinklalapį, esantį getBasicScript paprogramės apraše ir teikiant išsamesnę informaciją apie skriptų vykdymą keliomis kalbomis.
Šiame pavyzdyje dialogo langas yra įterptas į dokumentą ir jį taip pat galima rasti kompiuteryje.
' <MyLib>.<Handler> module
Public Sub Console_Show()
Dim dp as Object ' com.sun.star.awt.DialogProvider2
Dim dialog As Object ' com.sun.star.awt.XDialog, com.sun.star.awt.XDialogEventHandler
Dim eventHandler As Object ' com.sun.star.awt.XDialogEventHandler
dp = CreateUnoService("com.sun.star.awt.DialogProvider2")
dp.Initialize(Array(ThisComponent)) ' if doc-embedded dialogas
eventHandler = CreateUnoListener("Console_", "com.sun.star.awt.XDialogEventHandler")
dialog = dp.createDialogWithHandler("vnd.sun.star.script:MyLib.dlgTrace?location=document", eventHandler)
dialog.Title = "Konsole"
dialog.execute()
End Sub ' <Handler>.Console_Show()
Private Function Console_callHandlerMethod(dialog as Object, _
event As com.sun.star.document.DocumentEvent, _
metodas kaip eilutė) loginis
''' Intercept dialog events using .UNO protocol '''
Console_callHandlerMethod = True
Select Case method
Case "_dump2File"
event.Source.setLabel("dump requested")
With GlobalScope.BasicLibraries
If Not .IsLibraryLoaded("Access2Base") Then .LoadLibrary("Access2Base")
End With
Access2Base.Trace._DumpToFile
Case "_openHelp"
MsgBox "Not yet implemented",0 , "Howdy"
'dialog.endDialog(1) if computer-based dialogas
Case Else : Console_callHandlerMethod = False
End Select
End Function ' <Handler>.Console_callHandlerMethod
Private Function Console_getSupportedMethodNames()
Console_getSupportedMethodNames = Array("_dump2File", "_openHelp")
End Function ' <Handler>.Console _getSupportedMethodNames
' « Créer un dialogue avec gestionnaire d'événements » adaptavo JM Zambon
' https://wiki.openoffice.org/wiki/FR/Documentation/Python/Creating_Dialog_with_Handler
Kaip ir tikėtasi, onOkHasFocus trūkstamas metodas sudaro išimtį.