Promotic
WikipediaLinkedInYoutubeTwitterFacebook

Jak pracovat s modálními okny

Tato kapitola popisuje jak vytvářet a používat v systému PROMOTIC modální okna.
 
Modální okno je okno, které při svém otevření zakáže ovládat všechna ostatní aplikační okna a uživatel může ovládat pouze toto okno. Po zavření tohoto okna se pak ovládání vrátí oknu, ze kterého bylo modální okno otevřeno.

Modální okno je obvykle určeno k zadávání (editaci) údajů. Uživatel by měl zadat údaje a zavřít okno a v době zadávání by se neměl "dostat nikam jinam".

Během otevření modálního okna nelze ovládat zbytek aplikace a proto by se měly modální okna používat s rozumem jen na rychlé zadávání nebo ovládání tak, aby modální okno nemuselo být dlouho otevřeno.

 

Jak vytvořit modální okno

Předpokládejme, že je vytvořen obraz (objekt PmPanel), který obsahuje jeden editační prvek PmiWCombo, PmiWCheck a PmiWEdit a má dvě ovládací tlačítka PmiButton (OK a Storno).
1) V události onPanelStartEnd objektu PmiRoot lze přečíst vlastnost Arguments a zobrazit ji v editačních grafických prvcích:
 
JavaScriptVBScriptVyber a zkopíruj do schránky

var aArgm = pMe.Arguments;
pMe.Items("/WCombo").SelectedIndex = aArgm.GetItem(0);
pMe.Items("/WCheck").Value = aArgm.GetItem(1);
pMe.Items("/WEdit").Value = aArgm.GetItem(2);

2) V události onButtonUp tlačítka OK ukončit okno s příznakem "ok".
 
JavaScriptVBScriptVyber a zkopíruj do schránky

pMe.Root.Close("ok");

3) V události onButtonUp tlačítka Storno ukončit okno bez příznaku.
 
JavaScriptVBScriptVyber a zkopíruj do schránky

pMe.Root.Close("");

4) V události onPanelStopEnd objektu PmiRoot pomocí vlastnosti ReturnValue odešleme zpět hodnotu vyčtenou z editačních grafických prvků.
 
JavaScriptVBScriptVyber a zkopíruj do schránky

if (pEvent.Reason == "ok")
{
  var v1 = pMe.Items("/WCombo").SelectedIndex;
  var v2 = pMe.Items("/WCheck").Value;
  var v3 = pMe.Items("/WEdit").Value;
  var aVal = Pm.CreatePmArray().Create(3);

  aVal.SetItem(v1, 0);
  aVal.SetItem(v2 = v2 ? -1 : 0, 1);
  aVal.SetItem(v3, 2);

  pMe.ReturnValue = aVal;
}
 

Jak otevřít modální okno a po jeho zavření zpracovat přijaté hodnoty

Předpokládejme, že v rodičovském obraze je tlačítko (PmiButton), které vyvolá modální okno. Níže uvedený příklad je doporučovaný způsob jak pomocí objektů PmMap a PmAction předat a následně přijmout hodnoty z modálního okna.

Vytvoří se proměnná oExtra, což bude objekt typu PmMap a:

- do vlastnosti oExtra.Arguments se nastaví vstupní hodnota modálního okna.
- do vlastnosti oExtra.onClose se nastaví akce, která při ukončení okna volá metodu projektanta "ClosePanel".

Následně se vyvolá modální okno. Po jeho ukončení je vracená hodnota zpracována v metodě "ClosePanel".


1) Skript v události onButtonUp tlačítka:
 
JavaScriptVBScriptVyber a zkopíruj do schránky

var arr = Pm.CreatePmArray().Create(3);
arr.SetItem(2, 0);
arr.SetItem(-1, 1);
arr.SetItem("Promotic", 2);

var oExtra = Pm.CreatePmMap();
oExtra.Arguments = arr;
oExtra.onClose = Pm.CreatePmAction(1, pMe, "ClosePanel");
pMe.PmPanel.OpenView("/ModalDlg", "target:_blank;modal:1;", "", oExtra);

2) V tlačítku v záložce Methods je nutno vytvořit novou metodu "ClosePanel" s parametry oSystem a oPrivate. Metoda bude ve skriptu obsahovat:
 
JavaScriptVBScriptVyber a zkopíruj do schránky

var aVal = oSystem.ReturnValue;
if (Pm.IsValid(aVal))
{
  var val0 = aVal.GetItem(0);
  var val1 = aVal.GetItem(1);
  var val2 = aVal.GetItem(2);
  Pm.Debug("val0=" + val0 + ", val1=" + val1 + ", val2=" + val2);
}
 
Poznámka

Zastaralý a nedoporučovaný způsob, je otevření modálního okna metodou OpenViewModal. Tehdy je okno ze skriptu vyvoláno synchroně a čeká na ukončení okna uživatelem. Pokud je okno zpřístupněno pro Web, pak není tento způsob podporován některými Web prohlížeči (Chrome, Opera).

© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice