Macro pour exécuter une commande quelconque en l'appelant par son nom ?

Bonjour,

À l'occasion de cette demande d'amélioration :
https://bugs.documentfoundation.org/show_bug.cgi?id=101110
je me demande si on ne pourrait pas faire ça avec une macro.

Est-ce que des experts des macros LibreOffice ont une idée là-dessus ?

Bonne journée
JBF

Bonjour Jean-Baptiste,

À l'occasion de cette demande d'amélioration :
https://bugs.documentfoundation.org/show_bug.cgi?id=101110
je me demande si on ne pourrait pas faire ça avec une macro.

Est-ce que des experts des macros LibreOffice ont une idée là-dessus ?

je ne suis pas un expert... cependant il existe en effet une possibilité d'accéder aux menus de LibO par macro.

J'ai écrit et j'utilise ce qui suit dans mes propres macros.
L'ensemble des options de menus est disponible dans le fichier
\share\config\soffice.cfg\modules\sglobal\menubar\menubar.xml du dossier d'installation.

On pourrait donc imaginer une extension qui ajouterait une option de menu et une liste déroulante pour choisir l'option à exécuter. Ce serait plus rudimentaire que ce que fait AutoCAD mais ça marcherait, je pense.

Ceci dit, je ne vois pas trop l'intérêt. Quand on utilise souvent la même option de menu, on a intérêt à y associer un raccourci clavier, s'il n'existe pas déjà.

8< ------------------------------------------------------------
Sub _UNOMenuCommand(ByRef pUnoCmd As String)
'runs any UNO menu command, in pUnoCmd.
'There is no control on the command passed.
'
'The menu commands are available in the menubar.xml file, found in
'LibreOffice install directory, subdir \share\config\soffice.cfg\modules\sglobal\menubar

  Dim lo_Window As Variant
  Dim lo_Dispatch As Object
  Dim l_Args()
  
  lo_Window = StarDesktop.CurrentFrame
  lo_Dispatch = createUnoService(LOPRIM_SERV_DISPATCH)
  
  lo_Dispatch.executeDispatch(lo_Window, ".uno:" & pUnoCmd, "", 0, l_Args())

End Sub 'UNOMenuCommand

Sub SetFullScreen()
'Sets the current window to full screen
'Note: LibO then displays the FullScreen toolbar.

  _UNOMenuCommand("FullScreen")

End Sub 'SetFullScreen

Sub ShowPrinterDialog()
'Calls the LibO document printer dialog

  _UNOMenuCommand("Print")

End Sub 'ShowPrinterDialog

Sub ShowPrintPreview()
'Calls the LibO print preview dialog

  _UNOMenuCommand("PrintPreview")

End Sub 'ShowPrintPreview

Sub ShowDocumentProperties()
'Calls the LibO document properties dialog

  _UNOMenuCommand("SetDocumentProperties")

End Sub 'ShowDocumentProperties
-------------------------------------------------------- >8

Amicalement,

Argh ! Il en maquait un bout...

Ne pas oublier cette constante :

Public Const LOPRIM_SERV_DISPATCH = "com.sun.star.frame.DispatchHelper" 'dispatcher

Amicalement,

Bonjour Jean-François,

Bonjour Jean-Baptiste,

À l'occasion de cette demande d'amélioration :
https://bugs.documentfoundation.org/show_bug.cgi?id=101110
je me demande si on ne pourrait pas faire ça avec une macro.

Est-ce que des experts des macros LibreOffice ont une idée là-dessus ?

je ne suis pas un expert... cependant il existe en effet une possibilité
d'accéder aux menus de LibO par macro.

D'accord pour les menus mais peut-on aussi accéder aux commandes qui ne
sont pas dans les menus (mais qu'on pourrait y ajouter) ? Par exemple
une macro qui ouvrirait un champ texte dans lequel l'utilisateur
pourrait saisir une commande UNO qui serait exécutée quand il valide en
cliquant sur le bouton OK.

J'ai écrit et j'utilise ce qui suit dans mes propres macros.
L'ensemble des options de menus est disponible dans le fichier
\share\config\soffice.cfg\modules\sglobal\menubar\menubar.xml du dossier
d'installation.

Merci :slight_smile:

On pourrait donc imaginer une extension qui ajouterait une option de
menu et une liste déroulante pour choisir l'option à exécuter. Ce serait
plus rudimentaire que ce que fait AutoCAD mais ça marcherait, je pense.

Ceci dit, je ne vois pas trop l'intérêt. Quand on utilise souvent la
même option de menu, on a intérêt à y associer un raccourci clavier,
s'il n'existe pas déjà.

Moi non plus mais si on peut faire ça avec une macro il devient inutile
de proposer de distraire les développeurs avec l'implémentation d'une
fonction exotique qui n'intéresse qu'un ou deux utilisateurs. :wink:

Bonne journée
JBF

Bonjour Jean-Baptiste,

D'accord pour les menus mais peut-on aussi accéder aux commandes qui ne
sont pas dans les menus (mais qu'on pourrait y ajouter) ? Par exemple
une macro qui ouvrirait un champ texte dans lequel l'utilisateur
pourrait saisir une commande UNO qui serait exécutée quand il valide en
cliquant sur le bouton OK.

oui, une "bête" boîte de dialogue (fût-elle réduite à une zone de saisie + un bouton) permet de faire ça. Je ne sais pas jusqu'à quel point on pourrait intégrer cette zone de texte directement à une entrée de menu.

Pour info, les commandes Uno qui correspondent à des boutons de barres d'outils se trouvent dans les fichiers xml de :
share/config/soffice.cfg/modules/sglobal/toolbar

De plus, on peut aussi jeter un œil dans les autres sous-répertoires de modules (swriter, etc.)

Avec tout ça, on doit avoir une vue assez exhaustive des commandes Uno disponibles.

Moi non plus mais si on peut faire ça avec une macro il devient inutile
de proposer de distraire les développeurs avec l'implémentation d'une
fonction exotique qui n'intéresse qu'un ou deux utilisateurs. :wink:

On est d'accord.

Amicalement,

Re,

À l'occasion de cette demande d'amélioration :
https://bugs.documentfoundation.org/show_bug.cgi?id=101110
je me demande si on ne pourrait pas faire ça avec une macro.

Est-ce que des experts des macros LibreOffice ont une idée là-dessus ?

En relisant la demande, je vois qu'il s'agirait d'un outil plus sophistiqué que ce à quoi je pensais : permettre la recherche d'options à partir de leur nom et retrouver le menu / l'icone associés.

Je maintiens cependant qu'une extension doit pouvoir faire ça, même si ce n'est pas trivial (point 2).

Cahier des charges pour une barre "Uno" :
1. constituer la liste des commandes (en fonction du module utilisé) avec les entrées de menu/icones qui les accompagnent. Comme dit précédemment, on peut (doit !) extraire ces infos des fichiers xml qui sont dans le répertoire modules de l'installation locale.
-> lire des xml
2. permettre la recherche approchante (???)
3. exécuter la commande Uno (ce qui est le plus facile :wink:

Amicalement,

Bonjour jean-François,

Merci d'avoir commenté la demande d'amélioration. :slight_smile:

Bonne fin de journée
JBF