Įvykių dalyvių sukūrimas

Dialogų, dokumentų, formų ar grafinių valdiklių įvykiai gali būti susieti su makrokomandomis, kurios vadinamos įvykių programavimu. Dažniausias metodas susieti įvykius su makrokomandomis yra Įvykiai tab in Priemonės → Pritaikyta meniu ir Dialogo tvarkytuvas valdymo savybių nustatymas iš Priemonės → Makrokomandos → Organizuoti dialogus… meniu.

Grafinius artefaktus, klaviatūros įvestis, pelės judesius ir kitas žmogaus ar mašinos sąveikas galima valdyti naudojant UNO agentus, kurie stebi vartotojo elgesį. Agentai yra dinamiškos programos kodo alternatyvos makrokomandoms. Galima sukurti tiek UNO agentų, kiek yra įvykių, kuriuos reikia stebėti. Vienas agentas taip pat gali valdyti kelis vartotojo sąsajos valdiklius.

Sukurti įvykių agentą

Agentai ausiejami su dialogo lange valdomais valdikliais, taip pat su dokumentų ar įvykių formavimu. Agentai taip pat naudojami kuriant vykdymo dialogo langus arba pridedant valdiklius prie dialogo langelio.

Šiuo pavyzdžiu sukuriamas agentas, skirtas valdyti Mygtukas1 dialogo lange Dialogas1, kuris yra Standartinis bibliotekoje.

Naudojant „Python"


         # -*- coding: utf-8 -*-
         from __future__ import unicode_literals
             
         import uno, unohelper
         from com.sun.star.awt import XActionListener
         from com.sun.star.awt import ActionEvent
         from com.sun.star.lang import EventObject
         from com.sun.star.ui.dialogs.ExecutableDialogResults \
             import OK, CANCEL
         import msgbox as util
             
         _MY_BUTTON =  "Button1"
         _MY_LABEL = '„Python“ agentai…'
         _DLG_PROVIDER = "com.sun.star.awt.DialogProvider"
             
         def Main(*args):
             ui = createUnoDialog("Standard.Dialog1", embedded=True)
             ui.Title = "Python X[any]Listener"
             ctl = ui.getControl(_MY_BUTTON)
             ctl.Model.Label = _MY_LABEL
             act = ActionListener()
             ctl.addActionListener(act)
             rc = ui.execute()
             if rc == OK:
                 MsgBox("Vartotojas dėkoja dialogui.")
             elif rc == CANCEL:
                 MsgBox("Vartotojas nutraukė dialogą.")
             ui.dispose()  # ui.endExecute
             ctl.removeActionListener(act)
             
         def createUnoDialog(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.createDialog("vnd.sun.star.script:"+libr_dlg+location)
             return dlg
             
         class ActionListener(unohelper.Base, XActionListener):
             """ Atsižvelgti į & count mygtuko spustelėjimus """
             def __init__(self):
                 self.count = 0
             
             def actionPerformed(self, evt: ActionEvent):
                 self.count = self.count + 1
                 #mri(evt)
                 if evt.Source.Model.Name == _MY_BUTTON:
                     evt.Source.Model.Label = _MY_LABEL+ str( self.count )
             return
             
             def disposing(self, evt: EventObject):  # privaloma paprogramė
                 pass
             
         def MsgBox(txt: str):
             mb = util.MsgBox(uno.getComponentContext())
             mb.addButton("Ok")
             mb.show(txt, 0, "Python")
             
         g_exportedScripts = (Main,)
      

msgbox.py in {installation}/program/ kataloge yra keletas mygtuko agentų pavyzdžių.

Naudojant „LibreOffice Basic“


         Option Explicit
             
         Const MY_LIBRARY = "Standard", MY_DIALOG = "Dialog1", MY_BUTTON = "Button1"
         Const MY_LABEL = "„Basic“ agentai…"
         Dim count As Integer
             
         Sub Main
             Dim libr As Object ' com.sun.star.script.XLibraryContainer
             Dim dlg As Object
             Dim ui As Object  ' stardiv.Toolkit.UnoDialogControl
             Dim ctl As Object ' stardiv.Toolkit.UnoButtonControl
             Dim act As Object ' com.sun.star.awt.XActionListener
             Dim rc As Object : rc = com.sun.star.ui.dialogs.ExecutableDialogResults
             
             BasicLibraries.LoadLibrary(MY_LIBRARY)
             libr = DialogLibraries.GetByName(MY_LIBRARY)
             dlg = libr.GetByName(MY_DIALOG)
             ui = CreateUnoDialog(dlg)
             ui.Title = "Basic X[any]Listener example"
             count = 0
             ctl = ui.GetControl(MY_BUTTON)
             ctl.Model.Label = MY_LABEL
             act = CreateUnoListener("awt_", "com.sun.star.awt.XActionListener")
             ctl.addActionListener(act)
             Select Case ui.Execute
                 Case rc.OK : MsgBox "Vartotojas įvertina dialogą.",, "Basic"
                 Case rc.CANCEL : MsgBox "Vartotojas nutraukia dialogą.",, "Basic"
             End Select
             ui.dispose ' ui.endExecute()
             ctl.removeActionListener(act)
         End Sub
             
         Private Sub awt_actionPerformed(evt As com.sun.star.awt.ActionEvent)
             "' Atsižvelgti į & count mygtuko spustelėjimus '"
             With evt.Source.Model
                 If .Name = MY_BUTTON Then
                     count = count + 1
                     .Label = MY_LABEL+Cstr(count)
                 End If
             End With
         End Sub ' awt_actionPerformed
             
         Private Sub awt_disposing(evt As com.sun.star.lang.EventObject) ' mandatory Sub
             ' jūsų kodas eina čia
         End Sub ' awt_disposing
      

Kitų įvykių agentai

Agentai paprastai programuoja drauge su dialogo atvėrimas. Galimi įvairūs agentų metodai, pavyzdžiui, dialogų įvykių tvarkytuvai arba dokumentų ar formų įvykių stebėsena.

Paremkite mus!