Paglikha ng isang Dialog Handler

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:

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.

Pagtatalaga ng mga pamamaraan ng Dialog

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:

Dapat banggitin ng mga kaganapang itinalagang aksyon ang vnd.sun.star.UNO: protocol.

Paglikha ng handler

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.

warning

Ang lahat ng mga pangalan ng paraan ng bahagi ay dapat na tahasang ipahayag kapag gumagamit ng isang tagapangasiwa ng dialog.


Gamit ang Python

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,)
          
      
note

Gaya ng inaasahan, onOkHasFocus ang nawawalang pamamaraan ay nagtatapon ng isang pagbubukod.


tip

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.


Gamit ang LibreOffice Basic

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
      
note

Gaya ng inaasahan, onOkHasFocus ang nawawalang pamamaraan ay nagtatapon ng isang pagbubukod.


Mangyaring suportahan kami!