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 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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>
99 changes: 99 additions & 0 deletions res/layouts/pages/content.xml.lua
Original file line number Diff line number Diff line change
Expand Up @@ -5,41 +5,127 @@ function on_open(params)
refresh()
end

-- add - packs to be added to the world (after apply)
-- rem - packs that should be removed from the world (after apply)
add_packs = {}
rem_packs = {}

-- included - connected packs to the world
-- excluded - packs that are not connected to the world
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
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Позиционирование элементов в панелях происходит автоматически, так что нужно дождаться слияния ветки headless-mode, после чего добавлю корректный способ прятать элементы, вместо манипуляций с позициями.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ну тут скорее их надо не прятать, а сортировать

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 @@ -121,12 +207,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