DefineClass.ObjSurfacesLegend = { __parents = {"XDialog"}, Padding = box(0, 0, 10, 60), Dock = "box", ZOrder = 100, HAlign = "right", VAlign = "bottom", UseClipBox = false, HandleMouse = true, } function ObjSurfacesLegend:Init() local parent = XWindow:new({ LayoutMethod = "VList", UniformRowHeight = true, Background = const.clrBlack, }, self) for stype, color in sorted_pairs(ObjectSurfaceColors) do if color ~= RGBA(0, 0, 0, 0) then local background = XWindow:new({ Margins = box(5, 5, 5, 5), HAlign = "left", VAlign = "center", LayoutMethod = "HList", MinWidth = 200, MinHeight = 30, MaxWidth = 200, MaxHeight = 30, Background = color, Clip = false, }, parent) local button = XCheckButton:new({ OnChange = function(button, checked) SetObjSurfaceDisabled(stype, not checked) end, }, background) button:SetCheck(not TurnedOffObjSurfaces[stype]) local text = XText:new({ Margins = box(5, 0, 5, 0), HAlign = "left", VAlign = "center", MinWidth = 50, MaxHeight = 30, TextVAlign = "center", TextStyle = "GedDefaultDarkModeOutline", Clip = false, }, background) text:SetText(stype) end end local close_button = XTextButton:new({ Margins = box(5, 0, 5, 0), HAlign = "center", VAlign = "center", MinWidth = 50, MaxHeight = 30, TextVAlign = "center", TextStyle = "GedDefault", OnPress = function(button) for obj in pairs(ObjToShownSurfaces) do obj:HideSurfaces() end end, }, parent) close_button:SetText("Close") end function SetObjSurfaceDisabled(stype, disabled) TurnedOffObjSurfaces[stype] = disabled or nil for obj, entry in pairs(ObjToShownSurfaces) do if disabled then if type(entry) == "table" then DoneObject(entry[stype]) entry[stype] = nil end else obj:ShowSurfaces() end end end