CreateUnoListener Function
CreateUnoListener luo kuuntelijailmentymän.
Useat Uno-rajapinnat antavat rekisteröidä kuuntelijoita erityiseen kuuntelijarajapintaan (listener interface). Tämä tekee mahdolliseksi kuunnella määrättyjä tapahtumia ja kutsua sopivaa kuuntelijametodia. CreateUnoListener-funktio odottaa kutsuttua kuuntelijarajapintaa ja välittää sitten rajapintaan olion, jota rajapinta tukee. Tämä olion välitetään sitten metodille kuuntelijan rekisteröimiseksi.
Syntaksi:
oListener = CreateUnoListener( Prefixname, ListenerInterfaceName )
Esimerkki:
Seuraavat esimerkit perustuvat Basicin kirjasto-olioihin.
Dim oListener
oListener = CreateUnoListener( "ContListener_","com.sun.star.container.XContainerListener" )
CreateUnoListener-metodi vaatii kaksi parametriä. Ensimmäinen on etuliite ja se on selitetty yksityiskohtaisesti alempana. Toinen on käytettävän kuuntelijan täydellinen nimi.
Sitten pitää kuuntelija lisätä yleislähettäjäolioon. Tämä tehdään kutsumalla kuuntelijan lisäämiseen sopivaa metodia. Näiden metodien muoto on aina "addFooListener", missä täyte "Foo" on kuuntelijarajapinnan tyyppi, ilman kirjainta 'X'. Tässä esimerkissä addContainerListener-metodia on kutsuttu rekisteröimään XContainerListener:
Dim oLib
oLib = BasicLibraries.Library1 ' Library1 pitää olla olemassa!
oLib.addContainerListener( oListener ) ' Rekisteröidään kuuntelija
Kuuntelija on nyt rekisteröity. Kun tapahtuma sattuu, vastaava kuuntelija kutsuu sopivaa metodia com.sun.star.container.XContainerListener-rajapinnasta.
Etuliite kutsuu rekisteröityjä kuuntelijoita Basic-aliohjelmista. Basicin ajonaikainen järjestelmä etsii Basic-aliohjelmia ja -funktioita, joilla on nimi "PrefixListenerMethode" ja löydettäessä kutsuu niitä. Muutoin tapahtuu ajonaikainen virhe.
Tässä esimerkissä kuuntelijarajapinta käyttää seuraavia metodeja:
-
disposing:
-
kuuntelijan kantarajapinta (com.sun.star.lang.XEventListener): kantarajapinta kaikille kuuntelijarajapinnoille
-
elementInserted:
-
com.sun.star.container.XContainerListener-rajapinnan metodi
-
elementRemoved:
-
com.sun.star.container.XContainerListener-rajapinnan metodi
-
elementReplaced:
-
com.sun.star.container.XContainerListener-rajapinnan metodi
Tässä esimerkissä etuliite on ContListener_. Seuraavat aliohjelmat pitää siksi olla toteutettu Basicissa:
-
ContListener_disposing
-
ContListener_elementInserted
-
ContListener_elementRemoved
-
ContListener_elementReplaced
Jokaiselle kuuntelijatyypille on olemassa tapahtuman rakennetyyppi, jossa on tapahtumaan liittyvää tietoa. Kun kuuntelijametodia on kutsuttu, tapahtuman ilmentymä välitetään metodille parametrinä. Basicin kuuntelijametodit voivat myös kutsua näitä olioita, mikäli sopiva parametri on välitetty Sub-rutiinin esittelyssä. Esimerkki:
Sub ContListener_disposing( oEvent )
MsgBox "disposing"
MsgBox oEvent.Dbg_Properties
End Sub
Sub ContListener_elementInserted( oEvent )
MsgBox "elementInserted"
MsgBox oEvent.Dbg_Properties
End Sub
Sub ContListener_elementRemoved( oEvent )
MsgBox "elementRemoved"
MsgBox oEvent.Dbg_Properties
End Sub
Sub ContListener_elementReplaced( oEvent )
MsgBox "elementReplaced"
MsgBox oEvent.Dbg_Properties
End Sub
Tapahtumaolion parametrejä ei tarvitse sisällyttää, jos oliota ei käytetä:
' Pieni Sub-rutiinilla toteutettu hävitys
Sub ContListener_disposing
End Sub
Kuuntelijametodit pitää aina olla toteutettuja (implemented), jolloin vältetään Basicin ajonaikaiset virheet.