forked from Mirrorlandia_minetest/minetest
Fix "TODO read modinfo" in modmanager to improve ui usability
This commit is contained in:
parent
d75b1718f8
commit
0f9440fa61
@ -205,6 +205,62 @@ function tbl.formspec_escape(text)
|
|||||||
return text
|
return text
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function tbl.splittext(text,charlimit)
|
||||||
|
local retval = {}
|
||||||
|
|
||||||
|
local current_idx = 1
|
||||||
|
|
||||||
|
local start,stop = string.find(text," ",current_idx)
|
||||||
|
local nl_start,nl_stop = string.find(text,"\n",current_idx)
|
||||||
|
local gotnewline = false
|
||||||
|
if nl_start ~= nil and (start == nil or nl_start < start) then
|
||||||
|
start = nl_start
|
||||||
|
stop = nl_stop
|
||||||
|
gotnewline = true
|
||||||
|
end
|
||||||
|
local last_line = ""
|
||||||
|
while start ~= nil do
|
||||||
|
if string.len(last_line) + (stop-start) > charlimit then
|
||||||
|
table.insert(retval,last_line)
|
||||||
|
last_line = ""
|
||||||
|
end
|
||||||
|
|
||||||
|
if last_line ~= "" then
|
||||||
|
last_line = last_line .. " "
|
||||||
|
end
|
||||||
|
|
||||||
|
last_line = last_line .. string.sub(text,current_idx,stop -1)
|
||||||
|
|
||||||
|
if gotnewline then
|
||||||
|
table.insert(retval,last_line)
|
||||||
|
last_line = ""
|
||||||
|
gotnewline = false
|
||||||
|
end
|
||||||
|
current_idx = stop+1
|
||||||
|
|
||||||
|
start,stop = string.find(text," ",current_idx)
|
||||||
|
nl_start,nl_stop = string.find(text,"\n",current_idx)
|
||||||
|
|
||||||
|
if nl_start ~= nil and (start == nil or nl_start < start) then
|
||||||
|
start = nl_start
|
||||||
|
stop = nl_stop
|
||||||
|
gotnewline = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--add last part of text
|
||||||
|
if string.len(last_line) + (string.len(text) - current_idx) > charlimit then
|
||||||
|
table.insert(retval,last_line)
|
||||||
|
table.insert(retval,string.sub(text,current_idx))
|
||||||
|
else
|
||||||
|
last_line = last_line .. " " .. string.sub(text,current_idx)
|
||||||
|
table.insert(retval,last_line)
|
||||||
|
end
|
||||||
|
|
||||||
|
return retval
|
||||||
|
end
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
if minetest then
|
if minetest then
|
||||||
|
@ -235,13 +235,14 @@ function modmgr.tab()
|
|||||||
local retval =
|
local retval =
|
||||||
"vertlabel[0,-0.25;".. fgettext("MODS") .. "]" ..
|
"vertlabel[0,-0.25;".. fgettext("MODS") .. "]" ..
|
||||||
"label[0.8,-0.25;".. fgettext("Installed Mods:") .. "]" ..
|
"label[0.8,-0.25;".. fgettext("Installed Mods:") .. "]" ..
|
||||||
"textlist[0.75,0.25;4.5,4.3;modlist;" ..
|
"textlist[0.75,0.25;4.5,4;modlist;" ..
|
||||||
modmgr.render_modlist(modmgr.global_mods) ..
|
modmgr.render_modlist(modmgr.global_mods) ..
|
||||||
";" .. modmgr.selected_mod .. "]"
|
";" .. modmgr.selected_mod .. "]"
|
||||||
|
|
||||||
retval = retval ..
|
retval = retval ..
|
||||||
"button[1,4.85;2,0.5;btn_mod_mgr_install_local;".. fgettext("Install") .. "]" ..
|
"label[0.8,4.2;" .. fgettext("Add mod:") .. "]" ..
|
||||||
"button[3,4.85;2,0.5;btn_mod_mgr_download;".. fgettext("Download") .. "]"
|
"button[0.75,4.85;1.8,0.5;btn_mod_mgr_install_local;".. fgettext("Local install") .. "]" ..
|
||||||
|
"button[2.45,4.85;3.05,0.5;btn_mod_mgr_download;".. fgettext("Online mod repository") .. "]"
|
||||||
|
|
||||||
local selected_mod = nil
|
local selected_mod = nil
|
||||||
|
|
||||||
@ -250,25 +251,66 @@ function modmgr.tab()
|
|||||||
end
|
end
|
||||||
|
|
||||||
if selected_mod ~= nil then
|
if selected_mod ~= nil then
|
||||||
if selected_mod.is_modpack then
|
local modscreenshot = nil
|
||||||
retval = retval
|
|
||||||
.. "button[10,4.85;2,0.5;btn_mod_mgr_rename_modpack;" ..
|
--check for screenshot beeing available
|
||||||
fgettext("Rename") .. "]"
|
local screenshotfilename = selected_mod.path .. DIR_DELIM .. "screenshot.png"
|
||||||
|
local error = nil
|
||||||
|
screenshotfile,error = io.open(screenshotfilename,"r")
|
||||||
|
if error == nil then
|
||||||
|
screenshotfile:close()
|
||||||
|
modscreenshot = screenshotfilename
|
||||||
|
end
|
||||||
|
|
||||||
|
if modscreenshot == nil then
|
||||||
|
modscreenshot = modstore.basetexturedir .. "no_screenshot.png"
|
||||||
|
end
|
||||||
|
|
||||||
|
retval = retval
|
||||||
|
.. "image[5.5,0;3,2;" .. modscreenshot .. "]"
|
||||||
|
.. "label[8.25,0.6;" .. selected_mod.name .. "]"
|
||||||
|
|
||||||
|
local descriptionlines = nil
|
||||||
|
error = nil
|
||||||
|
local descriptionfilename = selected_mod.path .. "description.txt"
|
||||||
|
descriptionfile,error = io.open(descriptionfilename,"r")
|
||||||
|
if error == nil then
|
||||||
|
descriptiontext = descriptionfile:read("*all")
|
||||||
|
|
||||||
|
descriptionlines = engine.splittext(descriptiontext,42)
|
||||||
|
descriptionfile:close()
|
||||||
else
|
else
|
||||||
--show dependencies
|
descriptionlines = {}
|
||||||
retval = retval ..
|
table.insert(descriptionlines,fgettext("No mod description available"))
|
||||||
"label[6,1.9;".. fgettext("Depends:") .. "]" ..
|
end
|
||||||
"textlist[6,2.4;5.7,2;deplist;"
|
|
||||||
|
retval = retval ..
|
||||||
|
"label[5.5,1.7;".. fgettext("Mod information:") .. "]" ..
|
||||||
|
"textlist[5.5,2.2;6.2,2.4;description;"
|
||||||
|
|
||||||
|
for i=1,#descriptionlines,1 do
|
||||||
|
retval = retval .. engine.formspec_escape(descriptionlines[i]) .. ","
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
if selected_mod.is_modpack then
|
||||||
|
retval = retval .. ";0]" ..
|
||||||
|
"button[10,4.85;2,0.5;btn_mod_mgr_rename_modpack;" ..
|
||||||
|
fgettext("Rename") .. "]"
|
||||||
|
retval = retval .. "button[5.5,4.85;4.5,0.5;btn_mod_mgr_delete_mod;"
|
||||||
|
.. fgettext("Uninstall selected modpack") .. "]"
|
||||||
|
else
|
||||||
|
--show dependencies
|
||||||
|
|
||||||
|
retval = retval .. ",Depends:,"
|
||||||
|
|
||||||
toadd = modmgr.get_dependencies(selected_mod.path)
|
toadd = modmgr.get_dependencies(selected_mod.path)
|
||||||
|
|
||||||
retval = retval .. toadd .. ";0;true,false]"
|
retval = retval .. toadd .. ";0]"
|
||||||
|
|
||||||
--TODO read modinfo
|
retval = retval .. "button[5.5,4.85;4.5,0.5;btn_mod_mgr_delete_mod;"
|
||||||
|
.. fgettext("Uninstall selected mod") .. "]"
|
||||||
end
|
end
|
||||||
--show delete button
|
|
||||||
retval = retval .. "button[8,4.85;2,0.5;btn_mod_mgr_delete_mod;"
|
|
||||||
.. fgettext("Delete") .. "]"
|
|
||||||
end
|
end
|
||||||
return retval
|
return retval
|
||||||
end
|
end
|
||||||
|
@ -100,6 +100,8 @@ Mod directory structure
|
|||||||
mods
|
mods
|
||||||
|-- modname
|
|-- modname
|
||||||
| |-- depends.txt
|
| |-- depends.txt
|
||||||
|
| |-- screenshot.png
|
||||||
|
| |-- description.txt
|
||||||
| |-- init.lua
|
| |-- init.lua
|
||||||
| |-- textures
|
| |-- textures
|
||||||
| | |-- modname_stuff.png
|
| | |-- modname_stuff.png
|
||||||
@ -121,6 +123,12 @@ depends.txt:
|
|||||||
to a single modname. Their meaning is that if the specified mod
|
to a single modname. Their meaning is that if the specified mod
|
||||||
is missing, that does not prevent this mod from being loaded.
|
is missing, that does not prevent this mod from being loaded.
|
||||||
|
|
||||||
|
screenshot.png:
|
||||||
|
A screenshot shown in modmanager within mainmenu.
|
||||||
|
|
||||||
|
description.txt:
|
||||||
|
File containing desctiption to be shown within mainmenu.
|
||||||
|
|
||||||
optdepends.txt:
|
optdepends.txt:
|
||||||
An alternative way of specifying optional dependencies.
|
An alternative way of specifying optional dependencies.
|
||||||
Like depends.txt, a single line contains a single modname.
|
Like depends.txt, a single line contains a single modname.
|
||||||
|
@ -721,8 +721,15 @@ void GUIFormSpecMenu::parseTextList(parserData* data,std::string element) {
|
|||||||
scrollbar->setPos(data->listbox_scroll[fname_w]);
|
scrollbar->setPos(data->listbox_scroll[fname_w]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
gui::IGUIScrollBar *scrollbar = getListboxScrollbar(e);
|
||||||
|
if (scrollbar) {
|
||||||
|
scrollbar->setPos(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (str_initial_selection != "")
|
if ((str_initial_selection != "") &&
|
||||||
|
(str_initial_selection != "0"))
|
||||||
e->setSelected(stoi(str_initial_selection.c_str())-1);
|
e->setSelected(stoi(str_initial_selection.c_str())-1);
|
||||||
|
|
||||||
m_listboxes.push_back(std::pair<FieldSpec,gui::IGUIListBox*>(spec,e));
|
m_listboxes.push_back(std::pair<FieldSpec,gui::IGUIListBox*>(spec,e));
|
||||||
|
Loading…
Reference in New Issue
Block a user