Makrá v OpenOffice.org 5/VI. – Textové zoznamy 1.

Július Pastierik  /  02. 11. 2006, 00:00

Pri praktickej práci niekedy požadujeme, aby sme si mohli vyberať hodnoty z určitého preddefinovaného zoznamu. A práve na takéto typy makier sa zameriame v dnešnom pokračovaní nášho seriálu.

Určite sa už mnohí stretli s problematikou, keď si potrebovali vybrať určitú množinu údajov (napr. kalendárne mesiace), podľa ktorých chceli následne vykonať určité operácie. Preto si v dnešnom dieli ukážeme, ako si dokážeme vytvoriť jednoduchý dialóg so základnými funkciami pre presúvanie údajov z preddefinovaného zoznamu do druhého. Pravdaže, následné spracovanie vybraných údajov už záleží iba od od konkrétnych požiadavok toho-ktorého používateľa a nebudeme sa tým teraz zaoberať.

Ako prvé, čo urobíme, je pochopiteľne vlastný návrh príslušného dialógu (povedzme si ho nazveme „Dialog2“). Ten sa bude skladať z dvoch zoznamov, pričom do prvého z nich si zároveň zadefinujeme vstupné hodnoty. Tieto sa zadávajú v položke „Zoznam záznamov“, pričom musíme upozorniť na to, že pri ich zadávaní sa musí na ich oddelenie používať kombinácia kláves „Shift“+“Enter“. Ukončenie zadávania následne vykonáme zadaním obyčajnej klávesy „Enter“.

Výber zoznamuPravdaže, nemusíme používať iba tento spôsob inicializácie, a hodnoty môžeme zadať podobne, ako sme to robili pri číselných alebo textových vstupoch v príslušnom makre pred spustením vlastného dialógu.

Okrem definície záznamov si musíme do dialógu zadefinovať aj tlačidlá pre presun údajov medzi jednotlivými okienkami. Aby sme ukázali všetky možnosti presunu údajov, zadefinujeme si štyri tlačidlá, ktoré budú postupne reprezentovať možnosť presunu jedného vybraného prvku alebo všetkých prvkov zo zdrojového zoznamu do výberu a prípadné spätné vrátenie jedného prvku alebo všetkých prvkov nazad do pôvodného zdrojového zoznamu. Spätné vrátenie je určené vlastne na opravy a preto nebudeme v dialógu definovať klávesu „Cancel“.

Vloženie zdrojových dát

Pri jednotlivých tlačidlách musíme, pochopiteľne, definovať aj inicializačné procedúry, ktoré sa vykonajú po ich stlačení.

sub PresunVybrany_Initiated
 REM Procedúra pre presun vybraného prvku zo zdrojového zoznamu
 dim vstupne_pole, vystupne_pole as object

 ' Priradíme si riadenie zoznamov k dvom pomocným premenným
 vstupne_pole=dlg.getControl("Zoznam_1") ' Zdrojový zoznam
 vystupne_pole=dlg.getControl("Zoznam_2") ' Vytváraný zoznam

 if vstupne_pole.SelectedItem>0 then
  ' Ak sme vybrali nejaký prvok v zdrojovom zozname, tak ho pridáme na začiatok vytváraného zoznamu
  vystupne_pole.AddItem(vstupne_pole.SelectedItem,0)
  ' Vybraný prvok následne vymažeme zo zdrojového zoznamu
  vstupne_pole.removeItems(vstupne_pole.SelectedItemPos,1)
 end if
end sub

sub PresunVsetko_Initiated
 REM Procedúra pre presun všetkých prvkov zo zdrojového zoznamu
 dim i as integer
 dim vstupne_pole as object

 vstupne_pole=dlg.getControl("Zoznam_1")

 ' Cyklus pre všetky prvky pôvodného zoznamu
 for i=lbound(dlg.model.Zoznam_1.StringItemList()) to ubound(dlg.model.Zoznam_1.StringItemList())
  ' Vyberieme vždy prvý prvok (má index 0), pretože následným vymazaním sa zoznam posúva
  vstupne_pole.SelectItem(dlg.model.Zoznam_1.StringItemList(0),1)
  ' Prevedieme vlastný presun pomocou už naprogramovanej procedúry pre presun jedného vybraného prvku
  PresunVybrany_Initiated
 next i
end sub

sub VratVybrany_Initiated
 REM Procedúra pre vrátenie vybraného prvku do zdrojového zoznamu
 dim vstupne_pole, vystupne_pole as object

 vstupne_pole=dlg.getControl("Zoznam_1")
 vystupne_pole=dlg.getControl("Zoznam_2")

 if vystupne_pole.SelectedItem>0 then
  vstupne_pole.AddItem(vystupne_pole.SelectedItem,0)
  vystupne_pole.removeItems(vystupne_pole.SelectedItemPos,1)
 end if
end sub

sub VratVsetko_Initiated
 REM Procedúra pre vrátenie všetkých prvkov do zdrojového zoznamu
 dim i as integer
 dim vystupne_pole as object

 vystupne_pole=dlg.getControl("Zoznam_2")

 for i=lbound(dlg.model.Zoznam_2.StringItemList()) to ubound(dlg.model.Zoznam_2.StringItemList())
  vystupne_pole.SelectItem(dlg.model.Zoznam_2.StringItemList(0),1)
  VratVybrany_Initiated
 next i
end sub

Teraz si trochu vysvetlíme použité metódy, aby sme si v prípade potreby mohli naprogramovať aj makrá s inými vlastnosťami.

Metóda AddItem(vkladaný prvok, pozícia) je určená na vkladanie prvkov a má dva parametre – prvý je text, ktorý vkladáme do príslušného zoznamu a druhý je pozícia, na ktorú ho vkladáme. Pozor, pri textových poliach každá Indexácia začína od 0. Pomocou tejto metódy by sme mohli inicializovať zoznam mesiacov napr. takto:

sub Init_mesiace
 dim vstupne_pole as object

 vstupne_pole=dlg.getControl("Zoznam_1")

 ' Prvky budeme vkladať na začiatok, preto ich musíme zadať v poradí od posledného ku prvému
 vstupne_pole.AddItem("December",0)
 vstupne_pole.AddItem("November",0)
 vstupne_pole.AddItem("Október",0)
 vstupne_pole.AddItem("September",0)
 vstupne_pole.AddItem("August",0)
 vstupne_pole.AddItem("Júl",0)
 vstupne_pole.AddItem("Jún",0)
 vstupne_pole.AddItem("Máj",0)
 vstupne_pole.AddItem("Apríl",0)
 vstupne_pole.AddItem("Marec",0)
 vstupne_pole.AddItem("Február",0)
 vstupne_pole.AddItem("Január",0)
end sub

Metóda RemoveItems(pozícia prvku, počet) je určená na mazanie prvkov a má dva parametre – prvý je pozícia prvého vymazávaného prvku a druhá počet vymazávaných prvkov.

Ako ste si mohli všimnúť, zoznam všetkých prvkov nájdeme v položke StringItemList, t.j. v našom prípade dlg.model.Zoznam_1.StringItemList alebo dlg.model.Zoznam_2.StringItemList.

Spustené makro

Nakoniec si ešte uvedieme príklad makra pre vlastnú inicializáciu tohto dialógu:

sub makro_zoznam
 DialogLibraries.LoadLibrary("Standard")

 dlg=CreateUnoDialog(DialogLibraries.Standard.Dialog2)

 dlg.Execute()
 REM tu si musí každý vložiť svoje príkazy pre spracovanie vybraných prvkov zoznamu
 dlg.dispose()
end sub

Na budúce: Ďalšie vstupné polia, alebo textové zoznamy na pokračovanie.



Neprehliadnite: