mirror of
https://github.com/MikaylaFischler/cc-mek-scada.git
synced 2024-08-30 18:22:34 +00:00
added system information/about app
This commit is contained in:
parent
57dc20692b
commit
9fe34648c2
@ -2,9 +2,8 @@
|
|||||||
-- I/O Control for Pocket Integration with Supervisor & Coordinator
|
-- I/O Control for Pocket Integration with Supervisor & Coordinator
|
||||||
--
|
--
|
||||||
|
|
||||||
local psil = require("scada-common.psil")
|
local log = require("scada-common.log")
|
||||||
local log = require("scada-common.log")
|
local psil = require("scada-common.psil")
|
||||||
|
|
||||||
local types = require("scada-common.types")
|
local types = require("scada-common.types")
|
||||||
|
|
||||||
local ALARM = types.ALARM
|
local ALARM = types.ALARM
|
||||||
@ -28,16 +27,21 @@ iocontrol.LINK_STATE = LINK_STATE
|
|||||||
---@enum POCKET_APP_ID
|
---@enum POCKET_APP_ID
|
||||||
local APP_ID = {
|
local APP_ID = {
|
||||||
ROOT = 1,
|
ROOT = 1,
|
||||||
|
-- main app page
|
||||||
UNITS = 2,
|
UNITS = 2,
|
||||||
ALARMS = 3,
|
ABOUT = 3,
|
||||||
DUMMY = 4,
|
-- diag app page
|
||||||
NUM_APPS = 4
|
ALARMS = 4,
|
||||||
|
-- other
|
||||||
|
DUMMY = 5,
|
||||||
|
NUM_APPS = 5
|
||||||
}
|
}
|
||||||
|
|
||||||
iocontrol.APP_ID = APP_ID
|
iocontrol.APP_ID = APP_ID
|
||||||
|
|
||||||
---@class pocket_ioctl
|
---@class pocket_ioctl
|
||||||
local io = {
|
local io = {
|
||||||
|
version = "unknown",
|
||||||
ps = psil.create()
|
ps = psil.create()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,9 +81,16 @@ function iocontrol.alloc_nav()
|
|||||||
local app = {
|
local app = {
|
||||||
root = { _p = nil, _c = {}, nav_to = function () end, tasks = {} }, ---@type nav_tree_page
|
root = { _p = nil, _c = {}, nav_to = function () end, tasks = {} }, ---@type nav_tree_page
|
||||||
cur_page = nil, ---@type nav_tree_page
|
cur_page = nil, ---@type nav_tree_page
|
||||||
|
pane = pane,
|
||||||
paned_pages = {}
|
paned_pages = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- delayed set of the pane if it wasn't ready at the start
|
||||||
|
---@param root_pane graphics_element multipane
|
||||||
|
function app.set_root_pane(root_pane)
|
||||||
|
app.pane = root_pane
|
||||||
|
end
|
||||||
|
|
||||||
-- if a pane was provided, this will switch between numbered pages
|
-- if a pane was provided, this will switch between numbered pages
|
||||||
---@param idx integer page index
|
---@param idx integer page index
|
||||||
function app.switcher(idx)
|
function app.switcher(idx)
|
||||||
@ -106,7 +117,7 @@ function iocontrol.alloc_nav()
|
|||||||
|
|
||||||
function page.nav_to()
|
function page.nav_to()
|
||||||
app.cur_page = page
|
app.cur_page = page
|
||||||
if pane then pane.set_value(nav_to) end
|
if app.pane then app.pane.set_value(nav_to) end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
function page.nav_to()
|
function page.nav_to()
|
||||||
|
@ -68,6 +68,9 @@ local function main()
|
|||||||
-- mount connected devices
|
-- mount connected devices
|
||||||
ppm.mount_all()
|
ppm.mount_all()
|
||||||
|
|
||||||
|
-- record version for GUI
|
||||||
|
iocontrol.get_db().version = POCKET_VERSION
|
||||||
|
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
-- setup communications & clocks
|
-- setup communications & clocks
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
|
102
pocket/ui/apps/sys_apps.lua
Normal file
102
pocket/ui/apps/sys_apps.lua
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
--
|
||||||
|
-- System Apps
|
||||||
|
--
|
||||||
|
|
||||||
|
local comms = require("scada-common.comms")
|
||||||
|
local lockbox = require("lockbox")
|
||||||
|
local util = require("scada-common.util")
|
||||||
|
|
||||||
|
local iocontrol = require("pocket.iocontrol")
|
||||||
|
|
||||||
|
local core = require("graphics.core")
|
||||||
|
|
||||||
|
local Div = require("graphics.elements.div")
|
||||||
|
local ListBox = require("graphics.elements.listbox")
|
||||||
|
local MultiPane = require("graphics.elements.multipane")
|
||||||
|
local TextBox = require("graphics.elements.textbox")
|
||||||
|
|
||||||
|
local PushButton = require("graphics.elements.controls.push_button")
|
||||||
|
|
||||||
|
local cpair = core.cpair
|
||||||
|
|
||||||
|
local ALIGN = core.ALIGN
|
||||||
|
|
||||||
|
-- create system app pages
|
||||||
|
---@param root graphics_element parent
|
||||||
|
local function create_pages(root)
|
||||||
|
local db = iocontrol.get_db()
|
||||||
|
|
||||||
|
----------------
|
||||||
|
-- About Page --
|
||||||
|
----------------
|
||||||
|
|
||||||
|
local about_root = Div{parent=root,x=1,y=1}
|
||||||
|
|
||||||
|
local about_app = db.nav.register_app(iocontrol.APP_ID.ABOUT, about_root)
|
||||||
|
|
||||||
|
local about_page = about_app.new_page(nil, 1)
|
||||||
|
local fw_page = about_app.new_page(about_page, 2)
|
||||||
|
local hw_page = about_app.new_page(about_page, 3)
|
||||||
|
|
||||||
|
local about = Div{parent=about_root,x=1,y=2}
|
||||||
|
|
||||||
|
TextBox{parent=about,y=1,text="System Information",height=1,alignment=ALIGN.CENTER}
|
||||||
|
|
||||||
|
local btn_fg_bg = cpair(colors.lightBlue, colors.black)
|
||||||
|
local btn_active = cpair(colors.white, colors.black)
|
||||||
|
local label = cpair(colors.lightGray, colors.black)
|
||||||
|
|
||||||
|
PushButton{parent=about,x=2,y=3,text="Firmware >",fg_bg=btn_fg_bg,active_fg_bg=btn_active,callback=fw_page.nav_to}
|
||||||
|
PushButton{parent=about,x=2,y=4,text="Host Details >",fg_bg=btn_fg_bg,active_fg_bg=btn_active,callback=hw_page.nav_to}
|
||||||
|
|
||||||
|
local fw_div = Div{parent=about_root,x=1,y=2}
|
||||||
|
TextBox{parent=fw_div,y=1,text="Firmware Versions",height=1,alignment=ALIGN.CENTER}
|
||||||
|
|
||||||
|
PushButton{parent=fw_div,x=2,y=1,text="<",fg_bg=btn_fg_bg,active_fg_bg=btn_active,callback=about_page.nav_to}
|
||||||
|
|
||||||
|
local fw_list_box = ListBox{parent=fw_div,x=1,y=3,scroll_height=100,nav_fg_bg=cpair(colors.lightGray,colors.gray),nav_active=cpair(colors.white,colors.gray)}
|
||||||
|
|
||||||
|
local fw_list = Div{parent=fw_list_box,x=1,y=2,height=18}
|
||||||
|
|
||||||
|
TextBox{parent=fw_list,x=2,text="Pocket Version",height=1,alignment=ALIGN.LEFT,fg_bg=label}
|
||||||
|
TextBox{parent=fw_list,x=2,text=db.version,height=1,alignment=ALIGN.LEFT}
|
||||||
|
|
||||||
|
fw_list.line_break()
|
||||||
|
TextBox{parent=fw_list,x=2,text="Comms Version",height=1,alignment=ALIGN.LEFT,fg_bg=label}
|
||||||
|
TextBox{parent=fw_list,x=2,text=comms.version,height=1,alignment=ALIGN.LEFT}
|
||||||
|
|
||||||
|
fw_list.line_break()
|
||||||
|
TextBox{parent=fw_list,x=2,text="API Version",height=1,alignment=ALIGN.LEFT,fg_bg=label}
|
||||||
|
TextBox{parent=fw_list,x=2,text=comms.api_version,height=1,alignment=ALIGN.LEFT}
|
||||||
|
|
||||||
|
fw_list.line_break()
|
||||||
|
TextBox{parent=fw_list,x=2,text="Common Lib Version",height=1,alignment=ALIGN.LEFT,fg_bg=label}
|
||||||
|
TextBox{parent=fw_list,x=2,text=util.version,height=1,alignment=ALIGN.LEFT}
|
||||||
|
|
||||||
|
fw_list.line_break()
|
||||||
|
TextBox{parent=fw_list,x=2,text="Graphics Version",height=1,alignment=ALIGN.LEFT,fg_bg=label}
|
||||||
|
TextBox{parent=fw_list,x=2,text=core.version,height=1,alignment=ALIGN.LEFT}
|
||||||
|
|
||||||
|
fw_list.line_break()
|
||||||
|
TextBox{parent=fw_list,x=2,text="Lockbox Version",height=1,alignment=ALIGN.LEFT,fg_bg=label}
|
||||||
|
TextBox{parent=fw_list,x=2,text=lockbox.version,height=1,alignment=ALIGN.LEFT}
|
||||||
|
|
||||||
|
local hw_div = Div{parent=about_root,x=1,y=2}
|
||||||
|
TextBox{parent=hw_div,y=1,text="Host Versions",height=1,alignment=ALIGN.CENTER}
|
||||||
|
|
||||||
|
PushButton{parent=hw_div,x=2,y=1,text="<",fg_bg=btn_fg_bg,active_fg_bg=btn_active,callback=about_page.nav_to}
|
||||||
|
|
||||||
|
hw_div.line_break()
|
||||||
|
TextBox{parent=hw_div,x=2,text="Lua Version",height=1,alignment=ALIGN.LEFT,fg_bg=label}
|
||||||
|
TextBox{parent=hw_div,x=2,text=_VERSION,height=1,alignment=ALIGN.LEFT}
|
||||||
|
|
||||||
|
hw_div.line_break()
|
||||||
|
TextBox{parent=hw_div,x=2,text="Environment",height=1,alignment=ALIGN.LEFT,fg_bg=label}
|
||||||
|
TextBox{parent=hw_div,x=2,text=_HOST,height=6,alignment=ALIGN.LEFT}
|
||||||
|
|
||||||
|
local root_pane = MultiPane{parent=about_root,x=1,y=1,panes={about,fw_div,hw_div}}
|
||||||
|
|
||||||
|
about_app.set_root_pane(root_pane)
|
||||||
|
end
|
||||||
|
|
||||||
|
return create_pages
|
@ -6,6 +6,7 @@ local iocontrol = require("pocket.iocontrol")
|
|||||||
|
|
||||||
local diag_apps = require("pocket.ui.apps.diag_apps")
|
local diag_apps = require("pocket.ui.apps.diag_apps")
|
||||||
local dummy_app = require("pocket.ui.apps.dummy_app")
|
local dummy_app = require("pocket.ui.apps.dummy_app")
|
||||||
|
local sys_apps = require("pocket.ui.apps.sys_apps")
|
||||||
|
|
||||||
local conn_waiting = require("pocket.ui.components.conn_waiting")
|
local conn_waiting = require("pocket.ui.components.conn_waiting")
|
||||||
|
|
||||||
@ -78,6 +79,7 @@ local function init(main)
|
|||||||
unit_page(page_div)
|
unit_page(page_div)
|
||||||
|
|
||||||
diag_apps(page_div)
|
diag_apps(page_div)
|
||||||
|
sys_apps(page_div)
|
||||||
dummy_app(page_div)
|
dummy_app(page_div)
|
||||||
|
|
||||||
assert(#db.nav.get_containers() == iocontrol.APP_ID.NUM_APPS, "app IDs were not sequential or some apps weren't registered")
|
assert(#db.nav.get_containers() == iocontrol.APP_ID.NUM_APPS, "app IDs were not sequential or some apps weren't registered")
|
||||||
|
@ -25,17 +25,16 @@ local function new_view(root)
|
|||||||
|
|
||||||
local main = Div{parent=root,x=1,y=1,height=19}
|
local main = Div{parent=root,x=1,y=1,height=19}
|
||||||
|
|
||||||
|
local app = db.nav.register_app(iocontrol.APP_ID.ROOT, main)
|
||||||
|
|
||||||
local apps_1 = Div{parent=main,x=1,y=1,height=15}
|
local apps_1 = Div{parent=main,x=1,y=1,height=15}
|
||||||
local apps_2 = Div{parent=main,x=1,y=1,height=15}
|
local apps_2 = Div{parent=main,x=1,y=1,height=15}
|
||||||
|
|
||||||
local panes = { apps_1, apps_2 }
|
local panes = { apps_1, apps_2 }
|
||||||
|
|
||||||
local f_ref = {}
|
local app_pane = AppMultiPane{parent=main,x=1,y=1,height=18,panes=panes,active_color=colors.lightGray,nav_colors=cpair(colors.lightGray,colors.gray),scroll_nav=true,drag_nav=true,callback=app.switcher}
|
||||||
local app_pane = AppMultiPane{parent=main,x=1,y=1,height=18,panes=panes,active_color=colors.lightGray,nav_colors=cpair(colors.lightGray,colors.gray),scroll_nav=true,drag_nav=true,callback=function(v)f_ref.callback(v)end}
|
|
||||||
|
|
||||||
local app = db.nav.register_app(iocontrol.APP_ID.ROOT, main, app_pane)
|
|
||||||
f_ref.callback = app.switcher
|
|
||||||
|
|
||||||
|
app.set_root_pane(app_pane)
|
||||||
app.new_page(app.new_page(nil, 1), 2)
|
app.new_page(app.new_page(nil, 1), 2)
|
||||||
|
|
||||||
local function open(id) db.nav.open_app(id) end
|
local function open(id) db.nav.open_app(id) end
|
||||||
@ -48,6 +47,7 @@ local function new_view(root)
|
|||||||
App{parent=apps_1,x=3,y=7,text="\x08",title="DEV",callback=function()open(APP_ID.DUMMY)end,app_fg_bg=cpair(colors.black,colors.lightGray),active_fg_bg=active_fg_bg}
|
App{parent=apps_1,x=3,y=7,text="\x08",title="DEV",callback=function()open(APP_ID.DUMMY)end,app_fg_bg=cpair(colors.black,colors.lightGray),active_fg_bg=active_fg_bg}
|
||||||
App{parent=apps_1,x=10,y=7,text="\x7f",title="Waste",callback=function()open(APP_ID.DUMMY)end,app_fg_bg=cpair(colors.black,colors.brown),active_fg_bg=active_fg_bg}
|
App{parent=apps_1,x=10,y=7,text="\x7f",title="Waste",callback=function()open(APP_ID.DUMMY)end,app_fg_bg=cpair(colors.black,colors.brown),active_fg_bg=active_fg_bg}
|
||||||
App{parent=apps_1,x=17,y=7,text="\xb6",title="Guide",callback=function()open(APP_ID.DUMMY)end,app_fg_bg=cpair(colors.black,colors.cyan),active_fg_bg=active_fg_bg}
|
App{parent=apps_1,x=17,y=7,text="\xb6",title="Guide",callback=function()open(APP_ID.DUMMY)end,app_fg_bg=cpair(colors.black,colors.cyan),active_fg_bg=active_fg_bg}
|
||||||
|
App{parent=apps_1,x=3,y=12,text="?",title="About",callback=function()open(APP_ID.ABOUT)end,app_fg_bg=cpair(colors.black,colors.white),active_fg_bg=active_fg_bg}
|
||||||
|
|
||||||
TextBox{parent=apps_2,text="Diagnostic Apps",x=1,y=2,height=1,alignment=ALIGN.CENTER}
|
TextBox{parent=apps_2,text="Diagnostic Apps",x=1,y=2,height=1,alignment=ALIGN.CENTER}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user