Skip to content
Permalink
Browse files

Fix "TODO read modinfo" in modmanager to improve ui usability

  • Loading branch information
sapier sapier
sapier authored and sapier committed Nov 10, 2013
1 parent d75b171 commit 0f9440fa61fbfd95b0c06217d08b07c81c897ee0
Showing with 129 additions and 16 deletions.
  1. +56 −0 builtin/misc_helpers.lua
  2. +57 −15 builtin/modmgr.lua
  3. +8 −0 doc/lua_api.txt
  4. +8 −1 src/guiFormSpecMenu.cpp
@@ -205,6 +205,62 @@ function tbl.formspec_escape(text)
return text
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
@@ -235,13 +235,14 @@ function modmgr.tab()
local retval =
"vertlabel[0,-0.25;".. fgettext("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.selected_mod .. "]"

retval = retval ..
"button[1,4.85;2,0.5;btn_mod_mgr_install_local;".. fgettext("Install") .. "]" ..
"button[3,4.85;2,0.5;btn_mod_mgr_download;".. fgettext("Download") .. "]"
"label[0.8,4.2;" .. fgettext("Add mod:") .. "]" ..
"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

@@ -250,25 +251,66 @@ function modmgr.tab()
end

if selected_mod ~= nil then
local modscreenshot = nil

--check for screenshot beeing available
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
descriptionlines = {}
table.insert(descriptionlines,fgettext("No mod description available"))
end

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
.. "button[10,4.85;2,0.5;btn_mod_mgr_rename_modpack;" ..
fgettext("Rename") .. "]"
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 ..
"label[6,1.9;".. fgettext("Depends:") .. "]" ..
"textlist[6,2.4;5.7,2;deplist;"
--show dependencies

retval = retval .. ",Depends:,"

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
--show delete button
retval = retval .. "button[8,4.85;2,0.5;btn_mod_mgr_delete_mod;"
.. fgettext("Delete") .. "]"
end
return retval
end
@@ -100,6 +100,8 @@ Mod directory structure
mods
|-- modname
| |-- depends.txt
| |-- screenshot.png
| |-- description.txt
| |-- init.lua
| |-- textures
| | |-- modname_stuff.png
@@ -121,6 +123,12 @@ depends.txt:
to a single modname. Their meaning is that if the specified mod
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:
An alternative way of specifying optional dependencies.
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]);
}
}
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);

m_listboxes.push_back(std::pair<FieldSpec,gui::IGUIListBox*>(spec,e));

0 comments on commit 0f9440f

Please sign in to comment.
You can’t perform that action at this time.