aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsapier <Sapier at GMX dot net>2013-11-10 19:37:45 +0100
committersapier <Sapier at GMX dot net>2013-11-10 19:37:45 +0100
commit0f9440fa61fbfd95b0c06217d08b07c81c897ee0 (patch)
tree2e1845fe07af64c1b6f4b6b533ccdb50a8b399ec
parentd75b1718f8768cca1390c463215e65c4ec9ef6c4 (diff)
downloadminetest-0f9440fa61fbfd95b0c06217d08b07c81c897ee0.tar.gz
minetest-0f9440fa61fbfd95b0c06217d08b07c81c897ee0.tar.bz2
minetest-0f9440fa61fbfd95b0c06217d08b07c81c897ee0.zip
Fix "TODO read modinfo" in modmanager to improve ui usability
-rw-r--r--builtin/misc_helpers.lua56
-rw-r--r--builtin/modmgr.lua72
-rw-r--r--doc/lua_api.txt8
-rw-r--r--src/guiFormSpecMenu.cpp9
4 files changed, 129 insertions, 16 deletions
diff --git a/builtin/misc_helpers.lua b/builtin/misc_helpers.lua
index 38909ec1d..55c5798d7 100644
--- a/builtin/misc_helpers.lua
+++ b/builtin/misc_helpers.lua
@@ -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
diff --git a/builtin/modmgr.lua b/builtin/modmgr.lua
index d9579c652..04f19ec86 100644
--- a/builtin/modmgr.lua
+++ b/builtin/modmgr.lua
@@ -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
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index c4d12db0f..db9a5e8fa 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -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.
diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp
index e0ef55acd..aa1e2d9c9 100644
--- a/src/guiFormSpecMenu.cpp
+++ b/src/guiFormSpecMenu.cpp
@@ -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));