2022-06-16 15:24:35 +00:00
--
-- Main SCADA Coordinator GUI
--
2022-09-07 02:38:27 +00:00
local iocontrol = require ( " coordinator.iocontrol " )
2022-12-04 18:59:10 +00:00
local sounder = require ( " coordinator.sounder " )
2022-07-10 20:15:30 +00:00
2022-09-05 20:04:32 +00:00
local style = require ( " coordinator.ui.style " )
2022-06-16 15:24:35 +00:00
local unit_overview = require ( " coordinator.ui.components.unit_overview " )
2022-09-05 20:04:32 +00:00
local core = require ( " graphics.core " )
2022-12-04 18:59:10 +00:00
local ColorMap = require ( " graphics.elements.colormap " )
2022-09-05 20:04:32 +00:00
local DisplayBox = require ( " graphics.elements.displaybox " )
local TextBox = require ( " graphics.elements.textbox " )
2022-12-04 18:59:10 +00:00
local PushButton = require ( " graphics.elements.controls.push_button " )
local SwitchButton = require ( " graphics.elements.controls.switch_button " )
2022-06-16 15:24:35 +00:00
local TEXT_ALIGN = core.graphics . TEXT_ALIGN
2022-12-04 18:59:10 +00:00
local cpair = core.graphics . cpair
2022-09-07 02:38:27 +00:00
-- create new main view
---@param monitor table main viewscreen
2022-06-16 15:24:35 +00:00
local function init ( monitor )
local main = DisplayBox { window = monitor , fg_bg = style.root }
-- window header message
TextBox { parent = main , text = " Nuclear Generation Facility SCADA Coordinator " , alignment = TEXT_ALIGN.CENTER , height = 1 , fg_bg = style.header }
2022-09-07 02:38:27 +00:00
local db = iocontrol.get_db ( )
2022-07-10 20:15:30 +00:00
2022-07-14 17:47:39 +00:00
local uo_1 , uo_2 , uo_3 , uo_4 ---@type graphics_element
2022-06-16 15:24:35 +00:00
-- unit overviews
2022-07-14 17:47:39 +00:00
if db.facility . num_units >= 1 then uo_1 = unit_overview ( main , 2 , 3 , db.units [ 1 ] ) end
if db.facility . num_units >= 2 then uo_2 = unit_overview ( main , 84 , 3 , db.units [ 2 ] ) end
if db.facility . num_units >= 3 then
-- base offset 3, spacing 1, max height of units 1 and 2
local row_2_offset = 3 + 1 + math.max ( uo_1.height ( ) , uo_2.height ( ) )
uo_3 = unit_overview ( main , 2 , row_2_offset , db.units [ 3 ] )
if db.facility . num_units == 4 then uo_4 = unit_overview ( main , 84 , row_2_offset , db.units [ 4 ] ) end
end
-- command & control
2022-06-16 15:24:35 +00:00
2022-12-04 18:59:10 +00:00
-- testing
---@fixme remove test code
ColorMap { parent = main , x = 2 , y = ( main.height ( ) - 1 ) }
PushButton { parent = main , x = 2 , y = ( main.height ( ) - 20 ) , text = " TEST 1 " , min_width = 8 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_1 }
PushButton { parent = main , x = 2 , text = " TEST 2 " , min_width = 8 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_2 }
PushButton { parent = main , x = 2 , text = " TEST 3 " , min_width = 8 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_3 }
PushButton { parent = main , x = 2 , text = " TEST 4 " , min_width = 8 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_4 }
PushButton { parent = main , x = 2 , text = " TEST 5 " , min_width = 8 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_5 }
PushButton { parent = main , x = 2 , text = " TEST 6 " , min_width = 8 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_6 }
PushButton { parent = main , x = 2 , text = " TEST 7 " , min_width = 8 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_7 }
PushButton { parent = main , x = 2 , text = " TEST 8 " , min_width = 8 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_8 }
PushButton { parent = main , x = 2 , text = " STOP " , min_width = 8 , fg_bg = cpair ( colors.black , colors.red ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.stop }
PushButton { parent = main , x = 2 , text = " PSCALE " , min_width = 8 , fg_bg = cpair ( colors.black , colors.blue ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_power_scale }
SwitchButton { parent = main , x = 12 , y = ( main.height ( ) - 20 ) , text = " CONTAINMENT BREACH " , min_width = 23 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_breach }
SwitchButton { parent = main , x = 12 , text = " CONTAINMENT RADIATION " , min_width = 23 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_rad }
SwitchButton { parent = main , x = 12 , text = " REACTOR LOST " , min_width = 23 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_lost }
SwitchButton { parent = main , x = 12 , text = " CRITICAL DAMAGE " , min_width = 23 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_crit }
SwitchButton { parent = main , x = 12 , text = " REACTOR DAMAGE " , min_width = 23 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_dmg }
SwitchButton { parent = main , x = 12 , text = " REACTOR OVER TEMP " , min_width = 23 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_overtemp }
SwitchButton { parent = main , x = 12 , text = " REACTOR HIGH TEMP " , min_width = 23 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_hightemp }
SwitchButton { parent = main , x = 12 , text = " REACTOR WASTE LEAK " , min_width = 23 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_wasteleak }
SwitchButton { parent = main , x = 12 , text = " REACTOR WASTE HIGH " , min_width = 23 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_highwaste }
SwitchButton { parent = main , x = 12 , text = " RPS TRANSIENT " , min_width = 23 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_rps }
SwitchButton { parent = main , x = 12 , text = " RCS TRANSIENT " , min_width = 23 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_rcs }
SwitchButton { parent = main , x = 12 , text = " TURBINE TRIP " , min_width = 23 , fg_bg = cpair ( colors.black , colors.yellow ) , active_fg_bg = cpair ( colors.white , colors.gray ) , callback = sounder.test_turbinet }
2022-06-16 15:24:35 +00:00
return main
end
return init