Makrá v OpenOffice.org 06/2008

Július Pastierik  /  30. 06. 2008, 00:00

V dnešnom dieli seriálu o makrách v OpenOffice.org si ukážeme, ako z makra dokážeme vytvoriť rozšírenie.

Pri popise rozšírenia pre prípravu slov do slovenského slovníka sme sľúbili, že prinesieme aj jeho zdrojové kódy. Skôr, ako sa dostaneme k tomuto makru, musíme sa ešte venovať problematike rozšírení, pretože toto makro je naň úzko previazané.

Pri praktickom programovaní makier potrebujeme z neho mnohokrát urobiť rozšírenie, pomocou ktorého sa makro automaticky vloží do OpenOffice.org vrátane možností jeho ľahkého volania či už pomocou menu alebo vložených panelov nástrojov. Pozrime sa preto na to, ako to dokážeme urobiť.

Hneď na začiatok uveďme, že tento návod rozhodne nie je úplný, ale iba popíše niektoré základné veci, ktoré musíme pri tvorbe rozšírení dodržať. Pretože rozšírenia sú vlastne ZIP súbory, ich štúdiom sa následne môžeme naučiť aj ďalšie „finty“. V neposlednom rade je potom na stránkach vývojárov OpenOffice.org k dispozícii dokumentácia pre tvorbu rozšírení.

Dosť však bolo teórie. Pri praktickej tvorbe rozšírenia je samozrejmé, že makro najprv odladíme v prostredí OpenOffice.org. Pokiaľ vieme, že z neho budeme rozbiť rozšírenie je najlepšie, ak ho uložíme do osobitnej knižnice. Táto je potom k dispozícii ako samostatný adresár v používateľskom adresári OpenOffice.org (v OS Windows ho nájdeme v adresári „C:Documents and Settings používateľ Application DataOpenOffice.org2userbasic“).

Teraz si pripravíme na inom mieste adresár, ktorý bude tvoriť v konečnom dôsledku vlastné rozšírenie (napríklad „SK_SK_Slovnik“). Do neho skopírujeme 1:1 adresár knižnice s makrami, z ktorého ideme vytvárať rozšírenie (osobne používam úplne rovnaké názvy). Ďalej si musíme v tomto adresári vytvoriť adresár „META-INF“ – pozor, musí sa menovať presne takto vrátane dodržania veľkosti písmen.

Vnutorny zoznam suborov a adresarov rozsirenia

Pre ďalšiu prácu potrebujeme textový editor, ktorý umožňuje pracovať so súbormi v kódovaní „UTF-8“. Osobne mi pre túto prácu najviac vyhovuje český editor PSPad, ktorý je možné používať zadarmo aj pre komerčné účely. O tom, čo všetko umožňuje si prinesieme informáciu vrámci recenzií programov.

PsPad

V adresári „META-INF“ teraz vytvoríme súbor „manifest.xml“ s nasledujúcim obsahom:

<?xml version="1.0" encoding="UTF-8"?>
<manifest:manifest>
 <manifest:file-entry manifest:full-path="WriterWindowState.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>
 <manifest:file-entry manifest:full-path="addon.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>
 <manifest:file-entry manifest:full-path="SK_SK_Slovnik/" manifest:media-type="application/vnd.sun.star.basic-library"/>
</manifest:manifest>

Týmto zápisom oznamujeme OpenOffice.org, kde sa nachádzajú ostatné popisné časti rozšírenia.

Teraz sa vrátime do hlavného adresára, kde vytvoríme tri súbory: „addon.xcu“, „WriterWindowState.xcu“ a „description.xml“.

V súbore „description.xml“ definujeme základné parametre rozšírenia, ako je jeho názov (pozor, musí byť vrámci OpenOffice.org jedinečný), verzia, link, kde je uložený a pod. Jeho obsah môže byť napríklad takýto:

<?xml version="1.0" encoding="UTF-8"?>
<description xmlns="openoffice.org/extensions/description/2006" xmlns:xlink="w3.org/1999/xlink">
 <version value="0.5.7-b2" />
 <identifier value="SK_SK_Slovnik.addon" />
 <update-information>
  <src xlink:href="/images/user/pastierik/ooomakra/SK_SK_Slovnik.oxt"/>
 </update-information>
</description>

V súbore „WriterWindowState.xcu“ teraz budeme definovať, že do OpenOffice.org pridávame nový panel nástrojov, ktorý nazveme úplne rovnako, ako rozšírenie – „SK_SK_Slovnik“:

<?xml version='1.0' encoding='UTF-8'?>
<oor:component-data xmlns:oor="openoffice.org/2001/registry" xmlns:xs="w3.org/2001/XMLSchema" oor:name="WriterWindowState" oor:package="org.openoffice.Office.UI">
 <node oor:name="UIElements">
  <node oor:name="States">
   <node oor:name="private:resource/toolbar/addon_name.JP.addon.SK_SK_Slovnik" oor:op="replace">
    <prop oor:name="UIName" oor:type="xs:string">
     <value xml:lang="en-US">SK_SK_Slovnik</value>
    </prop>
   </node>
  </node>
 </node>
</oor:component-data>

Samozrejme, nie sme obmedzení iba na jeden panel. Napríklad pomocou tejto definície zadefinujeme až štyri panely nástrojov („JP_formatuj_dokument“, „JP_formatuj_medzery“, „JP_specialna_zamena“ a „JP_medzery_on_off“):

<?xml version='1.0' encoding='UTF-8'?>
<oor:component-data xmlns:oor="openoffice.org/2001/registry" xmlns:xs="w3.org/2001/XMLSchema" oor:name="WriterWindowState" oor:package="org.openoffice.Office.UI">
 <node oor:name="UIElements">
  <node oor:name="States">

   <node oor:name="private:resource/toolbar/addon_name.JP_format_zamen.addon.JP_formatuj_dokument" oor:op="replace">
    <prop oor:name="UIName" oor:type="xs:string">
     <value xml:lang="en-US">JP_formatuj_dokument</value>
    </prop>
   </node>

   <node oor:name="private:resource/toolbar/addon_name.JP_format_zamen.addon.JP_formatuj_medzery" oor:op="replace">
    <prop oor:name="UIName" oor:type="xs:string">
     <value xml:lang="en-US">JP_formatuj_medzery</value>
    </prop>
   </node>

   <node oor:name="private:resource/toolbar/addon_name.JP_format_zamen.addon.JP_specialna_zamena" oor:op="replace">
    <prop oor:name="UIName" oor:type="xs:string">
     <value xml:lang="en-US">JP_specialna_zamena</value>
    </prop>
   </node>

   <node oor:name="private:resource/toolbar/addon_name.JP_format_zamen.addon.JP_medzery_on_off" oor:op="replace">
    <prop oor:name="UIName" oor:type="xs:string">
     <value xml:lang="en-US">JP_medzery_on_off</value>
    </prop>
   </node>

  </node>
 </node>
</oor:component-data>

Nakoniec musíme v súbore „addon.xcu“ zadefinovať vlastný obsah panela nástrojov. Nasledujúca definícia obsahuje popis iba jedného jediného tlačidla:

<?xml version='1.0' encoding='UTF-8'?>
<oor:node xmlns:oor="openoffice.org/2001/registry" xmlns:xs="w3.org/2001/XMLSchema" oor:name="Addons" oor:package="org.openoffice.Office">
 <node oor:name="AddonUI">
  <node oor:name="OfficeToolBar">
   <node oor:name="name.JP.addon.SK_SK_Slovnik" oor:op="replace">

    <node oor:name="btn01" 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">Príprava slova pre slovník</value>
     </prop>
     <prop oor:name="URL" oor:type="xs:string">
      <value>macro:///SK_SK_Slovnik.Slovnik.Skontroluj_slovo</value>
     </prop>
     <prop oor:name="Target" oor:type="xs:string">
      <value>_self</value>
     </prop>
     <prop oor:name="ImageIdentifier" oor:type="xs:string">
      <value>%origin%/SK_SK_Slovnik/skontroluj</value>
     </prop>
    </node>

   </node>
  </node>
 </node>
</oor:node>

Pri niektorých položkách sa teraz pristavíme trochu podrobnejšie.
Zápis „<node oor:name="btn01" oor:op="replace">“ určuje vnútorný názov tlačidla („btn01“). Na tomto názve záleží iba v rámci príslušného rozšírenia a dokonca iba v rámci definície jedného panela nástrojov.

Zápis „<value>com.sun.star.text.TextDocument</value>“ hovorí o tom, že toto tlačidlo panela nástrojov bude prístupné v module Writer. Pre modul Calc by musel mať tvar „<value>com.sun.star.sheet.SpreadsheetDocument</value>“.

Zápis „<prop oor:name="Title" oor:type="xs:string"> <value xml:lang="sk">Príprava slova pre slovník</value>“ je nápomocný text, ktorý sa zobrazí, keď prejdeme nad príslušné tlačidlo.

Zápis „<prop oor:name="URL" oor:type="xs:string"> <value>macro:///SK_SK_Slovnik.Slovnik.Skontroluj_slovo</value>“ hovorí o tom, ktorá procedúra sa pri stlačení tlačidla bude volať.

TlačidloZápis <prop oor:name="ImageIdentifier" oor:type="xs:string"> <value>%origin%/SK_SK_Slovnik/skontroluj</value>“ hovorí o tom, ktoré tlačidlo sa bude zobrazovať. Tlačidlá musíme definovať špecificky v BMP formáte. Názov tlačidla je „skontroluj“ (musí byť jednoznačné v rámci príslušného rozšírenia), pričom názov súboru musí byť „skontroluj_16.bmp“ a, pokiaľ chceme definovať aj veľké tlačidlá, tak „skontroluj_26.bmp“. Ako naznačujú čísla pri názvoch, rozmer obrázku musí byť 16x16 (26x26) bodov. Ako priehľadná farba sa používa fialová farba, ako je vidno na zosnímanej definícii tlačidla. Vlastné súbory je potrebné uložiť do adresára, kde je definícia makra.

Obsah adresára s makrami a tlačidlami

Keď máme všetky súbory pripravené, označíme ich a vytvoríme z nich ZIP súbor. Tomuto následne premenujeme príponu na OXT a rozšírenie máme hotové. Z makier odstránime knižnicu, z ktorej sme rozšírenie pripravovali a nič nám nebráni v jeho inštalácii.

Na budúce uvedieme zdrojové texty rozšírenia pre prácu so slovníkmi, pričom sa znovu vrátime k dnešnému dielu, pretože do rozšírenia budeme vkladať aj iné (konkrétne textové) súbory s definíciou gramatiky.