Commit 2a0fdb90 authored by Bernardo Quaresma Dias's avatar Bernardo Quaresma Dias
Browse files

Inclusão de conceito de pontos com valor único

INSTMPA-1270
parent ea4f0ed8
......@@ -264,32 +264,29 @@ function isEquip(instid)
return classid and not isPointClass(classid)
end
local booleaninfos = {
local singlebooleaninfos = {
["^BOOLEAN"] = { tipo_valor = "boolean" },
-- lib-boolpoints infos
["^SET_RESET"] = { tipo_valor = "object", },
["^ONE_TWO"] = { tipo_valor = "number", valor_ativo = 1 , valor_inativo = 2 },
["^ONOFF"] = { tipo_valor = "string", valor_ativo = "ON", valor_inativo = "OFF" },
["^CUSTOM"] = { tipo_valor = "index" , },
["^ZERO_ONE"] = { tipo_valor = "number", valor_ativo = 1 , valor_inativo = 0 },
}
function getBooleanValueInfo(instid) -- [[DEBUG]] print("getBooleanValueInfo", instid)
local info = getPointClassInfo(instid, booleaninfos, true)
function getSingleBooleanValueInfo(instid) -- [[DEBUG]] print("getSingleBooleanValueInfo", instid)
local info = getPointClassInfo(instid, singlebooleaninfos, true)
if info then
local v_tipo = info.tipo_valor
local v_true
local v_false
if v_tipo ~= "object" then
-- se tipo indicado nas informaes index, os valores devem ser obtidos da instncia
if v_tipo == "index" then
info = getInstance(instid)
v_tipo = info.tipo_valor
end
v_true = info.valor_ativo
v_false = info.valor_inativo
-- se tipo indicado nas informaes index, os valores devem ser obtidos da instncia
if v_tipo == "index" then
info = getInstance(instid)
v_tipo = info.tipo_valor
end
v_true = info.valor_ativo
v_false = info.valor_inativo
return v_tipo, v_true, v_false
end
......@@ -309,13 +306,13 @@ function getPointClassInfo(instid, infos, map)
return false
end
local numericinfos = {"REAL", "INTEGER"}
function isNumericPoint(instid)
local numericinfos = {"^REAL", "^INTEGER"}
function isSingleNumericPoint(instid)
return getPointClassInfo(instid, numericinfos)
end
local textinfos = {"STRING"}
function isStringPoint(instid)
local textinfos = {"^STRING"}
function isSingleStringPoint(instid)
return getPointClassInfo(instid, textinfos)
end
......@@ -389,11 +386,14 @@ function showInstanceWindow(instid)
end
function createAttributeLine(instid, attrid, classid) -- [[DEBUG]] print("[DEBUG] Criando linha para atributo:", instance, attrid)
return iup.hbox{
local valuebox, kind = createAttributeValueBox(instid, attrid, classid)
local line = iup.hbox{
iup.label{ title = attrid, size = ATTR_LABEL_SIZE },
iup.fill{},
createAttributeValueBox(instid, attrid, classid),
valuebox
}
return line, kind
end
function createStringPointBox(instid)
......@@ -433,18 +433,16 @@ function createBooleanPointBox(instid, val_on, val_off, val_type)
end
function createPointBox(instid)
if isNumericPoint(instid) then -- verifica se numrico
if isSingleNumericPoint(instid) then -- verifica se numrico
return createNumericPointBox(instid)
elseif isStringPoint(instid) then -- verifica se ponto textual
elseif isSingleStringPoint(instid) then -- verifica se ponto textual
return createStringPointBox(instid)
else
local v_tipo, v_true, v_false = getBooleanValueInfo(instid)
if v_tipo == "object" then
return createEquipmentBox(instid)
elseif v_tipo ~= nil then
local v_tipo, v_true, v_false = getSingleBooleanValueInfo(instid)
if v_tipo then
return createBooleanPointBox(instid, v_true, v_false, v_tipo)
else -- classe desconhecida
error("[ERRO] No foi possvel identificar classe de valor de atributo: " .. tostring(instid))
else
return createEquipmentBox(instid)
end
end
end
......@@ -465,28 +463,14 @@ function createEquipmentBox(instid)
end
function createBasicTypeBox(instid, attrid, classid) -- [[DEBUG]] print("[DEBUG] Criando caixa para tipo bsico", instid)
if attrid and classid then -- [[DEBUG]] print("[DEBUG] Criando caixa de atributo", attrid, classid)
return scada.text{
size = ATTR_VAL_SIZE,
--expand="HORIZONTAL",
alignment = "ALEFT", --"ARIGHT";
tag = instid,
attrid = attrid,
classid = classid,
}
else
local inst = getInstance(instid)
local val = inst[attrid] -- [[DEBUG]] print("[DEBUG] Criando caixa valor", attrid, val)
return iup.text{
size = ATTR_VAL_SIZE,
--expand="HORIZONTAL",
alignment = "ALEFT", --"ARIGHT";
value = val,
bgcolor = INACTIVE_BG_COLOR,
fgcolor = INACTIVE_FG_COLOR,
READONLY = "YES",
}
end
return scada.text{
size = ATTR_VAL_SIZE,
--expand="HORIZONTAL",
alignment = "ALEFT", --"ARIGHT";
tag = instid,
attrid = attrid,
classid = classid,
}
end
function createValueBox(value) -- [[DEBUG]] print("[DEBUG] Criando caixa para valor", value)
......@@ -502,6 +486,8 @@ function createValueBox(value)
end
function createAttributeValueBox(instid, attrid, classid, listidx) -- [[DEBUG]] print("[DEBUG] Criando createAttributeValueBox:", attrval, type(attrval) )
local box, kind
local instance = getInstance(instid)
local attrval = instance[attrid]
if listidx then -- [[DEBUG]] print("[DEBUG] Valor de item da lista", attrval, listidx, attrval[listidx])
......@@ -509,7 +495,7 @@ function createAttributeValueBox(instid, attrid, classid, listidx)
end
-- se for lista
if type(attrval) == "table" then
if type(attrval) == "table" then kind = 'list'
local attrvaluebox = {aligment = "ARIGHT", margin = "0x0"}
for i, attrvali in ipairs(attrval) do
attrvaluebox[#attrvaluebox+1] = iup.hbox{ alignment = "ACENTER";
......@@ -518,49 +504,73 @@ function createAttributeValueBox(instid, attrid, classid, listidx)
createAttributeValueBox(instid, attrid, classid, i)
}
end
return iup.vbox(attrvaluebox)
box = iup.vbox(attrvaluebox)
-- seno atributo simples
else -- [[DEBUG]] print("[DEBUG] No lista", attrval)
local attrinst = getInstance(attrval)
if attrinst then -- [[DEBUG]] print("[DEBUG] uma instancia", attrinst)
if not isPoint(attrval) then -- [[DEBUG]] print("[DEBUG] No ponto")
if not isPoint(attrval) then kind = 'equip' -- [[DEBUG]] print("[DEBUG] No ponto")
local attrvalclassid = getInstanceClass(attrval)
local singleattr = isSingleAttrInstance(attrval)
if singleattr then -- [[DEBUG]] print("[DEBUG] um atributo simples", attrinst, singleattr)
return createAttributeValueBox(attrval, singleattr, classid and attrvalclassid) --retorna campo do atributo nico
box, kind = createAttributeValueBox(attrval, singleattr, classid and attrvalclassid) --retorna campo do atributo nico
else -- seno retorna boto que abre janela do equipamento
return createEquipmentBox(attrval)
box = createEquipmentBox(attrval)
end
else -- seno, ponto
return createPointBox(attrval)
else kind = 'point' -- seno, ponto
box = createPointBox(attrval)
end
elseif listidx then -- um valor simples de tabela
return createValueBox(attrval)
else -- seno um valor simples cria um campo de valor
return createBasicTypeBox(instid, attrid, classid)
else kind = 'basic' -- seno um valor simples cria um campo de valor
box = createBasicTypeBox(instid, attrid, classid)
end
end
return box, kind
end
function createDefaultInstancePannel(instid, classid) -- [[DEBUG]] print("[DEBUG] criando painel para:", name, instance)
local instance = getInstance(instid)
local attrids = {}
for attrid in pairs(instance) do
table.insert(attrids,attrid)
local attrlinekindvalue = {
equip = 1,
point = 2,
list = 3,
basic = 4,
}
function f_sortattrlines(line_a, line_b)
local v_kind_a = attrlinekindvalue[line_a.kind]
local v_kind_b = attrlinekindvalue[line_b.kind]
if v_kind_a == v_kind_b then
return line_a.id < line_b.id
else
return v_kind_a < v_kind_b
end
table.sort(attrids)
end
function createDefaultInstancePannel(instid, classid) -- [[DEBUG]] print("[DEBUG] criando painel para:", name, instance)
local instance = getInstance(instid)
local attrlines = {}
for _, attrid in ipairs(attrids) do -- [[DEBUG]] print("[DEBUG] criando campo para:", name, attrid)
local attrline = createAttributeLine(instid, attrid, classid)
for attrid in pairs(instance) do
local attrline, attrkind = createAttributeLine(instid, attrid, classid)
if attrline then
attrlines[#attrlines + 1] = attrline
attrlines[#attrlines + 1] = {
id = attrid,
box = attrline,
kind = attrkind,
}
end
end
table.sort(attrlines, f_sortattrlines)
local line_boxes = {}
for _, attrline in ipairs(attrlines) do
line_boxes[#line_boxes+1] = attrline.box
end
return iup.frame{ title = instid;
iup.vbox(attrlines)
iup.vbox(line_boxes)
}
end
......@@ -574,7 +584,7 @@ function createMainDialog(titulo)
title = titulo,
--size = "HALFxHALF",
minsize = "410x310",
maxsize = "1920x1080",
--maxsize = "1920x1080",
margin = "3x3",
resize = "YES",
maxbox = "YES",
......@@ -934,7 +944,7 @@ function createNavigationMenu()
local menuMatrix
if args.cols <= 0 then
menumatrix = iup.item {
title = "&Transposta\tCtrl+t", key = "K_ct", active = "YES",
title = "&Transpor\tCtrl+T", key = "K_ct", active = "YES",
action = function()
TransposeMatrices()
return iup.DEFAULT
......@@ -944,7 +954,7 @@ function createNavigationMenu()
return iup.submenu{ title = "&Navegao";
iup.menu{
iup.item{
title = "Ir...\tALT+num Ctrl+g", active = "YES",
title = "Ir...\tALT+num Ctrl+G", active = "YES",
action = function()
navigateToTab()
return iup.DEFAULT
......@@ -1088,9 +1098,9 @@ end
--
-- Liga o timer e exibe a interface:
--
local checkinterval = 1000
local checkinterval = 5000
if args.active ~= false then
checkinterval = 2000 --tempor maior de refresh para scada caso existam muitos elementos
checkinterval = 10000 --tempor maior de refresh para scada caso existam muitos elementos
end
timer = iup.timer {
time = checkinterval,
......@@ -1329,8 +1339,8 @@ function CreateClassMatrix(classid, trasposta)
local obj = iup.matrix {
numlin=0,
numcol=0,
numcol_visible=20,
numlin_visible=25,
numcol_visible=5,
numlin_visible=15,
height0=12,
widthdef=80,
scrollbar="YES",
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment