mirror of
https://github.com/Refactorio/RedMew.git
synced 2024-12-14 10:13:13 +02:00
159 lines
4.4 KiB
Lua
159 lines
4.4 KiB
Lua
|
local Gui = require 'utils.gui'
|
||
|
local Color = require 'resources.color_presets'
|
||
|
local Model = require 'features.gui.debug.model'
|
||
|
|
||
|
local dump_function = Model.dump_function
|
||
|
local loaded = _G.package.loaded
|
||
|
|
||
|
local Public = {}
|
||
|
|
||
|
local ignore = {
|
||
|
_G = true,
|
||
|
package = true,
|
||
|
coroutine = true,
|
||
|
table = true,
|
||
|
string = true,
|
||
|
bit32 = true,
|
||
|
math = true,
|
||
|
debug = true,
|
||
|
serpent = true,
|
||
|
['utils.math'] = true,
|
||
|
util = true,
|
||
|
['utils.inspect'] = true,
|
||
|
['mod-gui'] = true
|
||
|
}
|
||
|
|
||
|
local file_label_name = Gui.uid_name()
|
||
|
local left_panel_name = Gui.uid_name()
|
||
|
local breadcrumbs_name = Gui.uid_name()
|
||
|
local top_panel_name = Gui.uid_name()
|
||
|
local variable_label_name = Gui.uid_name()
|
||
|
local text_box_name = Gui.uid_name()
|
||
|
|
||
|
Public.name = 'package'
|
||
|
|
||
|
function Public.show(container)
|
||
|
local main_flow = container.add {type = 'flow', direction = 'horizontal'}
|
||
|
|
||
|
local left_panel = main_flow.add {type = 'scroll-pane', name = left_panel_name}
|
||
|
local left_panel_style = left_panel.style
|
||
|
left_panel_style.width = 300
|
||
|
|
||
|
for name, file in pairs(loaded) do
|
||
|
if not ignore[name] then
|
||
|
local file_label =
|
||
|
left_panel.add({type = 'flow'}).add {type = 'label', name = file_label_name, caption = name}
|
||
|
Gui.set_data(file_label, file)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local right_flow = main_flow.add {type = 'flow', direction = 'vertical'}
|
||
|
|
||
|
local breadcrumbs = right_flow.add {type = 'label', name = breadcrumbs_name}
|
||
|
|
||
|
local top_panel = right_flow.add {type = 'scroll-pane', name = top_panel_name}
|
||
|
local top_panel_style = top_panel.style
|
||
|
top_panel_style.height = 200
|
||
|
|
||
|
local text_box = right_flow.add {type = 'text-box', name = text_box_name}
|
||
|
text_box.word_wrap = true
|
||
|
text_box.read_only = true
|
||
|
text_box.selectable = true
|
||
|
|
||
|
local text_box_style = text_box.style
|
||
|
text_box_style.vertically_stretchable = true
|
||
|
text_box_style.horizontally_stretchable = true
|
||
|
|
||
|
local data = {
|
||
|
left_panel = left_panel,
|
||
|
breadcrumbs = breadcrumbs,
|
||
|
top_panel = top_panel,
|
||
|
text_box = text_box,
|
||
|
selected_file_label = nil,
|
||
|
selected_variable_label = nil
|
||
|
}
|
||
|
|
||
|
Gui.set_data(left_panel, data)
|
||
|
Gui.set_data(top_panel, data)
|
||
|
end
|
||
|
|
||
|
Gui.on_click(
|
||
|
file_label_name,
|
||
|
function(event)
|
||
|
local element = event.element
|
||
|
local file = Gui.get_data(element)
|
||
|
|
||
|
local left_panel = element.parent.parent
|
||
|
local data = Gui.get_data(left_panel)
|
||
|
|
||
|
local selected_file_label = data.selected_file_label
|
||
|
|
||
|
if selected_file_label then
|
||
|
selected_file_label.style.font_color = Color.white
|
||
|
end
|
||
|
|
||
|
element.style.font_color = Color.orange
|
||
|
data.selected_file_label = element
|
||
|
|
||
|
local top_panel = data.top_panel
|
||
|
local text_box = data.text_box
|
||
|
|
||
|
Gui.clear(top_panel)
|
||
|
|
||
|
local file_type = type(file)
|
||
|
|
||
|
if file_type == 'table' then
|
||
|
for k, v in pairs(file) do
|
||
|
local label =
|
||
|
top_panel.add({type = 'flow'}).add {type = 'label', name = variable_label_name, caption = k}
|
||
|
Gui.set_data(label, v)
|
||
|
end
|
||
|
elseif file_type == 'function' then
|
||
|
text_box.text = dump_function(file)
|
||
|
else
|
||
|
text_box.text = tostring(file)
|
||
|
end
|
||
|
end
|
||
|
)
|
||
|
|
||
|
Gui.on_click(
|
||
|
variable_label_name,
|
||
|
function(event)
|
||
|
local element = event.element
|
||
|
local variable = Gui.get_data(element)
|
||
|
|
||
|
local top_panel = element.parent.parent
|
||
|
local data = Gui.get_data(top_panel)
|
||
|
local text_box = data.text_box
|
||
|
|
||
|
local variable_type = type(variable)
|
||
|
|
||
|
if variable_type == 'table' then
|
||
|
Gui.clear(top_panel)
|
||
|
for k, v in pairs(variable) do
|
||
|
local label =
|
||
|
top_panel.add({type = 'flow'}).add {type = 'label', name = variable_label_name, caption = k}
|
||
|
Gui.set_data(label, v)
|
||
|
end
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local selected_label = data.selected_variable_label
|
||
|
|
||
|
if selected_label and selected_label.valid then
|
||
|
selected_label.style.font_color = Color.white
|
||
|
end
|
||
|
|
||
|
element.style.font_color = Color.orange
|
||
|
data.selected_variable_label = element
|
||
|
|
||
|
if variable_type == 'function' then
|
||
|
text_box.text = dump_function(variable)
|
||
|
else
|
||
|
text_box.text = tostring(variable)
|
||
|
end
|
||
|
end
|
||
|
)
|
||
|
|
||
|
return Public
|