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:
 
Příklad pro jazyk JavaScript:
var aArgm = pMe.Arguments;
pMe.Items("/WCombo").SelectedIndex = aArg.GetItem(0);
pMe.Items("/WCheck").Value = aArg.GetItem(1);
pMe.Items("/WEdit").Value = aArg.GetItem(2);
---------
Příklad pro jazyk VBScript:
Dim aArgm
aArgm = pMe.Arguments
pMe.Items("/WCombo").SelectedIndex = aArg(0)
pMe.Items("/WCheck").Value = aArg(1)
pMe.Items("/WEdit").Value = aArg(2)

2) V události onButtonUp tlačítka OK ukončit okno s příznakem "ok".
 
Příklad pro jazyk JavaScript:
---------
Příklad pro jazyk VBScript:

3) V události onButtonUp tlačítka Storno ukončit okno bez příznaku.
 
Příklad pro jazyk JavaScript:
---------
Příklad pro jazyk VBScript:

4) V události onPanelStopEnd objektu PmiRoot pomocí vlastnosti ReturnValue odešleme zpět hodnotu vyčtenou z editačních grafických prvků.
 
Příklad pro jazyk JavaScript:
if (pEvent.sReason == "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;
}
---------
Příklad pro jazyk VBScript:
If pEvent.sReason = "ok" Then
   Dim aVal(2), val1
   aVal(0) = pMe.Items("/WCombo").SelectedIndex
   val1 = pMe.Items("/WCheck").Value
   If val1 Then
     val1 = -1
   Else
     val1 = 0
   End If
   aVal(1) = val1
   aVal(2) = pMe.Items("/WEdit").Value
   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 vyvolá uživatelskou metodu "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:
 
Příklad pro jazyk JavaScript:
arr.SetItem(2, 0);
arr.SetItem(-1, 1);
arr.SetItem("Promotic", 2);
var oExtra = Pm.CreatePmMap();
oExtra.onClose = Pm.CreatePmAction(1, pMe, "ClosePanel");
pMe.PmPanel.OpenView("/ModalDlg", "target:_blank;modal:1;", "", oExtra);
-------------------------
Příklad pro jazyk VBScript:
Dim oExtra, val0, val1, val2
val0 = 2
val1 = true
val2 = "Promotic"
Set oExtra = Pm.CreatePmMap()
oExtra.mapSetValueAt "Arguments", Array(val0,val1,val2)
oExtra.mapSetValueAt "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 uživatelskou metodu "ClosePanel" s parametry oSystem a oPrivate. Metoda bude ve skriptu obsahovat:
 
Příklad pro jazyk JavaScript:
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);
}
-------------------------
Příklad pro jazyk VBScript:
Dim aVal
aVal = oSystem.ReturnValue
If Pm.IsValid(aVal) Then
  Dim val0, val1, val2
  val0 = aVal(0)
  val1 = aVal(1)
  val2 = aVal(2)
  Pm.Debug "val0=" & val0 & ", val1=" & val1 & ", val2=" & val2
End If
 
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 webovými prohlížeči (Chrome, Opera).

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