A főbb felületek áttekintése

From Apache OpenOffice Wiki
Jump to: navigation, search
Book.png


Néhány Apache OpenOffice-felület megtalálható az Apache OpenOffice API több részében is. Adott feladatok metódusait definiálják, amelyek számos problémára alkalmazhatók. Az alábbiakban áttekintést találunk ezekről a leggyakoribb felületekről.

Az objektumok eredetéről az útmutató későbbi részében olvashatunk bővebben. Itt jelenleg csak az objektumoknak egy bizonyos megközelítése kerül ismertetésre, amelyekhez az Apache OpenOffice API néhány fő felületet biztosít.

Környezetfüggő objektumok létrehozása

Az Apache OpenOffice API két lehetőséget biztosít az objektumok létrehozásához. Az egyik a fejezet elején említett createUnoService függvényben található. A createUnoService létrehoz egy objektumot, amely univerzálisan használható. Az ilyen objektumok és szolgáltatások környezetfüggetlen szolgáltatásokként ismertek.

A környezetfüggetlen szolgáltatásokon felül vannak környezetfüggő szolgáltatások is, amelyek objektumai csak más objektumokkal együtt használhatók. Például egy táblázatdokumentum rajzobjektuma ezért csak ezzel a dokumentummal együtt létezhet.

A com.sun.star.lang.XMultiServiceFactory felület

A környezetfüggő objektumokat általában egy objektummetódus hozza létre, amelytől az objektum függ. Általában az XMultiServiceFactory felület által definiált createInstance metódust használjuk a dokumentumobjektumokban.

Az előbb említett rajzobjektum például létrehozható a következő módon, a táblázatobjektummal:

Dim RectangleShape As Object
RectangleShape = _
  Spreadsheet.createInstance("com.sun.star.drawing.RectangleShape")

A szöveges dokumentumban a bekezdéssablont is ugyanígy lehet létrehozni:

Dim Style as Object
Style = Textdocument.createInstance("com.sun.star.style.ParagraphStyle")

Név szerinti hozzáférés az alárendelt objektumokhoz

Az XNameAccess és az XNameContainer felülettel lehet elérni egy természetes nyelvi névvel az objektumokban lévő alárendelt objektumokat.

Míg az XNamedAccess lehetővé teszi a hozzáférést az egyes objektumokhoz, addig az XNameContainer végzi el az elemek beszúrását, módosítását és a törlését.

A com.sun.star.container.XNameAccess felület

Az alábbiakban a munkafüzet munkalapobjektuma mutat be egy példát az XNameAccess használatára. A program összefűzi egy munkafüzet lapjait. Az egyes lapokat a sheets objektumból az XNameAccess getByName metódusával érjük el:

Dim Sheets As Object
Dim Sheet As Object
 
Sheets = Spreadsheet.Sheets
Sheet = Sheets.getByName("Munkafüzet1")

A getElementNames metódus áttekintést nyújt az összes elem nevéről. Eredményként egy adatmezőt ad vissza, amely tartalmazza a neveket. A következő példa bemutatja, hogyan olvasható be és jeleníthető meg egy ciklussal egy munkafüzet összes elemneve.

Dim Sheets As Object
Dim SheetNames
Dim I As Integer
 
Sheets = Spreadsheet.Sheets
SheetNames = Sheets.getElementNames
 
For I=LBound(SheetNames) To UBound(SheetNames)
  MsgBox SheetNames(I)
Next I

Az XNameAccess felület hasByName metódusával megállapítható, hogy egy adott nevű alárendelt objektum létezik-e egy objektumban. Ezért a következő példa megjelenít egy üzenetet, amely tájékoztatja a felhasználót, hogy a Spreadsheet objektum tartalmaz-e egy Munkalap1 nevű lapot.

Dim Sheets As Object
 
Sheets = Spreadsheet.Sheets
If Sheets.HasByName("Munkalap1") Then
  MsgBox "A Munkalap1 elérhető."
Else
  MsgBox "A Munkalap1 nem érhető el."
End If

A com.sun.star.container.XNameContainer felület

A XNameContainer felület végzi el az alapobjektum alárendelt objektumainak beszúrását, törlését és módosítását. Az ezt elvégző metódusok a következők: insertByName, removeByName és replaceByName.

A következő példa ennek egy gyakorlati megvalósítása. Meghív egy szöveges dokumentumot, amely tartalmaz egy StyleFamilies objektumot, és ez használja a dokumentum bekezdéssablonjainak (ParagraphStyles) elérhetővé tételéhez.

Dim StyleFamilies As Object 
Dim ParagraphStyles As Object
Dim NewStyle As Object   
 
StyleFamilies = Textdoc.StyleFamilies
ParagraphStyles = StyleFamilies.getByName("ParagraphStyles")
ParagraphStyles.insertByName("NewStyle", NewStyle)      
ParagraphStyles.replaceByName("ChangingStyle", NewStyle)   
ParagraphStyles.removeByName("OldStyle")

Az insertByName sor beszúrja a NewStyle stílust ugyanilyen névvel a ParagraphStyles objektumba. A replaceByName sor módosítja a ChangingStyle stílust a NewStyle stílusra. Végül a removeByName metódus eltávolítja az OldStyle stílust a ParagraphStyles sablonból.

Index alapú hozzáférés az alárendelt objektumokhoz

Az XIndexAccess és az XIndexContainer felület használatával index alapján lehet hozzáférni az objektumokban található alárendelt objektumokhoz.

Az XIndexAccess felület rendelkezik az egyes objektumokhoz való hozzáféréshez szükséges metódusokkal. Az XIndexContainer rendelkezik az elemek beszúrásához és eltávolításához szükséges metódusokkal.

A com.sun.star.container.XIndexAccess felület

Az XIndexAccess tartalmazza a getByIndex és a getCount metódust az alárendelt objektumok meghívásához. A getByIndex visszaad egy adott indexű objektumot. A getCount megadja, hány objektum érhető el.

Dim Sheets As Object
Dim Sheet As Object
Dim I As Integer
 
Sheets = Spreadsheet.Sheets
 
For I = 0 to Sheets.getCount() - 1
  Sheet = Sheets.getByIndex(I)
  ' Munkalap szerkesztése
Next I

Ez a példa bemutat egy ciklust, amely végiglépdel az összes elérhető munkalapon, és menti mindegyik hivatkozását a Sheet objektumváltozóba. Ha indexekkel dolgozunk, ne felejtsük el, hogy a getCount az elemek számát adja vissza. Viszont a getByIndex metódusnál az elemek számozása 0-val kezdődik. Ezért a ciklusváltozó 0-tól getCount()-1 értékig számol.

A com.sun.star.container.XIndexContainer felület

Az XIndexContainer felület tartalmazza az insertByIndex és a removeByIndex metódust. A paraméterek struktúrája ugyanolya, mint az XNameContainer megfelelő metódusainál.

Hozzáférés az alárendelt objektumokhoz iterációval

Néha egy objektum tartalmazhat olyan alárendelt objektumokat, amelyek nem érhetők el név vagy index szerint. Ilyen esetekben az XEnumeration és az XenumerationAccess felületet kell használni. Ez a két felület biztosít egy olyan módszert, amellyel egy objektum alárendelt objektumai egymás után elérhetők anélkül, hogy közvetlenül kéne rájuk hivatkozni.

A com.sun.star.container.XEnumeration és az XenumerationAccess felületek

Az alapobjektumnak biztosítania kell az XEnumerationAccess felületet, amely mindössze a createEnumeration metódust tartalmazza. Ez egy külső objektumot ad vissza, amely biztosítja az XEnumeration felületet a hasMoreElements és a nextElement metódussal. Ezeken keresztül elérhetők az alárendelt objektumok.

A következő példa végiglépdel egy szöveg összes bekezdésén:

Dim ParagraphEnumeration As Object
Dim Paragraph As Object
 
ParagraphEnumeration = Textdoc.Text.createEnumeration
 
While ParagraphEnumeration.hasMoreElements()
  Paragraph = ParagraphEnumeration.nextElement()
Wend

A program először létrehozza a külső ParagraphEnumeration objektumot. Ez mindig visszaadja a ciklusban a szöveg egyes bekezdéseit. A ciklus akkor ér véget, ha a hasMoreElements metódus False (hamis) értéket ad vissza, ami azt jelzi, hogy a program elérte a szöveg végét.


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools