Présentation de quelques interfaces centrales

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

Certaines interfaces de Apache OpenOffice se retrouvent dans de nombreux composants de l'API Apache OpenOffice. Elles définissent des ensembles de méthodes pour des tâches abstraites pouvant s'appliquer à différents types de problèmes. Les interfaces les plus courantes sont présentées ci-dessous.

L'origine des objets sera expliquée plus loin dans ce guide. Nous nous contentons pour l'instant de traiter certains aspects abstraits des objets pour lesquels l'API Apache OpenOffice fournit certaines interfaces centrales.

Création d'objets contextuels

L'API Apache OpenOffice fournit deux options de création d'objets. La première se trouve dans la fonction createUnoService mentionnée au début de ce chapitre. createUnoService crée un objet qui peut être utilisé de manière universelle. Ces objets et services sont également appelés services indépendants du contexte.

Il existe également des services contextuels dont les objets ne sont utiles que s'ils sont utilisés conjointement avec un autre objet. Un objet de dessin de classeur, par exemple, ne peut exister que conjointement avec ce document précis.

Interface com.sun.star.lang.XMultiServiceFactory

Les objets contextuels sont généralement créés par une méthode d'objet dont dépend l'objet. La méthode createInstance définie dans l'interface XMultiServiceFactory est notamment utilisée dans les objets Document.

L'objet de dessin peut, par exemple, être créé de la manière suivante à l'aide d'un objet Spreadsheet :

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

Vous pouvez créer un modèle de paragraphe dans un document texte de la même manière :

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

Accès nommé aux objets subordonnés

Les interfaces XNameAccess et XNameContainer sont utilisées dans des objets contenant des objets subordonnés, qui peuvent être adressés par un nom en langage naturel.

XNamedAccess permet d'accéder aux objets individuels, tandis que XNameContainer se charge d'insérer, de modifier et de supprimer des éléments.

Interface com.sun.star.container.XNameAccess

L'objet Sheet d'un classeur fournit un bon exemple d'utilisation de XNameAccess. Il regroupe les différentes pages du classeur. Il accède aux différentes pages à l'aide de la méthode getByName de XNameAccess :

Dim Sheets As Object
Dim Sheet As Object
 
Sheets = Spreadsheet.Sheets
Sheet = Sheets.getByName("Sheet1")

La méthode getElementNames permet d'obtenir un aperçu des noms de tous les éléments. Elle retourne comme résultat un champ de données contenant les différents noms. L'exemple suivant détermine de cette manière les noms de tous les éléments d'un classeur et les affiche dans une boucle :

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

La méthode hasByName de l'interface XNameAccess indique s'il existe un objet subordonné portant un nom donné dans l'objet de base. L'exemple suivant affiche un message indiquant à l'utilisateur si l'objet Spreadsheet contient une page nommée Sheet1.

Dim Sheets As Object
 
Sheets = Spreadsheet.Sheets
If Sheets.HasByName("Sheet1") Then
  MsgBox " Sheet1 available"
Else
  MsgBox "Sheet1 not available"
End If

Interface com.sun.star.container.XNameContainer

L'interface XNameContainer permet d'insérer, de supprimer et de modifier des éléments subordonnés dans un objet de base. Les fonctions concernées sont insertByName, removeByName et replaceByName.

Un exemple pratique est fourni ci-après. Un document texte contenant un objet StyleFamilies est appelé et l'objet est utilisé pour rendre les modèles de paragraphe (ParagraphStyles) du document disponibles.

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")

La ligne insertByName insère le style NewStyle sous le même nom dans l'objet ParagraphStyles. La ligne replaceByName remplace l'objet derrière ChangingStyle par NewStyle. Enfin, l'appel removeByName supprime l'objet derrière OldStyle de ParagraphStyles.

Accès par index aux objets subordonnés

Les interfaces XIndexAccess et XIndexContainer sont utilisées dans les objets contenant des objets subordonnés pouvant être adressés par index.

XIndexAccess fournit les méthodes d'accès aux différents objets. XIndexContainer fournit les méthodes d'insertion et de suppression des éléments.

Interface com.sun.star.container.XIndexAccess

XIndexAccess fournit les méthodes getByIndex et getCount pour appeler les objets subordonnés : getByIndex retourne un objet avec un index donné et getCount retourne le nombre d'objets disponibles.

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)
  ' Editing sheet
Next I

Dans l'exemple, une boucle parcourt toutes les feuilles d'un classeur l'une après l'autre et enregistre une référence pour chaque feuille dans la variable d'objet Sheet. Notez que lorsque vous travaillez avec des index, getCount retourne le nombre d'éléments. Par contre, les éléments getByIndex sont numérotés à partir de 0. La variable servant de compteur à la boucle oscille donc entre 0 et getCount()-1.

Interface com.sun.star.container.XIndexContainer

L'interface XIndexContainer fournit les fonctions insertByIndex et removeByIndex. Les paramètres sont structurés de la même manière que les fonctions correspondantes dans XNameContainer.

Accès itératif aux objets subordonnés

Dans certaines instances, un objet peut contenir une liste d'objets subordonnés qui ne peuvent pas être adressés au moyen d'un nom ou d'un index. C'est alors que les interfaces XEnumeration et XenumerationAccess se révèlent utiles. Elles fournissent un mécanisme permettant de passer les différents éléments subordonnés d'un objet, l'un après l'autre, sans recourir à une méthode d'adressage direct.

Interfaces com.sun.star.container.XEnumeration et XenumerationAccess

L'objet de base doit fournir l'interface XEnumerationAccess, qui contient uniquement la méthode createEnumeration. Elle retourne un objet auxiliaire, qui fournit à son tour l'interface XEnumeration avec les méthodes hasMoreElements et nextElement. Ces méthodes permettent d'accéder aux objets subordonnés.

L'exemple suivant parcourt les différents paragraphes d'un texte :

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

L'exemple commence par créer un objet auxiliaire ParagraphEnumeration. Il retourne les paragraphes du texte individuellement, dans une boucle. La boucle se termine dès que la méthode hasMoreElements retourne la valeur False, qui signale que la fin du texte a été atteinte.

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