From 5d760a05241ad868086e4bee36d4c60eee7a72f3 Mon Sep 17 00:00:00 2001 From: Mikayla Fischler Date: Sat, 9 Mar 2024 12:41:45 -0500 Subject: [PATCH] #405 helper functions, enums, and name tables added to themes.lua --- coordinator/configure.lua | 19 +++--- graphics/themes.lua | 140 ++++++++++++++++++++++++++++---------- 2 files changed, 113 insertions(+), 46 deletions(-) diff --git a/coordinator/configure.lua b/coordinator/configure.lua index 3afe54a..6e16757 100644 --- a/coordinator/configure.lua +++ b/coordinator/configure.lua @@ -8,6 +8,7 @@ local network = require("scada-common.network") local ppm = require("scada-common.ppm") local tcd = require("scada-common.tcd") local util = require("scada-common.util") +local themes = require("graphics.themes") local core = require("graphics.core") @@ -174,9 +175,9 @@ local fields = { { "LogMode", "Log Mode", log.MODE.APPEND }, { "LogPath", "Log Path", "/log.txt" }, { "LogDebug","Log Debug Messages", false }, - { "MainTheme", "Main UI Theme", 1 }, - { "FrontPanelTheme", "Front Panel Theme", 1 }, - { "ColorMode", "Color Mode", 1 } + { "MainTheme", "Main UI Theme", themes.UI_THEME.SMOOTH_STONE }, + { "FrontPanelTheme", "Front Panel Theme", themes.FP_THEME.SANDSTONE }, + { "ColorMode", "Color Mode", themes.COLOR_MODE.STANDARD } } -- check if a value is an integer within a range (inclusive) @@ -832,10 +833,10 @@ local function config_view(display) TextBox{parent=clr_c_1,x=1,y=4,height=2,text="Click 'Accessibility' below to access color blind assistive options.",fg_bg=g_lg_fg_bg} TextBox{parent=clr_c_1,x=1,y=7,height=1,text="Main UI Theme"} - local main_theme = RadioButton{parent=clr_c_1,x=1,y=8,default=ini_cfg.MainTheme,options={"Smooth Stone","Deepslate"},callback=function()end,radio_colors=cpair(colors.lightGray,colors.black),select_color=colors.magenta} + local main_theme = RadioButton{parent=clr_c_1,x=1,y=8,default=ini_cfg.MainTheme,options=themes.UI_THEME_NAMES,callback=function()end,radio_colors=cpair(colors.lightGray,colors.black),select_color=colors.magenta} TextBox{parent=clr_c_1,x=18,y=7,height=1,text="Front Panel Theme"} - local fp_theme = RadioButton{parent=clr_c_1,x=18,y=8,default=ini_cfg.FrontPanelTheme,options={"Sandstone","Basalt"},callback=function()end,radio_colors=cpair(colors.lightGray,colors.black),select_color=colors.magenta} + local fp_theme = RadioButton{parent=clr_c_1,x=18,y=8,default=ini_cfg.FrontPanelTheme,options=themes.FP_THEME_NAMES,callback=function()end,radio_colors=cpair(colors.lightGray,colors.black),select_color=colors.magenta} TextBox{parent=clr_c_2,x=1,y=1,height=6,text="By default, this project uses green/red heavily to distinguish ok and not, with some indicators also using multiple colors. By selecting a color blindness below, blues will be used instead of greens on indicators and multi-color indicators will be split up as space permits."} @@ -857,7 +858,7 @@ local function config_view(display) end end - local c_mode = RadioButton{parent=clr_c_2,x=1,y=8,default=ini_cfg.ColorMode,options={"None","Protanopia","Deuteranopia","Tritanopia"},callback=recolor,radio_colors=cpair(colors.lightGray,colors.black),select_color=colors.magenta} + local c_mode = RadioButton{parent=clr_c_2,x=1,y=8,default=ini_cfg.ColorMode,options=themes.COLOR_MODE_NAMES,callback=recolor,radio_colors=cpair(colors.lightGray,colors.black),select_color=colors.magenta} local _ = IndLight{parent=clr_c_2,x=20,y=8,label="Good",colors=cpair(colors.black,colors.green),value=true} _ = IndLight{parent=clr_c_2,x=20,y=9,label="Warning",colors=cpair(colors.black,colors.yellow),value=true} @@ -1332,11 +1333,11 @@ local function config_view(display) elseif f[1] == "TempScale" then if raw == 1 then val = "Kelvin" elseif raw == 2 then val = "Celsius" elseif raw == 3 then val = "Fahrenheit" elseif raw == 4 then val = "Rankine" end elseif f[1] == "MainTheme" then - if raw == 1 then val = "Smooth Stone" elseif raw == 2 then val = "Deepslate" end + val = util.strval(themes.ui_theme_name(raw)) elseif f[1] == "FrontPanelTheme" then - if raw == 1 then val = "Sandstone" elseif raw == 2 then val = "Basalt" end + val = util.strval(themes.fp_theme_name(raw)) elseif f[1] == "ColorMode" then - if raw == 1 then val = "Standard" elseif raw == 2 then val = "Protanopia" elseif raw == 3 then val = "Deuteranopia" elseif raw == 4 then val = "Tritanopia" end + val = util.strval(themes.color_mode_name(raw)) elseif f[1] == "UnitDisplays" and type(cfg.UnitDisplays) == "table" then val = "" for idx = 1, #cfg.UnitDisplays do diff --git a/graphics/themes.lua b/graphics/themes.lua index e7ded0d..c454aab 100644 --- a/graphics/themes.lua +++ b/graphics/themes.lua @@ -9,12 +9,76 @@ local cpair = core.cpair ---@class graphics_themes local themes = {} --- add color mappings for front panel -colors.ivory = colors.pink -colors.yellow_hc = colors.purple -colors.red_off = colors.brown +-- add color mappings for front panels +colors.ivory = colors.pink +colors.yellow_hc = colors.purple +colors.red_off = colors.brown colors.yellow_off = colors.magenta -colors.green_off = colors.lime +colors.green_off = colors.lime + +--#region Types + +---@enum UI_THEME +themes.UI_THEME = { SMOOTH_STONE = 1, DEEPSLATE = 2 } +themes.UI_THEME_NAMES = { "Smooth Stone", "Deepslate" } + +-- attempts to get the string name of a main ui theme +---@nodiscard +---@param id any +---@return string|nil +function themes.ui_theme_name(id) + if id == themes.UI_THEME.SMOOTH_STONE or + id == themes.UI_THEME.DEEPSLATE then + return themes.UI_THEME_NAMES[id] + else return nil end +end + +---@enum FP_THEME +themes.FP_THEME = { SANDSTONE = 1, BASALT = 2 } +themes.FP_THEME_NAMES = { "Sandstone", "Basalt" } + +-- attempts to get the string name of a front panel theme +---@nodiscard +---@param id any +---@return string|nil +function themes.fp_theme_name(id) + if id == themes.FP_THEME.SANDSTONE or + id == themes.FP_THEME.BASALT then + return themes.FP_THEME_NAMES[id] + else return nil end +end + +---@enum COLOR_MODE +themes.COLOR_MODE = { + STANDARD = 1, + DEUTERANOPIA = 2, + PROTANOPIA = 3, + TRITANOPIA = 4 +} + +themes.COLOR_MODE_NAMES = { + "Standard", + "Deuteranopia", + "Protanopia", + "Tritanopia" +} + +-- attempts to get the string name of a color mode +---@nodiscard +---@param id any +---@return string|nil +function themes.color_mode_name(id) + if id == themes.COLOR_MODE.STANDARD or + id == themes.COLOR_MODE.DEUTERANOPIA or + id == themes.COLOR_MODE.PROTANOPIA or + id == themes.COLOR_MODE.TRITANOPIA then + return themes.COLOR_MODE_NAMES[id] + else return nil end +end + +--#endregion + +--#region Front Panel Themes ---@class fp_theme themes.sandstone = { @@ -31,22 +95,22 @@ themes.sandstone = { field_box = cpair(colors.gray, colors.white), colors = { - { c = colors.red, hex = 0xdf4949 }, -- RED ON - { c = colors.orange, hex = 0xffb659 }, - { c = colors.yellow, hex = 0xf9fb53 }, -- YELLOW ON - { c = colors.lime, hex = 0x16665a }, -- GREEN OFF - { c = colors.green, hex = 0x6be551 }, -- GREEN ON - { c = colors.cyan, hex = 0x34bac8 }, - { c = colors.lightBlue, hex = 0x6cc0f2 }, - { c = colors.blue, hex = 0x0096ff }, - { c = colors.purple, hex = 0xe3bc2a }, -- YELLOW HIGH CONTRAST - { c = colors.pink, hex = 0xdcd9ca }, -- IVORY - { c = colors.magenta, hex = 0x85862c }, -- YELLOW OFF - { c = colors.white, hex = 0xf0f0f0 }, - { c = colors.lightGray, hex = 0xb1b8b3 }, - { c = colors.gray, hex = 0x575757 }, - { c = colors.black, hex = 0x191919 }, - { c = colors.brown, hex = 0x672223 } -- RED OFF + { c = colors.red, hex = 0xdf4949 }, + { c = colors.orange, hex = 0xffb659 }, + { c = colors.yellow, hex = 0xf9fb53 }, + { c = colors.green_off, hex = 0x16665a }, + { c = colors.green, hex = 0x6be551 }, + { c = colors.cyan, hex = 0x34bac8 }, + { c = colors.lightBlue, hex = 0x6cc0f2 }, + { c = colors.blue, hex = 0x0096ff }, + { c = colors.yellow_hc, hex = 0xe3bc2a }, + { c = colors.ivory, hex = 0xdcd9ca }, + { c = colors.yellow_off, hex = 0x85862c }, + { c = colors.white, hex = 0xf0f0f0 }, + { c = colors.lightGray, hex = 0xb1b8b3 }, + { c = colors.gray, hex = 0x575757 }, + { c = colors.black, hex = 0x191919 }, + { c = colors.red_off, hex = 0x672223 } } } @@ -65,22 +129,22 @@ themes.basalt = { field_box = cpair(colors.white, colors.gray), colors = { - { c = colors.red, hex = 0xf18486 }, -- RED ON - { c = colors.orange, hex = 0xffb659 }, - { c = colors.yellow, hex = 0xefe37c }, -- YELLOW ON - { c = colors.lime, hex = 0x436b41 }, -- GREEN OFF - { c = colors.green, hex = 0x7ae175 }, -- GREEN ON - { c = colors.cyan, hex = 0x5ec7d1 }, - { c = colors.lightBlue, hex = 0x7dc6f2 }, - { c = colors.blue, hex = 0x56aae6 }, - { c = colors.purple, hex = 0xe9cd68 }, -- YELLOW HIGH CONTRAST - { c = colors.pink, hex = 0x4d4e52 }, -- IVORY - { c = colors.magenta, hex = 0x757040 }, -- YELLOW OFF - { c = colors.white, hex = 0xbfbfbf }, - { c = colors.lightGray, hex = 0x848794 }, - { c = colors.gray, hex = 0x5c5f68 }, - { c = colors.black, hex = 0x262626 }, - { c = colors.brown, hex = 0x653839 } -- RED OFF + { c = colors.red, hex = 0xf18486 }, + { c = colors.orange, hex = 0xffb659 }, + { c = colors.yellow, hex = 0xefe37c }, + { c = colors.green_off, hex = 0x436b41 }, + { c = colors.green, hex = 0x7ae175 }, + { c = colors.cyan, hex = 0x5ec7d1 }, + { c = colors.lightBlue, hex = 0x7dc6f2 }, + { c = colors.blue, hex = 0x56aae6 }, + { c = colors.yellow_hc, hex = 0xe9cd68 }, + { c = colors.ivory, hex = 0x4d4e52 }, + { c = colors.yellow_off, hex = 0x757040 }, + { c = colors.white, hex = 0xbfbfbf }, + { c = colors.lightGray, hex = 0x848794 }, + { c = colors.gray, hex = 0x5c5f68 }, + { c = colors.black, hex = 0x262626 }, + { c = colors.red_off, hex = 0x653839 } } } @@ -103,4 +167,6 @@ function themes.get_fp_style(theme) return style end +--#endregion + return themes