Service ScriptForge.UI

Le service UI (User Interface) simplifie l'identification et la manipulation des diffĂ©rentes fenĂȘtres composant l'ensemble de l'application LibreOffice :

tip

Le service UI est le point de départ pour ouvrir, créer ou accéder au contenu de documents nouveaux ou existants à partir d'un script utilisateur.


DĂ©finitions

WindowName

Une fenĂȘtre peut ĂȘtre Ă©bauchĂ©e de diffĂ©rentes maniĂšres :

Le nom de la fenĂȘtre est sensible Ă  la casse.

Objet du document

Les mĂ©thodes CreateDocument, CreateBaseDocument, GetDocument, OpenBaseDocument et OpenDocument, dĂ©crites ci-dessous, gĂ©nĂšrent des objets de document. Lorsqu'une fenĂȘtre contient un document, une instance de la classe Document reprĂ©sente ce document. Un contre-exemple, l'EDI Basic n'est pas un document mais une fenĂȘtre dans notre terminologie. De plus, un document a un type : Calc, Impress, Writer, ...

Les propriétés et méthodes spécifiques applicables aux documents sont implémentées dans une classe de document.

tip

L'implémentation de la classe d'objets document se fait dans la bibliothÚque associée SFDocuments. Voir son service "Document".


Invocation du service

Avant d'utiliser le service UI, la bibliothĂšque ScriptForge doit ĂȘtre chargĂ©e ou importĂ©e :

note

‱ Les macros Basic nĂ©cessitent de charger la bibliothĂšque ScriptForge Ă  l'aide de l'instruction suivante :
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

‱ Les scripts Python nĂ©cessitent un import depuis le module scriptforge :
from scriptforge import CreateScriptService


En Basic :

    Dim ui As Variant
    GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
    Set ui = CreateScriptService("UI")
  
En Python

    from scriptforge import CreateScriptService
    ui = CreateScriptService("UI")
  

Propriétés

Nom

Lecture seule

Type

Description

ActiveWindow

Oui

String

un WindowName valide et unique pour la fenĂȘtre actuellement active. Lorsque la fenĂȘtre ne peut pas ĂȘtre identifiĂ©e, une chaĂźne de longueur nulle est renvoyĂ©e.

Documents

Oui

String array

La liste des documents actuellement ouverts. Les fenĂȘtres spĂ©ciales sont ignorĂ©es. Cette liste se compose d'une matrice unidimensionnelle de base zĂ©ro soit de noms de fichiers (en notation SF_FileSystem.FileNaming) soit de titres de fenĂȘtres pour les documents non enregistrĂ©s.

Height

Oui

Integer

Renvoie la hauteur de la fenĂȘtre active en pixels.

Width

Oui

Integer

Renvoie la largeur de la fenĂȘtre active en pixels.

X

Oui

Integer

Renvoie la coordonnĂ©e X de la fenĂȘtre active, qui correspond Ă  la distance jusqu'au bord gauche de l'Ă©cran en pixels.

Y

Oui

Integer

Renvoie la coordonnĂ©e Y de la fenĂȘtre active, qui correspond Ă  la distance jusqu'au bord supĂ©rieur de l'Ă©cran en pixels. Cette valeur ne prend pas en compte les dĂ©corations de fenĂȘtre ajoutĂ©es par votre systĂšme d'exploitation. Ainsi, mĂȘme lorsque la fenĂȘtre est agrandie, cette valeur peut ne pas ĂȘtre nulle.


Constantes

Nom

Valeur

Description

MACROEXECALWAYS

2

Les macros sont toujours exécutées

MACROEXECNEVER

1

Les macros ne sont jamais exécutées

MACROEXECNORMAL

0

L'exécution des macros dépend des paramÚtres de l'utilisateur


Exemple :

Les exemples ci-dessous montrent une MsgBox avec les noms de tous les documents actuellement ouverts.

En Basic :

      Dim openDocs as Object, strDocs as String
     Set openDocs = ui.Documents()
     strDocs = openDocs(0)
     For i = 1 to UBound(openDocs)
         strDocs = strDocs & Chr(10) & openDocs(i)
     Next i
     MsgBox strDocs
   
En Python

     ui = CreateScriptService("UI")
     bas = CreateScriptService("Basic")
     openDocs = ui.Documents()
     strDocs = "\n".join(openDocs)
     bas.MsgBox(strDocs)
   

Liste des méthodes dans le service UI

Activate
CreateBaseDocument
CreateDocument (*)
GetDocument
Maximize

Minimize
OpenBaseDocument
OpenDocument (*)
Resize

RunCommand
SetStatusBar (*)
ShowProgressBar
WindowExists


warning

Notez, par exception, que les méthodes marquées (*) ne sont pas applicables aux documents Base.


Activate

Rendez la fenĂȘtre spĂ©cifiĂ©e active. La mĂ©thode renvoie True si la fenĂȘtre donnĂ©e est trouvĂ©e et peut ĂȘtre activĂ©e. Il n'y a aucun changement dans l'interface utilisateur rĂ©elle si aucune fenĂȘtre ne correspond Ă  la sĂ©lection.

Syntaxe :

svc.Activate(windowname: str): bool

ParamĂštres :

windowame : voir les définitions ci-dessus.

Exemple :

En Basic :

      ui.Activate("C:\Documents\My file.odt")
    
En Python

      ui.Activate(r"C:\Documents\My file.odt")
    

CreateBaseDocument

Crée et stocke un nouveau document LibreOffice Base intégrant une base de données vide du type donné. La méthode renvoie une instance de service Document.

Syntaxe :

svc.CreateBaseDocument(filename: str, embeddeddatabase: str = 'HSQLDB', registrationname: str = '', opt calcfilename: str): svc

ParamĂštres :

filename : identifie le fichier à créer. Il doit suivre la notation SF_FileSystem.FileNaming. Si le fichier existe déjà, il est écrasé sans avertissement

embeddeddatabase : soit "HSQLDB" (par défaut), "FIREBIRD" ou "CALC".

registrationname : Le nom utilisé pour stocker la nouvelle base de données dans le registre des bases de données. Lorsque = "" (par défaut), aucune inscription n'a lieu. Si le nom existe déjà, il est écrasé sans avertissement.

calcfilename : uniquement lorsque embeddeddatabase = "CALC", calcfilename représente le fichier contenant les tables sous forme de feuilles Calc. Le fichier doit exister sinon une erreur est générée.

Exemple :

En Basic :

      Dim myBase As Object, myCalcBase As Object
      Set myBase = ui.CreateBaseDocument("C:\Databases\MyBaseFile.odb", "FIREBIRD")
      Set myCalcBase = ui.CreateBaseDocument("C:\Databases\MyCalcBaseFile.odb", _
          "CALC", , "C:\Databases\MyCalcFile.ods")
   
En Python

     myBase = ui.CreateBaseDocument(r"C:\Databases\MyBaseFile.odb", "FIREBIRD")
     myCalcBase = ui.CreateBaseDocument(r"C:\Databases\MyCalcBaseFile.odb", \
         "CALC", calcfilename = r"C:\Databases\MyCalcFile.ods")
   

CreateDocument (*)

Créez un nouveau document LibreOffice d'un type donné ou basé sur un modÚle donné. La méthode renvoie un objet document.

Syntaxe :

svc.CreateDocument(documenttype: str = '', templatefile: str = '', hidden: bool = False): svc

ParamĂštres :

documenttype : "Calc", "Writer", etc. S'il est absent, l'argument templatefile doit ĂȘtre prĂ©sent.

templatefile : le FileName complet du modÚle sur lequel construire le nouveau document. Si le fichier n'existe pas, l'argument est ignoré. Le service FileSystem fournit les propriétés TemplatesFolder et UserTemplatesFolder pour aider à construire l'argument.

hidden : si True, ouvre le nouveau document en arriĂšre-plan (par dĂ©faut = False). À utiliser avec prudence : l'activation ou la fermeture ultĂ©rieure ne peut se produire que par programmation.

Exemple :

Dans les deux exemples ci-dessous, le premier appel à la méthode CreateDocument crée un document Calc vierge, tandis que le second crée un document à partir d'un fichier modÚle.

En Basic :

      Dim myDoc1 As Object, myDoc2 As Object, FSO As Object
      Set myDoc1 = ui.CreateDocument("Calc")
      Set FSO = CreateScriptService("FileSystem")
      Set myDoc2 = ui.CreateDocument(, FSO.BuildPath(FSO.TemplatesFolder, "personal/CV.ott"))
   
En Python

     myDoc1 = ui.CreateDocument("Calc")
     fs = CreateScriptService("FileSystem")
     myDoc2 = ui.CreateDocument(templatefile = fs.BuildPath(fs.TemplatesFolder, "personal/CV.ott"))
   

GetDocument

Renvoie un objet document ouvert faisant rĂ©fĂ©rence soit Ă  la fenĂȘtre active, soit Ă  une fenĂȘtre donnĂ©e, soit au document actif.

Syntaxe :

svc.GetDocument(windowname: str = ''): svc

svc.GetDocument(windowname: uno): svc

ParamĂštres :

windowame : voir les dĂ©finitions ci-dessus. Si cet argument est absent, la fenĂȘtre active est utilisĂ©e. Les objets UNO de types com.sun.star.lang.XComponent ou com.sun.star.comp.dba.ODatabaseDocument sont Ă©galement acceptĂ©s. Ainsi, passer ThisComponent ou ThisDatabaseDocument comme argument crĂ©e un nouveau service SFDocuments.Document, Base ou Calc.

Exemple :

En Basic :

      Dim myDoc As Object
      Set myDoc = ui.GetDocument("C:\Documents\My file.odt")
      Set myBase = ui.GetDocument(ThisDatabaseDocument)
   
En Python

     from scriptforge import CreateScriptService
     bas = CreateScriptService("Basic")
     myDoc = ui.GetDocument(r"C:\Documents\My file.odt")
     myDoc = ui.GetDocument(bas.ThisComponent)
   
tip

Pour accĂ©der au nom de la fenĂȘtre actuellement active, reportez-vous Ă  la propriĂ©tĂ© ActiveWindow.


Maximize

Maximise la fenĂȘtre active ou la fenĂȘtre donnĂ©e.

Syntaxe :

svc.Maximize(windowname: str)

ParamĂštres :

windowame : voir les dĂ©finitions ci-dessus. Si cet argument est absent, la fenĂȘtre active est maximisĂ©e.

Exemple :

En Basic :

      ui.Maximize("Untitled 1")
   
En Python

     ui.Maximize("Untitled 1")
   

Minimize

Minimise la fenĂȘtre active ou la fenĂȘtre donnĂ©e.

Syntaxe :

svc.Minimize(windowname: str)

ParamĂštres :

windowame : voir les dĂ©finitions ci-dessus. Si cet argument est absent, la fenĂȘtre active est rĂ©duite.

Exemple :

En Basic :

     ui.Minimize()
   
En Python

     ui.Minimize()
   

OpenBaseDocument

Ouvrez un document LibreOffice Base existant. La méthode renvoie un objet document.

Syntaxe :

svc.OpenBaseDocument(filename: str = '', registrationname: str = '', macroexecution: int = 0): svc

ParamĂštres :

filename : identifie le fichier à ouvrir. Il doit suivre la notation SF_FileSystem.FileNaming.

registrationname : le nom à utiliser pour rechercher la base de données dans le registre des bases de données. Il est ignoré si FileName <> "".

macroexecution : 0 = le comportement est défini par la configuration utilisateur, 1 = les macros ne sont pas exécutables, 2 = les macros sont exécutables.

Exemple :

En Basic :

      Dim myBase As Object
      Set myBase = ui.OpenBaseDocument("C:\Documents\myDB.odb", MacroExecution := ui.MACROEXECALWAYS)
   
En Python

     ui.OpenBaseDocument(r"C:\Documents\myDB.odb", macroexecution = ui.MACROEXECALWAYS)
   
tip

Pour améliorer la lisibilité du code, vous pouvez utiliser des constantes prédéfinies pour l'argument macroexecution, comme dans les exemples ci-dessus.


OpenDocument (*)

Ouvre un document LibreOffice existant avec les options donnĂ©es. Renvoie un objet document ou l'une de ses sous-classes. La mĂ©thode renvoie Nothing (en BASIC) ou None (en Python) si l'ouverture a Ă©chouĂ©, mĂȘme lorsque l'Ă©chec est provoquĂ© par une dĂ©cision de l'utilisateur.

Syntaxe :

svc.Opendocument(filename: str, password: str = '', readonly: bool = False, hidden: bool = False, macroexecution: int = 0, filtername: str = '', filteroptions: str = ''): svc

ParamĂštres :

filename : identifie le fichier à ouvrir. Il doit suivre la notation FileNaming du service FileSystem.

password : à utiliser lorsque le document est protégé. En cas d'erreur ou d'absence alors que le document est protégé, l'utilisateur sera invité à saisir un mot de passe.

readonly: par défaut = False.

hidden : si True, ouvre le nouveau document en arriĂšre-plan (par dĂ©faut = False). À utiliser avec prudence : l'activation ou la fermeture ultĂ©rieure ne peut se produire que par programmation.

macroexecution : 0 = le comportement est défini par la configuration utilisateur, 1 = les macros ne sont pas exécutables, 2 = les macros sont exécutables.

filtername : le nom d'un filtre qui doit ĂȘtre utilisĂ© pour charger le document. Si cet argument est passĂ©, le filtre doit exister.

filteroptions  : une chaßne facultative d'options associées au filtre.

Exemple :

En Basic :

      Dim myDoc As Object, FSO As Object
      Set myDoc = ui.OpenDocument("C:\Documents\myFile.odt", ReadOnly := True)
   
En Python

     ui.OpenDocument(r"C:\Documents\myFile.odt", readonly = True)
   

Resize

Redimensionne et/ou dĂ©place la fenĂȘtre active. Les arguments absents et nĂ©gatifs sont ignorĂ©s. Si la fenĂȘtre est rĂ©duite ou agrandie, l'appel de Resize sans arguments la restaure.

Syntaxe :

svc.Resize(left: int = -1, top: int = -1, width: int = -1, height: int = -1)

ParamĂštres :

left, top : distances du coin supérieur gauche aux bords supérieur et gauche de l'écran, en pixels.

width, height : nouvelles dimensions de la fenĂȘtre, en pixels.

Exemple :

Dans les exemples suivants, la largeur et la hauteur de la fenĂȘtre sont modifiĂ©es tandis que les valeurs top et gauche restent inchangĂ©es.

En Basic :

      ui.Resize(, ,500, 500)
   
En Python

     ui.Resize(width = 500, height = 500)
   
tip

Pour redimensionner une fenĂȘtre qui n'est pas active, activez-la d'abord Ă  l'aide de la mĂ©thode Activate.


RunCommand

ExĂ©cute une commande UNO sur la fenĂȘtre actuelle. Quelques commandes typiques sont : Save, SaveAs, ExportToPDF, Undo, Copy, Paste, etc.

Les commandes peuvent ĂȘtre exĂ©cutĂ©es avec ou sans arguments. Les arguments ne sont pas validĂ©s avant l'exĂ©cution de la commande. Si la commande ou ses arguments ne sont pas valides, rien ne se passera.

tip

Pour une liste complĂšte des commandes UNO pouvant ĂȘtre exĂ©cutĂ©es dans LibreOffice, reportez-vous Ă  la page Wiki Development/DispatchCommands.


Syntaxe :

svc.RunCommand(command: str, [args: any])

ParamĂštres :

command : chaĂźne sensible Ă  la casse contenant le nom de la commande UNO. L'inclusion du prĂ©fixe ".uno :" dans la commande est facultative. L'exactitude de la commande elle-mĂȘme n'est pas vĂ©rifiĂ©e. Si rien ne se passe aprĂšs l'appel de la commande, la commande est probablement erronĂ©e.

args : pour chaque argument à transmettre à la commande, spécifiez une paire contenant le nom et la valeur de l'argument.

Exemple :

En Basic :

L'exemple suivant exĂ©cute la commande .uno:About dans la fenĂȘtre actuelle.


    Set ui = CreateScriptService("UI")
    ui.RunCommand("About")
  

Vous trouverez ci-dessous un exemple qui exécute la commande UNO .uno:BasicIDEAppear et transmet les arguments requis pour ouvrir l'EDI Basic sur une ligne spécifique d'un module.


    ' Arguments passés à la commande :
    ' Document  = "LibreOffice Macros & Dialogs"
    ' LibName = "ScriptForge"
    ' Name = "SF_Session"
    ' Line = 600
    ui.RunCommand(".uno:BasicIDEAppear", "Document", "LibreOffice Macros & Dialogs", _ 
                  "LibName", "ScriptForge", "Name", "SF_Session", "Line", 600)
  

Notez qu'appeler la commande BasicIDEAppear sans arguments ouvrira simplement l'EDI Basic.

En Python

    ui = CreateScriptService("UI")
    ui.RunCommand("About")
  

    ui.RunCommand(".uno:BasicIDEAppear", "Document", "LibreOffice Macros & Dialogs", \
                  "LibName", "ScriptForge", "Name", "SF_Session", "Line", 600)
  

En Python, il est également possible d'appeler RunCommand en utilisant des arguments de mots-clés :


    ui.RunCommand(".uno:BasicIDEAppear", Document = "LibreOffice Macros & Dialogs", \
                  LibName = "ScriptForge", Name = "SF_Session", Line = 600)
  
tip

Chaque composant LibreOffice dispose de son propre jeu de commandes. Un moyen simple d'apprendre les commandes est d'aller dans Outils - Personnaliser - Clavier. Lorsque le curseur de la souris est positionné sur une fonction dans la liste Fonction, une info-bulle apparaßt avec la commande UNO correspondante.


SetStatusbar (*)

Afficher un texte et une barre de progression dans la barre d'Ă©tat de la fenĂȘtre active. Tous les appels ultĂ©rieurs dans la mĂȘme exĂ©cution de macro font rĂ©fĂ©rence Ă  la mĂȘme barre d'Ă©tat de la mĂȘme fenĂȘtre, mĂȘme si la fenĂȘtre n'est plus visible. Un appel sans arguments rĂ©initialise la barre d'Ă©tat Ă  son Ă©tat normal.

Syntaxe :

svc.SetStatusbar(text: str = '', percentage: int = -1)

ParamĂštres :

text : un texte facultatif à afficher devant la barre de progression.

percentage : un degré de progression facultatif compris entre 0 et 100.

Exemple :

En Basic :

      Dim i As Integer
      For i = 0 To 100
          ui.SetStatusbar("Progress ...", i)
          Wait 50
      Next i
      ' RĂ©initialise la barre d'Ă©tat
      ui.SetStatusbar
   
En Python

     from time import sleep
     for i in range(101):
         ui.SetStatusbar("Test:", i)
         sleep(0.05)
     ui.SetStatusbar()
   

ShowProgressBar

Affiche une boßte de dialogue non modale. Précisez son titre, un texte explicatif et un pourcentage de progression à représenter sur une barre de progression. La boßte de dialogue restera visible jusqu'à un appel à la méthode sans arguments ou jusqu'à ce que l'utilisateur ferme manuellement la boßte de dialogue.

Syntaxe :

svc.ShowProgressBar(title: str = '', text: str = '', percentage: str = -1)

ParamĂštres :

title : le titre apparaissant en haut de la boßte de dialogue. Par défaut = "ScriptForge".

text : un texte facultatif à afficher au-dessus de la barre de progression.

percentage : un degré de progression facultatif compris entre 0 et 100.

Exemple :

En Basic :

      Dim i As Integer
      For i = 0 To 100
          ui.ShowProgressBar("Window Title", "Progress ..." & i & "/100", i)
          Wait 50
      Next i
      'Ferme la fenĂȘtre de la barre de progression
      ui.ShowProgressBar
   
En Python

     from time import sleep
     for i in range(101):
         ui.ShowProgressBar("Window Title", "Progress ... " + str(i) + "/100", i)
         sleep(0.05)
     # Ferme la fenĂȘtre de la barre de progression
     ui.ShowProgressBar()
   

WindowExists

Renvoie True si la fenĂȘtre donnĂ©e peut ĂȘtre identifiĂ©e.

Syntaxe :

svc.WindowExists(windowname: str): bool

ParamĂštres :

windowame : voir les définitions ci-dessus.

Exemple :

En Basic :

      If ui.WindowExists("C:\Document\My file.odt") Then
          ' ...
   
En Python

     if ui.WindowExists(r"C:\Document\My file.odt"):
         # ...
   

Aidez-nous !