Ako vytvoriť rozšírenie 8 – Volanie programov z menu

programovani.png Nie každý chce pri vytváraní rozšírenia robiť aj panel nástrojov, ale požaduje, aby boli príslušné funkcie prístupné z menu OpenOffice.org. Pozrime sa, aké možnosti máme v tomto smere.  

V prípade, že chcete vložiť nové položky do menu OpenOffice.org, máte pri tvorbe rozšírenia tri možnosti. Pravdaže, okrem toho môžete vytvoriť aj panel nástrojov, pričom zároveň môžete všetky možnosti podľa svojej potreby kombinovať.

Preto v nasledujúcom príklade budeme v jednej jedinej definícii demonštrovať všetky možnosti, ktoré sú k dispozícii. Najprv trochu teórie – do menu môžete pridať odkaz na tri miesta. Prvá možnosť je, že odkaz na rozšírenie bude prístupný cez menu Nástroje | Přídavky. Druhá možnosť je, že odkaz na rozšírenie pridáte do niektorého už existujúceho menu a tretia možnosť je, že si vytvoríte celé vlastné menu.

Pravdaže, vo všetkých prípadoch môžete vkladané položky rôzne štruktúrovať a vložený odkaz nemusí byť iba jeden, ale môže to byť celý strom položiek menu.

Pretože v prvých dieloch sme si ukázali makro pre formátovanie chemických vzorcov, ukážeme si v nasledujúcich príkladoch to, ako vložíte odkaz na toto makro do menu. Je to síce iba jedna položka, ale pre vysvetlenie problematiky je to postačujúce.

Pri vlastnej definícii na rozdiel od definície panela nástrojov nemusíte definovať XCU súbory, ktoré obsahovali definíciu názvu panelu nástrojov (napríklad súbor „WriterWindowState.xcu“), a preto súbor „manifest.xml“ musí obsahovať iba odkaz na súbor, kde zadefinujete menu, odkaz na makrá. Ostatné odkazy závisia potom už iba od toho, či použijete pri definícii aj panel nástrojov, popis rozšírenia a pod.:

<?xml version="1.0" encoding="UTF-8"?>
<?manifest:manifest>
 <?manifest:file-entry manifest:full-path="addon.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>
 <?manifest:file-entry manifest:full-path="JP_SuperbChemistry/" manifest:media-type="application/vnd.sun.star.basic-library"/>
 <?manifest:file-entry manifest:media-type="application/vnd.sun.star.package-bundle-description" manifest:full-path="help/popis.txt"/>
</manifest:manifest>

Celá definícia menu sa nachádza v súbore „addon.xcu“ a pre náš príklad bude obsahovať nasledujúce údaje:

<?xml version='1.0' encoding='UTF-8'?>
<oor:node xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="Addons" oor:package="org.openoffice.Office">
 <node oor:name="AddonUI">

  <node oor:name="OfficeMenuBarMerging">
   <node oor:name="name.SuperbChemistry.addon.SuperbChemistry" oor:op="replace">
    <node oor:name="S1" oor:op="replace">
     <prop oor:name="MergePoint">
      <value>.uno:FormatMenu\.uno:EditRegion</value>
     </prop>
     <prop oor:name="MergeCommand">
      <value>AddAfter</value>
     </prop>
     <prop oor:name="MergeFallback">
      <value>AddPath</value>
     </prop>
     <prop oor:name="MergeContext" oor:type="xs:string">
      <value>com.sun.star.text.TextDocument</value>
     </prop>
     <node oor:name="MenuItems">
      <node oor:name="M1" oor:op="replace">
       <prop oor:name="Title" oor:type="xs:string">
        <value xml:lang="sk">Formátovanie chemických vzorcov</value>
        <value xml:lang="cs">Formátovaní chemických vzorců</value>
       </prop>
       <prop oor:name="URL" oor:type="xs:string">
        <value>macro:///JP_SuperbChemistry.SuperbChemistry.FormatDocument</value>
       </prop>
       <prop oor:name="Target" oor:type="xs:string">
        <value>_self</value>
       </prop>
       <prop oor:name="ImageIdentifier" oor:type="xs:string">
        <value>%origin%/tlacidla/SuperbChemistry</value>
       </prop>
      </node>
     </node>
    </node>
   </node>
  </node>
  
  <node oor:name="AddonMenu">
   <node oor:name="name.SuperbChemistry.AddonMenu.SuperbChemistry" oor:op="replace">
    <prop oor:name="Context" oor:type="xs:string">
     <value>com.sun.star.text.TextDocument</value>
    </prop>
    <prop oor:name="URL" oor:type="xs:string">
     <value>macro:///JP_SuperbChemistry.SuperbChemistry.FormatDocument</value>
    </prop>
    <prop oor:name="ImageIdentifier" oor:type="xs:string">
     <value>%origin%/tlacidla/SuperbChemistry</value>
    </prop>
    <prop oor:name="Title" oor:type="xs:string">
     <value xml:lang="sk">Formátovanie chemických vzorcov</value>
     <value xml:lang="cs">Formátovaní chemických vzorců</value>
    </prop>
    <prop oor:name="Target" oor:type="xs:string">
     <value>_self</value>
    </prop>
   </node>
  </node>    

  <node oor:name="OfficeMenuBar">
   <node oor:name="name.SuperbChemistry.OfficeMenuBar.SuperbChemistry" oor:op="replace">
    <prop oor:name="Context" oor:type="xs:string">
     <value>com.sun.star.text.TextDocument</value>
    </prop>
    <prop oor:name="Title" oor:type="xs:string">
     <value xml:lang="sk">Chémia</value>
     <value xml:lang="cs">Chemie</value>
    </prop>
    <node oor:name="Submenu">
     <node oor:name="menu01" oor:op="replace">
      <prop oor:name="Context" oor:type="xs:string">
       <value>com.sun.star.text.TextDocument</value>
      </prop>
      <prop oor:name="Title" oor:type="xs:string">
       <value xml:lang="sk">Formátovanie</value>
       <value xml:lang="cs">Formátovaní</value>
      </prop>
      <prop oor:name="Target" oor:type="xs:string">
       <value>_self</value>
      </prop>
      <node oor:name="Submenu">
       <node oor:name="menu01.menu01" oor:op="replace">
        <prop oor:name="Context" oor:type="xs:string">
         <value>com.sun.star.text.TextDocument</value>
        </prop>
        <prop oor:name="Title" oor:type="xs:string">
         <value xml:lang="sk">Formátovanie chemických vzorcov</value>
         <value xml:lang="cs">Formátovaní chemických vzorců</value>
        </prop>
        <prop oor:name="URL" oor:type="xs:string">
         <value>macro:///JP_SuperbChemistry.SuperbChemistry.FormatDocument</value>
        </prop>
        <prop oor:name="Target" oor:type="xs:string">
         <value>_self</value>
        </prop>
        <prop oor:name="ImageIdentifier" oor:type="xs:string">
         <value>%origin%/tlacidla/SuperbChemistry</value>
        </prop>
       </node>
      </node>
     </node>
    </node>
   </node>
  </node>

 </node>
</oor:node>

Pokiaľ použijete predchádzajúci príklad, zadefinujete naraz všetky možnosti, ktoré pri vkladaní položiek do menu môžete použiť. Už sa nebudeme venovať tomu, že menu je jazykovo lokalizované (v príklade je použitá čeština a slovenčina), ani tomu, kde je volané príslušné makro, ani tomu, že pri menu sa zobrazí aj grafická ikona..., ale zameriame sa iba na to, kde je definovaná ktorá časť menu, a preto nebudeme uvádzať celé časti, ale iba ich začiatky.

Vloženie odkazu do menu Formát

Vložený odkaz na makro v menu „Formát“Vložený odkaz na makro v menu „Formát“

<node oor:name="OfficeMenuBarMerging">
 <node oor:name="name.SuperbChemistry.addon.SuperbChemistry" oor:op="replace">
   <node oor:name="S1" oor:op="replace">
    <prop oor:name="MergePoint">
     <value>.uno:FormatMenu\.uno:EditRegion</value>
    </prop>
    <prop oor:name="MergeCommand">
     <value>AddAfter</value>
    </prop>
    <prop oor:name="MergeFallback">
     <value>AddPath</value>
    </prop>

V riadkoch:

<prop oor:name="MergePoint">
 <value>.uno:FormatMenu\.uno:EditRegion</value>
</prop>

je zadefinované, že budeme vkladať odkaz do menu Formát (údaj .uno:FormatMenu) k položke Sekce... (údaj .uno:EditRegion). V riadkoch:

<prop oor:name="MergeCommand">
 <value>AddAfter</value>
</prop>

je zadefinované, že odkaz vkladáme za (údaj AddAfter) túto položku. Pravdaže, odkaz je možné vložiť do ľubovoľného menu, toto je iba príklad. Vzhľadom na rozsah všetkých položiek menu nie je možné, aby sme sa im podrobnejšie venovali, a preto dávame do pozornosti súbory „menubar.xml“, kde sú zadefinované príslušné položky. Napríklad pre modul Writer sa v operačnom systémy Windows nachádza tento súbor v adresári C:\Program Files\OpenOffice.org 3\Basis\share\config\soffice.cfg\modules\swriter\menubar\.

Vloženie odkazu do menu Nástroje

Vložený odkaz na makro v menu „Nástroje | Přídavky“Vložený odkaz na makro v menu „Nástroje | Přídavky“

<node oor:name="AddonMenu">
 <node oor:name="name.SuperbChemistry.AddonMenu.SuperbChemistry" oor:op="replace">

Tento príklad je najjednoduchší – v uvedených riadkoch je pridaný odkaz na makro do menu Nástroje | Přídavky.

Vlastné menu

Vlastné menu „Chemie“ s podmenu „Formátovaní“Vlastné menu „Chemie“ s podmenu „Formátovaní“

<node oor:name="OfficeMenuBar">
 <node oor:name="name.SuperbChemistry.OfficeMenuBar.SuperbChemistry" oor:op="replace">
  <prop oor:name="Context" oor:type="xs:string">
   <value>com.sun.star.text.TextDocument</value>
  </prop>
  <prop oor:name="Title" oor:type="xs:string">
   <value xml:lang="sk">Chémia</value>
   <value xml:lang="cs">Chemie</value>
  </prop>
  <node oor:name="Submenu">
   <node oor:name="menu01" oor:op="replace">
    <prop oor:name="Context" oor:type="xs:string">
     <value>com.sun.star.text.TextDocument</value>
    </prop>
    <prop oor:name="Title" oor:type="xs:string">
     <value xml:lang="sk">Formátovanie</value>
     <value xml:lang="cs">Formátovaní</value>
    </prop>
    <prop oor:name="Target" oor:type="xs:string">
     <value>_self</value>
    </prop>
    <node oor:name="Submenu">
     <node oor:name="menu01.menu01" oor:op="replace">

Nakoniec sme si nechali príklad definície vlastného menu. A aby príklad nebol iba jednoduchý, zároveň je v ňom zadefinované aj podmenu. Ale poďme po poriadku. V riadkoch:

<node oor:name="OfficeMenuBar">
 <node oor:name="name.SuperbChemistry.OfficeMenuBar.SuperbChemistry" oor:op="replace">
  <prop oor:name="Context" oor:type="xs:string">
   <value>com.sun.star.text.TextDocument</value>
  </prop>
  <prop oor:name="Title" oor:type="xs:string">
   <value xml:lang="sk">Chémia</value>
   <value xml:lang="cs">Chemie</value>
  </prop>

je zadefinovaný názov menu Chémia (Chemie), ktorý sa zobrazuje v hlavnom menu (automaticky medzi položkou Nástroje a Okno). V riadkoch:

<node oor:name="Submenu">
 <node oor:name="menu01" oor:op="replace">
  <prop oor:name="Context" oor:type="xs:string">
   <value>com.sun.star.text.TextDocument</value>
  </prop>
  <prop oor:name="Title" oor:type="xs:string">
   <value xml:lang="sk">Formátovanie</value>
   <value xml:lang="cs">Formátovaní</value>
  </prop>

je zadefinované podmenu, ktoré je nazvané Formátovanie (Formátovaní). Pravdaže, v prípade potreby tu môžu byť zadefinované aj ďalšie položky – či už ďalšie podmenu alebo priame odkazy na makrá.

V príklade, ktorý sme uviedli, je vlastné volanie makra zadefinované v riadkoch:

<node oor:name="Submenu">
 <node oor:name="menu01.menu01" oor:op="replace">

Týmto sme ukončili možnosti, ktoré nám ponúka OpenOffice.org pri tvorbe rozšírení v oblasti volania makier, a preto sa na budúce budeme venovať problematike rozšírení, ktoré neobsahujú makrá.

(Jako ve škole) Průměr: 1,00 | Hodnotilo: 1
 

Přidat názor

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Július Pastierik

Július Pastierik

 
 
 
woo jaw demo hz