Příklad: Vytvoří PmForm okno nakonfigurované jako výběr více položek ze seznamu
V jednom skriptu (např. po stisknutí tlačítka v události
onButtonUp). Na začátku jsou proměnné, které nastaví popis okna a tabulek. Dále proměnná
aList, která představuje seznam položek pro výběr, kde jednotlivé položky mají svou hodnotu a text pro zobrazení (v příkladu je emulovaná). A také proměnná
aSelect pomocí které lze určit které položky budou předvybrány. A ve funkci
onViewClose se pak nastaví jak se vybraný seznam položek zpracuje.
JavaScriptVyber a zkopíruj do schránky
// ****** Setting values ********
var sTitle = "Select n items from the list";
var sTitleL = "List of items";
var sTitleR = "Selected items";
var nTabColWidth = 18;
var oTableL, oTableR, oRowL, oRowR, iRow, iBodyRow, e, oArea11L, oArea12L, oBtnToRight, oBtnToLeft, oArea11R, oArea12R;
// aList = PmArray a two-dimensional field, where 1 column represents the identifier and the second text for display
var aList = Pm.CreatePmArray(2, 16, 2);
for (iRow = 0; iRow < aList.GetSize(1); iRow++)
{
aList.SetItem("id" + iRow, iRow, 0);
aList.SetItem("text" + iRow, iRow, 1);
}
// aSelect = one-dimensional array of preselected identifiers
var aSelect = Pm.CreatePmArray().Array1("id2", "id7");
// close the form with the OK button
function onViewClose(ev)
{
if (ev.CloseReason == "ok")
{
var nRows = oArea11R.RowCount;
var aSel = Pm.CreatePmArray(1, nRows);
for (iRow = 0; iRow < nRows; iRow++)
{
aSel.SetItem(oArea11R.GetRow(iRow).PrivateData, iRow);
}
// RETURN Array ID selected
Pm.Debug(aSel, 1);
}
}
// ****** END Setting parameters ********
// ******* LOAD FORM ***********************
var nBodyRowL = aList.GetSize(1);
var nBodyRowR = aSelect.GetSize(1);
nBodyRowL = nBodyRowL - nBodyRowR;
function onViewLoad(ev)
{
var oForm = ev.Form;
oForm.Title = sTitle;
oForm.BgColor = "#c0dcc0";
var oLay = oForm.CreateItem("layout", "Lay", null, "Subtype:horz;BodyHeightMode:resize;BodyWidthMode:resize;");
// XXXXXXXXXX init LEFT table XXXXXXXXXXXXXXXXXXX
oTableL = oLay.CreateItem("table", "id_tableL", null, "BodyHeightMode:resize;BodyWidthMode:resize;");
oTableL.InitRows(nBodyRowL, 1, 0);
oTableL.InitCols(1, 0);
oTableL.SetColWidth(nTabColWidth, 1, -1);
// Table Column width
oTableL.SetSel(0, 0);
// Table Set active row
oArea12L = oTableL.GetArea(12);
// TableArea 12=MainHead
oArea12L.BgColor = "#c0dcc0";
oArea12L.GetRow(0).GetCell(0).Value = sTitleL;
oArea11L = oTableL.GetArea(11);
// TableArea 11=MainBody
oArea11L.BgColor = "#ffffff";
oArea11L.HorzAlign = "left";
// XXXXXXXXXX CENTER buttons XXXXXXXXXXX
var oLayC = oLay.CreateItem("layout", "LayC", null, "Subtype:vert;");
// layer for center buttons
oBtnToRight = oLayC.CreateItem("button", "id_butt_add");
oBtnToRight.Value = ">>";
oBtnToRight.AddEvent("onAction", "ToRightButton", onRight);
oBtnToLeft = oLayC.CreateItem("button", "id_butt_clear");
oBtnToLeft.Value = "<<";
oBtnToLeft.AddEvent("onAction", "ToLeftButton", onLeft);
// XXXXXXXXXX init RIGHT table XXXXXXXXXXXXXX
oTableR = oLay.CreateItem("table", "id_tableR", null, "BodyHeightMode:resize;BodyWidthMode:resize;");
oTableR.InitRows(0, 1, 0);
oTableR.InitCols(1, 0);
oTableR.SetColWidth(nTabColWidth, 1, -1);
// Table Column width
oTableR.SetSel(0, 0);
// Table Set active row
oArea12R = oTableR.GetArea(12);
// TableArea 12=MainHead
oArea12R.BgColor = "#c0dcc0";
oArea12R.GetRow(0).GetCell(0).Value = sTitleL;
oArea11R = oTableR.GetArea(11);
// TableArea 11=MainBody
oArea11R.BgColor = "#ffffff";
oArea11R.HorzAlign = "left";
onFillData();
}
function onFillData(ev)
{
e = 0;
nBodyRowR = aSelect.GetSize(1);
oTableR.DeleteRow(1, 0, -1);
for (iRow = 0; iRow < aList.GetSize(1); iRow++)
{
var bSel = 0;
for (iBodyRow = 0; iBodyRow < nBodyRowR; iBodyRow++)
{
if (aList.GetItem(iRow, 0) == aSelect.GetItem(iBodyRow))
{
bSel = 1;
}
}
if (!bSel)
{
oRowL = oArea11L.GetRow(e);
oRowL.GetCell(0).Value = aList.GetItem(iRow, 1);
oRowL.PrivateData = aList.GetItem(iRow, 0);
e++;
}
else
{
oTableR.InsertRow(1, -1);
oRowR = oArea11R.GetRow(-1);
oRowR.GetCell(0).Value = aList.GetItem(iRow, 1);
oRowR.PrivateData = aList.GetItem(iRow, 0);
}
}
}
// move the highlighted left item to the right
function onRight(ev)
{
var oRow = oTableL.GetSel(0);
if (oRow != null)
{
oRowL = oArea11L.GetRow(oRow.Row);
aSelect.Insert(-2, oRowL.PrivateData);
oTableL.DeleteRow(1, -1);
onFillData();
}
}
// move the highlighted right item to the left
function onLeft(ev)
{
var oRow = oTableR.GetSel(0);
if (oRow != null)
{
oRowR = oArea11R.GetRow(oRow.Row);
for (iRow = 0; iRow < aSelect.GetSize(1); iRow++)
{
if (oRowR.PrivateData == aSelect.GetItem(iRow))
{
aSelect.Remove(iRow, 1);
break;
}
}
oTableL.InsertRow(1, -1);
onFillData();
}
}
// Vytvoří PmViewCreator - Objekt umožňuje otevřít různé typy prohlížečů
var oCreator = Pm.CreateView(null, "/#glob/form", "", "target:_blank;modal:1;pos:view," + pMe.ViewX + "," + pMe.ViewY + ";size:640,350;");
oCreator.View.onLoad = onViewLoad;
oCreator.View.onClose = onViewClose;
// Otevře formulář v modálním okně:
oCreator.Open();