Page 1 sur 1

[OXT] Ajout dans la barre de menu

Posté : 20 juin 2013 12:35
par Bidouille
Pour qu'une extension puisse être accessible dans la barre de menu, il faut agir sur le fichier Addons.xcu

D'abord un exemple avec l'OXT QRcodeGen qui ajoute un item dans le menu Insertion de Writer et Calc juste en dessous de l'élément Image.

Code : Tout sélectionner

01 <?xml version='1.0' encoding='UTF-8'?>
02 <oor:component-data
03  xmlns:oor="http://openoffice.org/2001/registry"
04  xmlns:xs="http://www.w3.org/2001/XMLSchema"
05  oor:name="Addons"
06  oor:package="org.openoffice.Office">
07 <node oor:name="AddonUI">
08 <node oor:name="OfficeMenuBarMerging">
09       <node oor:name="qrcodegen" oor:op="replace">
10       <node oor:name="S1" oor:op="replace">
11        <prop oor:name="MergePoint">
12          <value>.uno:InsertMenu\.uno:GraphicMenu</value>
13        </prop>
14        <prop oor:name="MergeCommand">
15         <value>AddAfter</value>
16        </prop>
17        <prop oor:name="MergeFallback">
18         <value>AddPath</value>
19        </prop>
20        <prop oor:name="MergeContext" oor:type="xs:string">
21          <value>com.sun.star.text.TextDocument,com.sun.star.sheet.SpreadsheetDocument</value>
22        </prop>
23        <node oor:name="MenuItems">
24         <node oor:name="M1" oor:op="replace">
25              <prop oor:name="URL" oor:type="xs:string">
26            <value>macro:///QRcodeGen.QRcodeGen.Main</value>
27         </prop>
28         <prop oor:name="ImageIdentifier" oor:type="xs:string">
29            <value>%origin%/icons/image1</value>
30         </prop>
31         <prop oor:name="Title" oor:type="xs:string">
32            <value>QR code...</value>
33         </prop>
34         <prop oor:name="Target" oor:type="xs:string">
35            <value>_self</value>
36         </prop>
37         </node>
38        </node>
39      </node>
40       </node>
41     </node>
42 </node>
43 </oor:component-data>

Explications des lignes pour l'ajout

Posté : 20 juin 2013 12:43
par Bidouille
08. Demande de fusion dans la barre existante avec la balise OfficeMenuBarMerging
09. Définition du nom du menu avec option de remplacement si l'item existe déjà (cas de mise à jour par exemple)
10. Pas bien compris l'usage de cet élément
11. Demande de fusion à un point précis du menu
12. Position à la hauteur du menu Insertion > Image (voir plus bas les équivalents UNO des menus)
14. Type de la fusion
15. AddAfter pour ajouter après la position donnée en 12 (autre valeur possible AddBefore, Replace et Remove)
17. Décrit comment le menu doit réagir
18. C'est toujours une variable AddPath si AddAfter ou AddBefore
20. Donne le contexte d'utilisation du menu (dans quel module, il doit être visible)
21. Les modules sont séparés par des virgules :
  • Writer : com.sun.star.text.TextDocument
  • Calc : com.sun.star.sheet.SpreadsheetDocument
  • Impress : com.sun.star.presentation.PresentationDocument
  • Draw : com.sun.star.drawing.DrawingDocument
  • Math : com.sun.star.formula.FormulaProperties
  • Graphique : com.sun.star.chart.ChartDocument
  • Base : com.sun.star.sdb.OfficeDatabaseDocument
  • Editeur Basic : com.sun.star.script.BasicIDE

Description de l'élément du menu

Posté : 21 juin 2013 10:59
par Bidouille
23. Description des éléments du menu
24. Nom unique interne pour le menu avec paramètre "replace" en cas de mise à jour
25. Propriété URL
26. Chemin vers une macro ou une commande UNO
28. Propriété Identifiant d'image
29. Chemin vers l'image attachée à la gauche du menu.
Suivant la résolution déclarée, vous devez avoir 4 images (format 150 x 150 pixels) :
  • _16.bmp (16 couleurs normal)
  • _16h.bmp (16 couleurs haute résolution)
  • _26.bmp
  • _26h.bmp
31. Propriété Titre
32. Libellé du menu
34. Propriété Cible
35. Toujours à _self (soi-même)

NB concernant le point 26, il ne faut plus employer la chaîne vnd.sun.star.script: car elle renverra une alerte de sécurité sur l'exécution des macros.

Elément de menu multi-langue

Posté : 21 juin 2013 11:04
par Bidouille
Dans le noeud du titre, ajouter des valeurs avec le paramètre de langue.
Cela permet ainsi d'avoir un menu localisé.

Exemple :

Code : Tout sélectionner

<prop oor:name="Title" oor:type="xs:string">
   <value xml:lang="en-US">Form...</value>
   <value xml:lang="en-UK">Form...</value>
   <value xml:lang="it-IT">Modulo...</value>
   <value xml:lang="fr-FR">Formulaire...</value>
   <value xml:lang="de-DE">Maske...</value>
   <value xml:lang="es-ES">Formulario...</value>
   <value xml:lang="pt-PT">Formulário...</value>
   <value xml:lang="pt-BR">Formulário...</value>
   <value xml:lang="ca-CA">Formulari...</value>
   <value xml:lang="nl-NL">Formulier...</value>
   <value xml:lang="da-DA">Formular...</value>
   <value xml:lang="fi-FI">Lomake...</value>
   <value xml:lang="nb-NB">Skjema...</value>
   <value xml:lang="sv-SV">Formulär...</value>
   <value xml:lang="sl-SL">Obrazec...</value>
   <value xml:lang="hu-HU">Modul...</value>
   <value xml:lang="ru-RU">Форма...</value>
   <value xml:lang="ja-JP">&#x30D5;&#x30A9;&#x30FC;&#x30E0;...</value>
   <value xml:lang="pl-PL">Formularz...</value>
</prop>

Commande UNO des barres de menu

Posté : 24 juin 2013 09:01
par Bidouille
Chaque module a sa propre barre de menu.
Chaque item de menu lance une commande dite UNO (Universal Network Objects).
Les noms de ces commandes sont disponibles dans un fichier menubar.xml
Ces fichiers sont localisés dans le répertoire des programmes de votre système.
Par exemple pour Windows 7 :

Code : Tout sélectionner

%ProgramFiles(x86)/OpenOffice 4/share/config/soffice.cfg/modules

Extrait du fichier pour le traitement de textes swriter :

Code : Tout sélectionner

  <menu:menu menu:id=".uno:InsertMenu">
    <menu:menupopup>
      <menu:menuitem menu:id=".uno:InsertBreak"/>
      <menu:menu menu:id=".uno:FieldMenu">
        <menu:menupopup>
          <menu:menuitem menu:id=".uno:InsertDateField"/>
          <menu:menuitem menu:id=".uno:InsertTimeField"/>
          <menu:menuitem menu:id=".uno:InsertPageNumberField"/>
          <menu:menuitem menu:id=".uno:InsertPageCountField"/>
          <menu:menuitem menu:id=".uno:InsertTopicField"/>
          <menu:menuitem menu:id=".uno:InsertTitleField"/>
          <menu:menuitem menu:id=".uno:InsertAuthorField"/>
          <menu:menuseparator/>
          <menu:menuitem menu:id=".uno:InsertField"/>
        </menu:menupopup>

qui correspond à :
Image

Ne pas oublier le manifeste

Posté : 21 août 2018 10:13
par Bidouille
Le fichier manifest.xml qui se trouve dans le répertoire META-INF doit impérativement intégrer votre addons.xcu.

Il faut ajouter la ligne :

Code : Tout sélectionner

<manifest:file-entry manifest:full-path="Addons.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>


Sans quoi, vous ne verrez jamais votre menu s'ajouter.