LibreOffice 25.2 Hjelp
I tillegg til tilordna makroar til hendingar eller oppretta hendingslyttarar kan du bruka handsamarane for dialogvindauge som har som prinsipp å definera UNO-nøkkelord eller -metodar som er knytte til hendingar som skal overvakast. Hendingshandsamaren er ansvarleg for å utføre metodar ved å bruka protokollen vnd.sun.star.UNO: method_name. I motsetning til lyttarar, som må definere alle støtta metodar, treng handsamaren for dialogvindauge berre to metodar i tillegg til dei tiltenkte control hook skripta.
Fordelane med denne tilgangen er:
Koden som handsamar handlingsdrivne makroar vert pakka,
det løyser hendingar frå makronamn, noko som gjer vedlikehald eller oppdatering enklare, spesielt når du flyttar makroar eller modular.
Denne mekanismen vert med dette illustrert her for Basic- og Python-språk ved hjelp av ein importert kopi av dialogvindauget Access2BasedlgTrace. Unntakshandsaming og lokalisering er ikkje teke med for å gjera resultatet tydlegare..
Eksporterer dialogvindauget Access2Base dlgTrace og importerer det til programbiblioteket MyLib.
I panelet for kontrolleigenskapar i Dialog Editor brukar du fana hendingar til å erstatta makro-tilvisingane med komponent-tilvisingar og skriv inn dei ønskte metodenamna.
Set metodenamnet for dialogknappen Dump to file til _dump2File
Eventuelt kan du definera metodenamna for hendingskomponenten «tast trykt ned» txtTracelog og den trykte museknappen som _openHelp
Du kan også definera at knappen Ok får fokus med komponentmetodenamnet onOkHasfocus
Hendingar som har handlingar knytt til seg, bør nemna protokollen vnd.sun.star.UNO:.
Metoden createDialogWithHandler for com.sun.star.awt.DialogProvider2-tenesta vert brukt for å setja dialogvindauget og handsamaren. Handsamaren er ansvarleg for å implementera brujkargrensesnittet com.sun.star.awt.XDialogEventHandler.
Når du brukar ein handsamar for dialogvindauge, må alle namna på komponentmetodar deklarerast eksplisitt.
I dette eksempelet er dialogvindauget plassert på datamaskinen.
      # -*- 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 konsollhandsamar """
          ''' henta og tilpassa frå « Créer un dialogue avec gestionnaire d'événements » av 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):
              """ Laga eit dialogvindauge ut frå kvar det er plassert """
              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=''):
          ''' Stygg MsgBox '''
          import msgbox
          mb = msgbox.MsgBox(uno.getComponentContext())
          mb.addButton('Howdy')
          mb.show(prompt,0,title)
          
      def ConsoleHandler():
          Console().show()
          
      g_exportedScripts = (ConsoleHandler,)
          
      Som venta utløyser den manglande metoden onOkHasFocus eit unntak.
Sjå sida Python-oppkall til LibreOffice Basic for omtale av rutinane i getBasicScript og detaljer om korleis ein kan laga skripta på tvers av programmeringsspråka.
I dette eksempelet er dialogvindauget innebygd i eit dokument, men kan også plasserast i datamaskinen.
      ' <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)) 'viss dialogvindauget er innebygd i dokumentet
          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, _
              method As String) As 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) viss dialogvindauget er i datamaskinen
              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
          
      ' tilpassa frå « Créer un dialogue avec gestionnaire d'événements » av JM Zambon
      ' https://wiki.openoffice.org/wiki/FR/Documentation/Python/Creating_Dialog_with_Handler
      Som venta gjev den manglande metoden onOkHasFocus eit unntak.