Tulong sa LibreOffice 24.8
Sa tabi pagtatalaga ng mga macro sa mga kaganapan o paglikha ng mga tagapakinig ng kaganapan , maaaring gumamit ng mga tagapangasiwa ng dialog, na ang prinsipyo ay tukuyin ang mga keyword ng UNO, o mga pamamaraan, na nakamapa sa mga kaganapang dapat abangan. Ang tagapangasiwa ng kaganapan ay responsable para sa pagpapatupad ng mga pamamaraan gamit ang vnd.sun.star.UNO:<method_name> protocol. Hindi tulad ng mga tagapakinig na nangangailangang tukuyin ang lahat ng sinusuportahang pamamaraan, kahit na hindi ginagamit, ang mga tagapangasiwa ng dialog ay nangangailangan lamang ng dalawang pamamaraan sa ibabaw ng nilalayong control hook script.
Ang mga bentahe ng diskarteng ito ay:
Naka-pack ito ng code na humahawak sa mga macro na hinimok ng kaganapan,
pinalamutian nito ang mga kaganapan mula sa mga pangalan ng macro na nagpapadali sa pagpapanatili o pag-update, lalo na kapag naglilipat ng mga macro o module.
Ang mekanismong ito ay inilalarawan dito para sa Basic at Python na mga wika gamit ang isang imported na kopya ng Access2Base dlgTrace diyalogo. Inalis ang exception handling at localization para sa kalinawan.
I-export Access2Base dlgTrace dialog at i-import ito sa MyLib aklatan ng aplikasyon.
Sa loob ng control properties pane ng Editor ng Dialog , gamitin ang tab na Mga Kaganapan upang palitan ang mga macro assignment sa pamamagitan ng mga bahaging takdang-aralin, at i-type ang nilalayong mga pangalan ng pamamaraan:
Itakda Dump sa file pangalan ng paraan ng bahagi ng dialog button sa _dump2File
Opsyonal na tukuyin txtTracelog pinindot ang key at pinindot ang pindutan ng mouse sa mga kaganapan sa mga pangalan ng paraan ng bahagi bilang _openHelp
Opsyonal na tukuyin Ok button na tumatanggap ng pangalan ng paraan ng bahagi ng kaganapan ng focus bilang onOkHasfocus
Dapat banggitin ng mga kaganapang itinalagang aksyon ang vnd.sun.star.UNO: protocol.
createDialogWithHandler paraan ng com.sun.star.awt.DialogProvider2 service ay ginagamit upang itakda ang dialog at ang handler nito. Ang handler ang may pananagutan sa pagpapatupad com.sun.star.awt.XDialogEventHandler interface.
Ang lahat ng mga pangalan ng paraan ng bahagi ay dapat na tahasang ipahayag kapag gumagamit ng isang tagapangasiwa ng dialog.
Sa halimbawang ito ang dialog ay matatagpuan sa computer.
# -*- 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 Console Handler """
''' hinango mula sa « Créer un dialogue avec gestionnaire d'événements » ni 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):
""" Lumikha ng isang Dialog mula sa lokasyon nito """
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=''):
''' Pangit na MsgBox '''
import msgbox
mb = msgbox.MsgBox(uno.getComponentContext())
mb.addButton('Howdy')
mb.show(prompt,0,title)
def ConsoleHandler():
Console().show()
g_exportedScripts = (ConsoleHandler,)
Gaya ng inaasahan, onOkHasFocus ang nawawalang pamamaraan ay nagtatapon ng isang pagbubukod.
Sumangguni sa Tumatawag si Python sa LibreOffice Basic pahina para sa getBasicScript karaniwang paglalarawan at para sa mga detalye tungkol sa cross-language scripting execution.
Sa halimbawang ito ang dialog ay naka-embed sa isang dokumento, at maaaring pantay na matatagpuan sa computer.
' <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)) ' kung doc-embedded na dialog
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, _
paraan Bilang String) Bilang Boolean
''' 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) kung computer-based na dialog
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
' hinango mula sa « Créer un dialogue avec gestionnaire d'événements » ni JM Zambon
' https://wiki.openoffice.org/wiki/FR/Documentation/Python/Creating_Dialog_with_Handler
Gaya ng inaasahan, onOkHasFocus ang nawawalang pamamaraan ay nagtatapon ng isang pagbubukod.