summaryrefslogtreecommitdiff
path: root/builtin/mainmenu/tab_mods.lua
diff options
context:
space:
mode:
Diffstat (limited to 'builtin/mainmenu/tab_mods.lua')
-rw-r--r--builtin/mainmenu/tab_mods.lua170
1 files changed, 170 insertions, 0 deletions
diff --git a/builtin/mainmenu/tab_mods.lua b/builtin/mainmenu/tab_mods.lua
new file mode 100644
index 000000000..b258ce6c5
--- /dev/null
+++ b/builtin/mainmenu/tab_mods.lua
@@ -0,0 +1,170 @@
+--Minetest
+--Copyright (C) 2014 sapier
+--
+--This program is free software; you can redistribute it and/or modify
+--it under the terms of the GNU Lesser General Public License as published by
+--the Free Software Foundation; either version 2.1 of the License, or
+--(at your option) any later version.
+--
+--This program is distributed in the hope that it will be useful,
+--but WITHOUT ANY WARRANTY; without even the implied warranty of
+--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+--GNU Lesser General Public License for more details.
+--
+--You should have received a copy of the GNU Lesser General Public License along
+--with this program; if not, write to the Free Software Foundation, Inc.,
+--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+--------------------------------------------------------------------------------
+local function get_formspec(tabview, name, tabdata)
+
+ if modmgr.global_mods == nil then
+ modmgr.refresh_globals()
+ end
+
+ if tabdata.selected_mod == nil then
+ tabdata.selected_mod = 1
+ end
+
+ local retval =
+ "vertlabel[0,-0.25;".. fgettext("MODS") .. "]" ..
+ "label[0.8,-0.25;".. fgettext("Installed Mods:") .. "]" ..
+ "textlist[0.75,0.25;4.5,4;modlist;" ..
+ modmgr.render_modlist(modmgr.global_mods) ..
+ ";" .. tabdata.selected_mod .. "]"
+
+ retval = retval ..
+ "label[0.8,4.2;" .. fgettext("Add mod:") .. "]" ..
+-- TODO Disabled due to upcoming release 0.4.8 and irrlicht messing up localization
+-- "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_modstore;".. fgettext("Online mod repository") .. "]"
+
+ local selected_mod = nil
+
+ if filterlist.size(modmgr.global_mods) >= tabdata.selected_mod then
+ selected_mod = modmgr.global_mods:get_list()[tabdata.selected_mod]
+ 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
+ local 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;" .. core.formspec_escape(modscreenshot) .. "]"
+ .. "label[8.25,0.6;" .. selected_mod.name .. "]"
+
+ local descriptionlines = nil
+ error = nil
+ local descriptionfilename = selected_mod.path .. "description.txt"
+ local descriptionfile,error = io.open(descriptionfilename,"r")
+ if error == nil then
+ local descriptiontext = descriptionfile:read("*all")
+
+ descriptionlines = core.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 .. core.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:,"
+
+ local toadd = modmgr.get_dependencies(selected_mod.path)
+
+ retval = retval .. toadd .. ";0]"
+
+ retval = retval .. "button[5.5,4.85;4.5,0.5;btn_mod_mgr_delete_mod;"
+ .. fgettext("Uninstall selected mod") .. "]"
+ end
+ end
+ return retval
+end
+
+--------------------------------------------------------------------------------
+local function handle_buttons(tabview, fields, tabname, tabdata)
+ if fields["modlist"] ~= nil then
+ local event = core.explode_textlist_event(fields["modlist"])
+ tabdata.selected_mod = event.index
+ return true
+ end
+
+ if fields["btn_mod_mgr_install_local"] ~= nil then
+ core.show_file_open_dialog("mod_mgt_open_dlg",fgettext("Select Mod File:"))
+ return true
+ end
+
+ if fields["btn_modstore"] ~= nil then
+ local modstore_ui = ui.find_by_name("modstore")
+ if modstore_ui ~= nil then
+ tabview:hide()
+ modstore.update_modlist()
+ modstore_ui:show()
+ else
+ print("modstore ui element not found")
+ end
+ return true
+ end
+
+ if fields["btn_mod_mgr_rename_modpack"] ~= nil then
+ local dlg_renamemp = create_rename_modpack_dlg(tabdata.selected_mod)
+ dlg_renamemp:set_parent(tabview)
+ tabview:hide()
+ dlg_renamemp:show()
+ return true
+ end
+
+ if fields["btn_mod_mgr_delete_mod"] ~= nil then
+ local dlg_delmod = create_delete_mod_dlg(tabdata.selected_mod)
+ dlg_delmod:set_parent(tabview)
+ tabview:hide()
+ dlg_delmod:show()
+ return true
+ end
+
+ if fields["mod_mgt_open_dlg_accepted"] ~= nil and
+ fields["mod_mgt_open_dlg_accepted"] ~= "" then
+ modmgr.installmod(fields["mod_mgt_open_dlg_accepted"],nil)
+ return true
+ end
+
+ return false
+end
+
+--------------------------------------------------------------------------------
+tab_mods = {
+ name = "mods",
+ caption = fgettext("Mods"),
+ cbf_formspec = get_formspec,
+ cbf_button_handler = handle_buttons,
+ on_change = gamemgr.update_gamelist
+}