Makrá v OpenOffice.org 5/XI. – Formátovanie dokumentu 3

Július Pastierik  /  21. 02. 2007, 00:00

V ďalšom pokračovaní nášho seriálu o programovaní makier si ukážeme, ako sa dá vytvoriť dialóg s príslušnými makrami pre ukladanie nastavení do rôznych profilov.

V minulom dieli sme si ukázali, ako je možné ukladať súbory do adresárov, ktoré sú závislé od používateľa počítača. Dnes tieto služby využijeme naplno a rozšírime ich ešte o možnosť vytvárania vlastných používateľských profilov.

Na tento účel si zadefinujeme ďalší dialóg,ktorý nazveme povedzme „Dialog_Profily“. Vložíme do neho nasledovné prvky:
kombinované rozbalovacie textové pole „Zoznam_Profilov“, v ktorom budeme mať následne zobrazené všetky profily;
vstupné textové pole „Novy_Profil“ pre zadávanie názvov nových profilov,
tlačidlo „Pridaj“ pre potvrdenie nového profilu;
tlačidlo „Zmeň“ pre editovanie vybraného profilu;
tlačidlo „Vymaž“ pre vymazanie vybraného profilu;
tlačidlá „OK“ a „Cancel“ pre ukončenie činnosti.

Dialog_profily návrh

Okrem toho si môžeme pridať informačný text, že „Štandardne je nastavený profil "Default", ktorý nie je možné vymazať“. Pokiaľ chceme, aby sa tento text zobrazoval na viacero riadkov, je potrebné na príslušných miestach vložiť kombináciu kláves „Shift“+“Enter“, ktorá to umožňuje.

Teraz sa pozrime na vlastné makrá, ktoré budeme pre prácu potrebovať. Vzhľadom na to, že sú úzko previazané aj s dialógom pre nastavovanie parametrov formátovania dokumentu (ktorý sme si už uvádzali) a s vlastnými funkciami pre toto formátovanie, je ich značné množstvo a preto ich neuvedieme naraz, ale postupne v niekoľkých dieloch tohto seriálu. Dnes sa budeme venovať iba tým, ktoré priamo súvisia s dialógom „Dialog_Profily“.

Vytvorme si v zozname makier nový modul „Profily_funkcie“, kde vložíme (zatiaľ) nasledovné definície premenných a procedúry (budeme ich priebežne komentovať):

dim dlg as object
dim zoznam_profilov(50) as string
dim pocet_profilov as integer
global priznaky_formatovania(16) as integer
global aktualny_profil as string
dim oVstupy as object

Objektová premenná „dlg“ je určená na vlastné priradenie dialógu „Dialog_Proflily“. Musí byť definovaná externe preto, lebo sa na ňu odvolávame vo funkciách, ktoré sú priradené k tlačidlám „Pridaj“, „Zmeň“ a „Vymaž“.

V premennej „zoznam_profilov“ budeme mať uložené názvy profilov. Jej rozsah sme si dali 50 profilov, čo je určite viac než dostatočný počet pre jedného používateľa. Pokiaľ nie, stačí jednoduchá zmena tohto parametra. Táto premenná je určená na testovanie názvov profilov pri ich pridávaní, aby sme nemali dva rovnaké profily. Počet profilov máme uložený v nasledujúcej premennej „pocet_profilov“.

S globálnou premennou „priznaky_formatovania“ sa dnes ešte nestretneme, lebo je určená pre dialóg „Dialog_formatovanie“, ktorý sme si už navrhovali, ale jeho makrá budeme popisovať až nabudúce. Táto premenná je preto globálna, lebo sa podľa nej riadi celá množina funkcií pre formátovanie dokumentu, ktoré si tak isto budeme uvádzať až nabudúce.

Do globálnej premennej „aktualny_profil“ uložíme nakoniec vybraný profil. Podobne, ako premenná „priznaky_formatovania“ je určená pre neustálu informáciu o tom, aký profil práve chceme používať pre formátovanie dokumentu.

Pomocná premenná „oVstupy“ je určená pre pridávanie a odoberanie položiek do zoznamu profilov vo vlastnom dialógu.

A teraz sa pozrime na vlastné funkcie. Pretože makrá sú pomerne dobre okomentované, nebudeme bližšie rozoberať to, ako sú naprogramované.

function inicializacny_subor (nazov_suboru as string) as string
 ' Funkcia vracia názov inicializačného súboru v „UserConfig“ adresári aktuálneho používateľa
 ' K názvu súboru pridávame automaticky príponu „.dat“
 dim cesty as object
 cesty=CreateUnoService("com.sun.star.util.PathSettings")
 inicializacny_subor=cesty.UserConfig+"/"+nazov_suboru+".dat"
end function

sub zapis_nazvy_profilov
 ' Procedúra je určená na zápis názov profilov do definičného súboru
 dim i, subor as integer

 subor = Freefile
 open inicializacny_subor("Zoznam_Profilov_Formatovania_Dokumentov") for Output as #subor
 for i=0 to pocet_profilov
  print #subor,zoznam_profilov(i)
 next i
 close #subor
end sub

sub init_dialog_profily
 ' Inicializácia zoznamu profilov z definičného súboru
 ' Vždy máme minimálne profil „Default“
 dim i, subor as integer
 dim riadok as string

 zoznam_profilov(0)="Default"
 pocet_profilov=0
 oVstupy=dlg.getControl("Zoznam_Profilov")
 oVstupy.AddItem("Default",0)

 ' Ak nastavovací súbor neexistuje, vytvoríme ho
 if not fileexists(inicializacny_subor("Zoznam_Profilov_Formatovania_Dokumentov")) then
   zapis_nazvy_profilov
 endif
 ' Teraz súbor určite existuje - načítame ho
 subor = Freefile
 open inicializacny_subor("Zoznam_Profilov_Formatovania_Dokumentov") for Input as #subor
 ' Inicializácia pomocného počítadla počtu profilov
 i=0
 While not eof(subor)
  Line Input #subor, riadok
  if i>0 then
   ' Profil Default už máme zapísaný v zozname, zaujímajú nás iba tie ostatné
   pocet_profilov=pocet_profilov+1 ' aktuálny počat profilov
   oVstupy.AddItem(riadok,pocet_profilov) ' pridanie profilu do dialógu
   zoznam_profilov(pocet_profilov)=riadok ' pridanie profilu do zoznamu pre testovanie
  end if
  i=i+1
 wend
 close #subor

 dlg.model.Zoznam_Profilov.Text="Default" ' Aby sa nám zobrazil v zozname prvý profil

end sub

sub Vloz_profil_Initiated
 ' Túto procedúru musíme priradiť k tlačidlu „Pridaj“ !

 pom_text=dlg.model.Novy_profil.Text
 if pom_text<>"" then
  ' Názov musí byť zadaný
  existuje=false
  for i=0 to pocet_profilov
   ' Otestujeme či profil s daným názvom existuje bez ohľadu na veľkosť písmen
   existuje=existuje or (ucase(pom_text)=ucase(zoznam_profilov(i)))
  next i
  if not existuje then
   ' Ak profil neexistuje, pridáme ho do zoznamu
   oVstupy=dlg.getControl("Zoznam_Profilov")
   pocet_profilov=pocet_profilov+1
   zoznam_profilov(pocet_profilov)=pom_text
   oVstupy.AddItem(pom_text,pocet_profilov)
  else
   ' Oznam o tom, že nie je možné pridať už existujúci profil
   msgbox "Profil "+pom_text+" už existuje."
  end if
 else
  'Oznam o tom, že názov musí byť zadaný
  msgbox "Názov musí byť zadaný"
 end if
end sub

sub Vymaz_profil_Initiated
 ' Túto procedúru musíme priradiť k tlačidlu „Vymaž“ !

 oVstupy=dlg.getControl("Zoznam_Profilov")
 ' Priradenie názvu vybraného profilu do pomocnej premennej
 pom_text=dlg.model.Zoznam_Profilov.Text
 if pom_text<>"Default" then
  ' Mažeme iba iné profily ako je „Default“
  for i=1 to pocet_profilov
   ' Vyhľadáme pozíciu vybraného profilu
   if pom_text=zoznam_profilov(i) then
    ' Vymažeme profil z dialógu
    oVstupy.removeItems(i,1)
    for j=i to pocet_profilov-1
     ' Vymažeme profil z pomocného zoznamu a posunieme položky v zozname
     zoznam_profilov(j)=zoznam_profilov(j+1)
    next j
   end if
  next i
  ' Upravíme počet záznamov
  pocet_profilov=pocet_profilov-1
  ' Nastavíme zobrazovaný text v rozbaľovacom poli, lebo predtým zobrazený sme práve vymazali
  dlg.model.Zoznam_Profilov.Text="Default"
 else
  ' Oznam o tom, že nemôžeme vymazať profil „Default“
  msgbox "Profil Deafault nie je možné vymazať!"
 end if

end sub

sub Zmen_profil_Initiated
 ' Túto procedúru musíme priradiť k tlačidlu „Zmeň“ !

 ' Uloženie názvu vybraného profilu do pomocnej premennej
 pom_text=dlg.model.Zoznam_Profilov.Text
 ' Nastavenie parametrov pre formátovanie
 Spusti_dialog_formatovania(pom_text)

end sub

sub Nastav_Profil_Formatovania
 ' Vlastná funkcia pre spustenie dialógu „Dialog_profily“

 DialogLibraries.LoadLibrary("Vlastne_makra")
 dlg=CreateUnoDialog(DialogLibraries.Vlastne_makra.Dialog_Profily)
 init_dialog_profily
 Citaj_definiciu_profilu("Default")

 if dlg.Execute()=1 then
  zapis_nazvy_profilov
  Aktualny_profil=dlg.model.Zoznam_profilov.text
 end if

 ' Ak nie je náhodou vybraný žiadny profil, nastaví sa profil „Default“
 if Aktualny_profil="" then
  Aktualny_profil="Default"
 end if
 Formatovanie.Nastav_formatovanie

 dlg.dispose()
end sub

Dialog_Profily

Procedúry „Spusti_dialog_formatovanie“ (bola volaná v procedúre „Zmen_profil_Initiated“) a „Formatovanie.Nastav_formatovanie“ (bola volaná v procedúre „Nastav_Profil_Formatovania“) budú uvedené v ďalších dieloch seriálu.

Na budúce: Procedúry dialógu pre nastavovanie parametrov formátovania dokumentu, alebo makier pribúda a pribúda.

Neprehliadnite: