Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Redesign of the content addition menu #430

Open
wants to merge 18 commits into
base: main
Choose a base branch
from
Open
54 changes: 41 additions & 13 deletions res/layouts/pages/content.xml
Original file line number Diff line number Diff line change
@@ -1,13 +1,41 @@
<container size='887,454' color='#0F1E2DB2' padding='8' interval='5' context='menu'>
<panel id='packs_cur' pos='2' size='440,406' color='0' max-length='406'>
<!-- content is generated in script -->
</panel>
<panel id='packs_add' pos='445,2' size='440,406' color='0' max-length='406'>
<!-- content is generated in script -->
</panel>
<button id='apply_btn' pos='2,410' size='440,40' onclick='apply()'>@Apply</button>
<button pos='445,410' size='398,40' onclick='menu:back()'>@Cancel</button>
<image onclick='refresh()' interactive='true' src='gui/refresh'
size='32' margin='7' gravity='bottom-right'
color='#FFFFFF80' hover-color='#FFFFFF10'/>
</container>

<container size='940,600' color='#0F1E2DB2' interval='5' context='menu'>
<button pos='15,545' id='apply_btn' size='440,40' onclick='apply()'>@Apply</button>
<button pos='485,545' size='440,40' onclick='menu:back()'>@Cancel</button>

<image id="move_left" src='gui/check_mark'
size='32' margin='218,2,0,0' gravity='top-left'
color='#FFFFFF50'/>

<image id="move_left" src='gui/cross'
size='32' margin='0,2,219,0' gravity='top-right'
color='#FFFFFF50'/>

<panel id='search_panel' size='440,36' pos='15,504' interval='1' color='#0000004C'>
<textbox id='search_textbox' multiline='false' size='440,25' sub-consumer='function(x) refresh_search() end'></textbox>
</panel>

<image onclick='core.open_folder("user:content")' interactive='true' src='gui/folder_icon'
size='32' margin='0,0,18,66' gravity='bottom-right'
color='#FFFFFF50' hover-color='#FFFFFF10'/>

<image onclick='refresh()' interactive='true' src='gui/refresh'
size='32' margin='0,0,65,66' gravity='bottom-right'
color='#FFFFFF80' hover-color='#FFFFFF10'/>

<image id="move_right" onclick='move_right()' interactive='true' src='gui/right_arrow'
size='32' margin='0,0,380,64' gravity='bottom-right'
color='#FFFFFF50' hover-color='#FFFFFF10'/>

<image id="move_left" onclick='move_left()' interactive='true' src='gui/left_arrow'
size='32' margin='0,0,425,64' gravity='bottom-right'
color='#FFFFFF50' hover-color='#FFFFFF10'/>

<panel id='packs_add' pos='485,34' size='440,507' color='0' max-length='455' scrollable='true'>
<!-- content is generated in script -->
</panel>

<panel id='packs_cur' pos='15,34' size='440,507' color='0' max-length='455' scrollable='true'>
<!-- content is generated in script -->
</panel>
</container>
95 changes: 95 additions & 0 deletions res/layouts/pages/content.xml.lua
Original file line number Diff line number Diff line change
Expand Up @@ -8,38 +8,120 @@ end
add_packs = {}
rem_packs = {}

packs_included = {}
packs_excluded = {}
Xertis marked this conversation as resolved.
Show resolved Hide resolved

packs_info = {}

local function include(id, is_include)
if is_include then
table.insert(packs_included, id)
table.remove_value(packs_excluded, id)
else
table.insert(packs_excluded, id)
table.remove_value(packs_included, id)
end
end

function apply()
core.reconfig_packs(add_packs, rem_packs)
if mode ~= "world" then
menu:back()
end
end

function refresh_search()
local search_text = document.search_textbox.text:lower()
local interval = 2
Xertis marked this conversation as resolved.
Show resolved Hide resolved
local step = -1

for _, packs in ipairs({packs_excluded, packs_included}) do
local visible = 0

for i, v in ipairs(packs) do
local info = packs_info[v]

local id = info[1]
local title = info[2]

local content = document["pack_" .. id]
local pos = content.pos
local size = content.size

if title:lower():find(search_text) or search_text == '' then
content.pos = {pos[1], visible * (size[2] + interval) - step}
visible = visible + 1
else
content.pos = {pos[1], (visible + #packs - i) * (size[2] + interval) - step}
end
end
end
end

function refresh_changes()
document.apply_btn.enabled = (#add_packs>0) or (#rem_packs>0)
refresh_search()
end

function move_pack(id)
-- cancel pack addition
if table.has(add_packs, id) then
document["pack_"..id]:moveInto(document.packs_add)
table.remove_value(add_packs, id)
include(id, false)
-- cancel pack removal
elseif table.has(rem_packs, id) then
document["pack_"..id]:moveInto(document.packs_cur)
table.remove_value(rem_packs, id)
include(id, true)
-- add pack
elseif table.has(packs_installed, id) then
document["pack_"..id]:moveInto(document.packs_add)
table.insert(rem_packs, id)
include(id, false)
-- remove pack
else
document["pack_"..id]:moveInto(document.packs_cur)
table.insert(add_packs, id)
include(id, true)
end
refresh_changes()
end

function move_left()
for _, id in pairs(table.copy(packs_excluded)) do
if not document["pack_"..id].enabled then goto continue end

include(id, true)
table.insert(add_packs, id)
table.remove_value(rem_packs, id)
document["pack_"..id]:moveInto(document.packs_cur)

::continue::
end

refresh_changes()
end

function move_right()
for _, id in pairs(table.copy(packs_included)) do
if not document["pack_"..id].enabled then goto continue end

include(id, false)

if table.has(packs_installed, id) then
table.insert(rem_packs, id)
end

table.remove_value(add_packs, id)
document["pack_"..id]:moveInto(document.packs_add)

::continue::
end

refresh_changes()
end

function place_pack(panel, packinfo, callback)
if packinfo.error then
callback = nil
Expand Down Expand Up @@ -115,12 +197,25 @@ function refresh()
place_pack(packs_add, packinfo, callback)
end

for _,id in ipairs(base_packs) do
local packinfo = pack.get_info(id)
packs_info[id] = {packinfo.id, packinfo.title}
end

for _,id in ipairs(packs_all) do
local packinfo = pack.get_info(id)
packs_info[id] = {packinfo.id, packinfo.title}
end

for i,id in ipairs(packs_installed) do
if table.has(required, id) then
document["pack_"..id].enabled = false
end
end

if #packs_excluded == 0 then packs_excluded = table.copy(packs_available) end
if #packs_included == 0 then packs_included = table.copy(packs_installed) end

apply_movements(packs_cur, packs_add)
refresh_changes()
end
Expand Down
3 changes: 2 additions & 1 deletion res/layouts/pages/new_world.xml.lua
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ function on_open()
document.content_btn.text = string.format(
"%s [%s]", gui.str("Content", "menu"), #pack.get_installed()
)
if settings.generator == nil then

if settings.generator == nil or generation.get_generators()[settings.generator] == nil then
settings.generator = generation.get_default_generator()
end
document.generator_btn.text = string.format(
Expand Down
5 changes: 4 additions & 1 deletion res/preload.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@
"gui/cross",
"gui/refresh",
"gui/folder_icon",
"gui/settings_icon"
"gui/settings_icon",
"gui/check_mark",
"gui/left_arrow",
"gui/right_arrow"
],
"fonts": [
{
Expand Down
Binary file added res/textures/gui/check_mark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added res/textures/gui/left_arrow.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added res/textures/gui/loupe.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added res/textures/gui/right_arrow.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading