diff --git a/res/layouts/code_editor.xml b/res/layouts/code_editor.xml index e684ccec..02881b44 100644 --- a/res/layouts/code_editor.xml +++ b/res/layouts/code_editor.xml @@ -1,12 +1,6 @@ - - - - - - + diff --git a/res/layouts/code_editor.xml.lua b/res/layouts/code_editor.xml.lua index 73f3ca46..55250c13 100644 --- a/res/layouts/code_editor.xml.lua +++ b/res/layouts/code_editor.xml.lua @@ -1,6 +1,5 @@ local writeables = {} local registry -local filenames local current_file = { filename = "", @@ -49,6 +48,10 @@ events.on("core:error", function (msg, traceback) table.insert(errors_all, full) end) +events.on("core:open_in_editor", function(filename, linenum) + open_file_in_editor(filename, linenum) +end) + local function find_mutable(filename) local packid = file.prefix(filename) if packid == "core" then @@ -80,17 +83,6 @@ local function refresh_file_title() ..(edited and ' *' or '') end -function filter_files(text) - local pattern_safe = text:pattern_safe(); - local filtered = {} - for _, filename in ipairs(filenames) do - if filename:find(pattern_safe) then - table.insert(filtered, filename) - end - end - build_files_list(filtered, pattern_safe) -end - function on_control_combination(keycode) if keycode == input.keycode("s") then save_current_file() @@ -230,44 +222,11 @@ function open_file_in_editor(filename, line, mutable) document.saveIcon.enabled = current_file.modified end -function build_files_list(filenames, highlighted_part) - local files_list = document.filesList - files_list.scroll = 0 - files_list:clear() - - for _, actual_filename in ipairs(filenames) do - local filename = actual_filename - if highlighted_part then - filename = filename:gsub(highlighted_part, "**"..highlighted_part.."**") - end - local parent = file.parent(filename) - local info = registry.get_info(actual_filename) - local icon = "file" - if info then - icon = info.type == "component" and "entity" or info.type - end - files_list:add(gui.template("script_file", { - path = parent .. (parent[#parent] == ':' and '' or '/'), - name = file.name(filename), - icon = icon, - unit = info and info.unit or '', - filename = actual_filename, - open_func = "open_file_in_editor", - })) - end -end - function on_open(mode) registry = require "core:internal/scripts_registry" - - local files_list = document.filesList document.editorContainer:setInterval(200, refresh_file_title) clear_traceback() clear_output() - - filenames = registry.filenames - table.sort(filenames) - build_files_list(filenames) end diff --git a/res/layouts/files_panel.xml b/res/layouts/files_panel.xml new file mode 100644 index 00000000..680b3e43 --- /dev/null +++ b/res/layouts/files_panel.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/res/layouts/files_panel.xml.lua b/res/layouts/files_panel.xml.lua new file mode 100644 index 00000000..a4d6ca39 --- /dev/null +++ b/res/layouts/files_panel.xml.lua @@ -0,0 +1,54 @@ +local registry +local filenames + +function filter_files(text) + local pattern_safe = text:pattern_safe(); + local filtered = {} + for _, filename in ipairs(filenames) do + if filename:find(pattern_safe) then + table.insert(filtered, filename) + end + end + build_files_list(filtered, pattern_safe) +end + +function open_file_in_editor(filename, linenum) + events.emit("core:open_in_editor", filename, linenum) +end + +function build_files_list(filenames, highlighted_part) + local files_list = document.filesList + files_list.scroll = 0 + files_list:clear() + + for _, actual_filename in ipairs(filenames) do + local filename = actual_filename + if highlighted_part then + filename = filename:gsub(highlighted_part, "**"..highlighted_part.."**") + end + local parent = file.parent(filename) + local info = registry.get_info(actual_filename) + local icon = "file" + if info then + icon = info.type == "component" and "entity" or info.type + end + files_list:add(gui.template("script_file", { + path = parent .. (parent[#parent] == ':' and '' or '/'), + name = file.name(filename), + icon = icon, + unit = info and info.unit or '', + filename = actual_filename, + open_func = "open_file_in_editor", + })) + end +end + +function on_open(mode) + registry = require "core:internal/scripts_registry" + + local files_list = document.filesList + + filenames = registry.filenames + table.sort(filenames) + build_files_list(filenames) +end diff --git a/res/modules/internal/scripts_registry.lua b/res/modules/internal/scripts_registry.lua index 8933c971..e62be06a 100644 --- a/res/modules/internal/scripts_registry.lua +++ b/res/modules/internal/scripts_registry.lua @@ -1,6 +1,6 @@ local export = { filenames = {}, - classification = {} + registry = {} } local function collect_components(dirname, dest) @@ -9,7 +9,7 @@ local function collect_components(dirname, dest) for i, filename in ipairs(files) do if file.ext(filename) == "lua" then table.insert(dest, filename) - export.classification[filename] = { + export.registry[filename] = { type="component", unit=file.prefix(filename)..":"..file.stem(filename) } @@ -33,13 +33,13 @@ local function collect_scripts(dirname, dest, ismodule) end end -local function load_scripts_list() - local packs = pack.get_installed() +local function load_scripts_list(packs) + local registry = export.registry for _, packid in ipairs(packs) do collect_scripts(packid..":modules", export.filenames, true) end for _, filename in ipairs(export.filenames) do - export.classification[filename] = { + registry[filename] = { type="module", unit=file.join(file.parent(file.prefix(filename)..":".. filename:sub(filename:find("/")+1)), @@ -51,27 +51,39 @@ local function load_scripts_list() end end -function export.build_classification() - local classification = {} +local function load_models_list(packs) + local registry = export.registry + for _, filename in ipairs(file.list("models")) do + local ext = file.ext(filename) + if ext == "xml" then + registry[filename] = {type="model"} + table.insert(export.filenames, filename) + end + end +end + +function export.build_registry() + local registry = {} for id, props in pairs(block.properties) do - classification[props["script-file"]] = {type="block", unit=block.name(id)} + registry[props["script-file"]] = {type="block", unit=block.name(id)} end for id, props in pairs(item.properties) do - classification[props["script-file"]] = {type="item", unit=item.name(id)} + registry[props["script-file"]] = {type="item", unit=item.name(id)} end local packs = pack.get_installed() for _, packid in ipairs(packs) do - classification[packid..":scripts/world.lua"] = {type="world", unit=packid} - classification[packid..":scripts/hud.lua"] = {type="hud", unit=packid} + registry[packid..":scripts/world.lua"] = {type="world", unit=packid} + registry[packid..":scripts/hud.lua"] = {type="hud", unit=packid} end - export.classification = classification + export.registry = registry export.filenames = {} - load_scripts_list() + load_scripts_list(packs) + load_models_list(packs) end function export.get_info(filename) - return export.classification[filename] + return export.registry[filename] end return export diff --git a/res/scripts/post_content.lua b/res/scripts/post_content.lua index 85d7b28a..249ed65c 100644 --- a/res/scripts/post_content.lua +++ b/res/scripts/post_content.lua @@ -63,4 +63,4 @@ cache_names(block) cache_names(item) local scripts_registry = require "core:internal/scripts_registry" -scripts_registry.build_classification() +scripts_registry.build_registry()