118 lines
5.2 KiB
Lua

require("scripts.gui_settings_page")
function toggle_import_export_page(player_index, button_element, import)
if button_element.style.name == "flib_selected_tool_button" then
close_import_export_page(player_index)
else
close_import_export_page(player_index)
build_import_export_page(player_index, button_element, import)
end
end
local function milestones_table_to_json(table)
local json = game.table_to_json(table)
-- Beautification
-- Example milestone line:
-- {"type":"item","name":"se-cargo-rocket-section","quantity":100},
json = json:gsub("%[{", "[\n {")
json = json:gsub("},{", "},\n {")
json = json:gsub("\",\"", "\", \"")
json = json:gsub("}]", "}\n]")
return json
end
function build_import_export_page(player_index, button_element, import)
local titlebar_caption = import and {"milestones.settings_import_title"} or {"milestones.settings_export_title"}
local outer_frame = get_outer_frame(player_index)
local import_export_frame = outer_frame.milestones_settings_import_export
import_export_frame.milestones_settings_import_export_titlebar.milestones_settings_import_export_titlebar_label.caption = titlebar_caption
local inside_frame = import_export_frame.milestones_settings_import_export_inside
inside_frame.clear()
if import then
inside_frame.add{type="label", caption={"milestones.settings_import_description"}, style="bold_label"}
else
local sub_title_flow = inside_frame.add{type="flow", direction="horizontal", style="milestones_horizontal_flow_center"}
sub_title_flow.add{type="label", caption={"milestones.settings_export_encoded"}, style="bold_label"}
sub_title_flow.add{type="checkbox", name="milestones_export_encoded_checkbox", state=false}
end
local scroll = inside_frame.add{type="scroll-pane", name="milestones_import_export_scroll"}
local textbox = scroll.add{type="text-box", name="milestones_settings_import_export_textbox", style="milestones_import_export_textbox", horizontal_scroll_policy="dont-show-but-allow-scrolling"}
if not import then
textbox.text = milestones_table_to_json(get_resulting_milestones_array(player_index))
textbox.read_only = true
end
local button_frame = inside_frame.add{type="flow", direction="horizontal"}
button_frame.add{type="empty-widget", style="flib_horizontal_pusher"}
if import then
button_frame.add{type="button", style="dialog_button", caption={"milestones.settings_import"}, tags={action="milestones_import_settings"}}
else
button_frame.add{type="button", style="dialog_button", caption={"gui.close"}, tags={action="milestones_close_import_export"}}
end
textbox.select_all()
textbox.focus()
import_export_frame.visible = true
outer_frame.force_auto_center()
button_element.style = "flib_selected_tool_button"
end
function toggle_export_encoded(checkbox_element)
local export_textbox = checkbox_element.parent.parent.milestones_import_export_scroll.milestones_settings_import_export_textbox
if checkbox_element.state then
export_textbox.text = game.encode_string(export_textbox.text)
export_textbox.word_wrap = true
else
export_textbox.text = game.decode_string(export_textbox.text)
export_textbox.word_wrap = false
end
export_textbox.select_all()
export_textbox.focus()
end
function close_import_export_page(player_index)
local outer_frame = get_outer_frame(player_index)
local import_export_frame = outer_frame.milestones_settings_import_export
local inside_frame = import_export_frame.milestones_settings_import_export_inside
inside_frame.clear()
import_export_frame.visible = false
local button_flow = get_inner_frame(player_index).milestones_settings_outer_flow.milestones_preset_flow
button_flow.milestones_import_button.style = "tool_button"
button_flow.milestones_export_button.style = "tool_button"
end
function import_settings(player_index)
local import_string = get_outer_frame(player_index)
.milestones_settings_import_export
.milestones_settings_import_export_inside
.milestones_import_export_scroll
.milestones_settings_import_export_textbox.text
if string.len(import_string) == 0 then
return
end
local decoded_string = game.decode_string(import_string)
if decoded_string then import_string = decoded_string end
local imported_milestones, error = convert_and_validate_imported_json(import_string)
if imported_milestones == nil then
game.players[player_index].print(error)
else
local settings_flow = global.players[player_index].settings_flow
settings_flow.clear()
fill_settings_flow(settings_flow, imported_milestones)
local preset_dropdown = get_inner_frame(player_index).milestones_settings_outer_flow.milestones_preset_flow.milestones_preset_dropdown
preset_dropdown.caption = {"milestones.settings_imported"}
preset_dropdown.tags = {action="milestones_change_preset", imported=true} -- For some reason, can't just change a single tag
close_import_export_page(player_index)
end
end