mirror of
https://github.com/MCLx86/xtreemtest.git
synced 2025-12-06 23:45:32 +01:00
More main menu tweaks
This commit is contained in:
237
builtin/fstk/tabview_layouts.lua
Normal file
237
builtin/fstk/tabview_layouts.lua
Normal file
@@ -0,0 +1,237 @@
|
||||
--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.
|
||||
|
||||
|
||||
tabview_layouts = {}
|
||||
|
||||
tabview_layouts.tabs = {
|
||||
get = function(self, view)
|
||||
local formspec = ""
|
||||
if view.parent == nil then
|
||||
local tsize = view.tablist[view.last_tab_index].tabsize or
|
||||
{width=view.width, height=view.height}
|
||||
formspec = formspec ..
|
||||
string.format("size[%f,%f,%s]",tsize.width,tsize.height,
|
||||
dump(view.fixed_size))
|
||||
end
|
||||
formspec = formspec .. self:get_header(view)
|
||||
formspec = formspec ..
|
||||
view.tablist[view.last_tab_index].get_formspec(
|
||||
view,
|
||||
view.tablist[view.last_tab_index].name,
|
||||
view.tablist[view.last_tab_index].tabdata,
|
||||
view.tablist[view.last_tab_index].tabsize
|
||||
)
|
||||
|
||||
return formspec
|
||||
end,
|
||||
|
||||
get_header = function(self, view)
|
||||
local toadd = ""
|
||||
for i=1,#view.tablist do
|
||||
if toadd ~= "" then
|
||||
toadd = toadd .. ","
|
||||
end
|
||||
toadd = toadd .. view.tablist[i].caption
|
||||
end
|
||||
|
||||
return string.format("tabheader[%f,%f;%s;%s;%i;true;false]",
|
||||
view.header_x, view.header_y, view.name, toadd, view.last_tab_index);
|
||||
end,
|
||||
|
||||
handle_buttons = function(self, view, fields)
|
||||
--save tab selection to config file
|
||||
if fields[view.name] then
|
||||
local index = tonumber(fields[view.name])
|
||||
view:switch_to_tab(index)
|
||||
return true
|
||||
end
|
||||
|
||||
return false
|
||||
end,
|
||||
}
|
||||
|
||||
|
||||
tabview_layouts.vertical = {
|
||||
get = function(self, view)
|
||||
local formspec = ""
|
||||
if view.parent == nil then
|
||||
local tsize = view.tablist[view.last_tab_index].tabsize or
|
||||
{width=view.width, height=view.height}
|
||||
formspec = formspec ..
|
||||
string.format("size[%f,%f,%s]real_coordinates[true]",tsize.width+3,tsize.height,
|
||||
dump(view.fixed_size))
|
||||
end
|
||||
formspec = formspec .. self:get_header(view)
|
||||
formspec = formspec .. "container[3,0]"
|
||||
formspec = formspec ..
|
||||
view.tablist[view.last_tab_index].get_formspec(
|
||||
view,
|
||||
view.tablist[view.last_tab_index].name,
|
||||
view.tablist[view.last_tab_index].tabdata,
|
||||
view.tablist[view.last_tab_index].tabsize
|
||||
)
|
||||
formspec = formspec .. "container_end[]"
|
||||
|
||||
return formspec
|
||||
end,
|
||||
|
||||
get_header = function(self, view)
|
||||
local icon = view.icon
|
||||
local bgcolor = view.bgcolor or "#ACACAC33"
|
||||
local selcolor = view.selcolor or "#ACACAC66"
|
||||
|
||||
local tsize = view.tablist[view.last_tab_index].tabsize or
|
||||
{width=view.width, height=view.height}
|
||||
|
||||
local fs = {
|
||||
("box[%f,%f;%f,%f;%s]"):format(0, 0, 3, tsize.height, bgcolor)
|
||||
}
|
||||
|
||||
if icon then
|
||||
fs[#fs + 1] = "image[1,0.375;1,1;"
|
||||
fs[#fs + 1] = icon
|
||||
fs[#fs + 1] = "]"
|
||||
end
|
||||
|
||||
for i = 1, #view.tablist do
|
||||
local tab = view.tablist[i]
|
||||
local name = "tab_" .. tab.name
|
||||
local y = (i - 1) * 0.8 + 2.25
|
||||
|
||||
fs[#fs + 1] = "label[0.375,"
|
||||
fs[#fs + 1] = tonumber(y)
|
||||
fs[#fs + 1] = ";"
|
||||
fs[#fs + 1] = tab.caption
|
||||
fs[#fs + 1] = "]"
|
||||
|
||||
fs[#fs + 1] = "style["
|
||||
fs[#fs + 1] = name
|
||||
fs[#fs + 1] = ";border=false]"
|
||||
|
||||
fs[#fs + 1] = "button[0,"
|
||||
fs[#fs + 1] = tonumber(y - 0.4 )
|
||||
fs[#fs + 1] = ";3,0.8;"
|
||||
fs[#fs + 1] = name
|
||||
fs[#fs + 1] = ";]"
|
||||
|
||||
if i == view.last_tab_index then
|
||||
fs[#fs + 1] = ("box[%f,%f;%f,%f;%s]"):format(0, y - 0.4, 3, 0.8, selcolor)
|
||||
end
|
||||
end
|
||||
|
||||
print(defaulttexturedir .. "blank.png")
|
||||
|
||||
return table.concat(fs, "")
|
||||
end,
|
||||
|
||||
handle_buttons = function(self, view, fields)
|
||||
for i = 1, #view.tablist do
|
||||
local tab = view.tablist[i]
|
||||
if fields["tab_" .. tab.name] then
|
||||
view:switch_to_tab(i)
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end,
|
||||
}
|
||||
|
||||
|
||||
tabview_layouts.mainmenu = {
|
||||
backtxt = (defaulttexturedir or "") .. "back.png",
|
||||
|
||||
get = function(self, view)
|
||||
local tab = view.tablist[view.last_tab_index]
|
||||
if tab then
|
||||
return self:get_with_back(view, tab)
|
||||
else
|
||||
return self:get_main_buttons(view)
|
||||
end
|
||||
end,
|
||||
|
||||
get_with_back = function(self, view, tab)
|
||||
local backtxt = view.backtxt or self.backtxt
|
||||
|
||||
local formspec = ""
|
||||
if view.parent == nil then
|
||||
local tsize = tab.tabsize or
|
||||
{width=view.width, height=view.height}
|
||||
formspec = formspec ..
|
||||
string.format("size[%f,%f,%s]real_coordinates[true]",tsize.width,tsize.height,
|
||||
dump(view.fixed_size))
|
||||
end
|
||||
formspec = formspec ..
|
||||
"style[main_back;noclip=true;border=false]image_button[-1.25,0;1,1;" .. backtxt .. ";main_back;]" ..
|
||||
tab.get_formspec(
|
||||
view,
|
||||
view.tablist[view.last_tab_index].name,
|
||||
view.tablist[view.last_tab_index].tabdata,
|
||||
view.tablist[view.last_tab_index].tabsize
|
||||
)
|
||||
|
||||
return formspec
|
||||
end,
|
||||
|
||||
get_main_buttons = function(self, view)
|
||||
local icon = view.icon
|
||||
local bgcolor = view.bgcolor or "#ACACAC33"
|
||||
local selcolor = view.selcolor or "#ACACAC66"
|
||||
|
||||
local tsize = { width = 3, height = #view.tablist - 0.2}
|
||||
|
||||
local fs = {
|
||||
("size[%f,%f]"):format(tsize.width, tsize.height),
|
||||
"real_coordinates[true]",
|
||||
"bgcolor[#00000000]",
|
||||
("box[%f,%f;%f,%f;%s]"):format(0, 0, 3, tsize.height, bgcolor)
|
||||
}
|
||||
|
||||
for i = 1, #view.tablist do
|
||||
local tab = view.tablist[i]
|
||||
local name = "tab_" .. tab.name
|
||||
local y = i - 1
|
||||
|
||||
fs[#fs + 1] = "button[0,"
|
||||
fs[#fs + 1] = tonumber(y)
|
||||
fs[#fs + 1] = ";3,0.8;"
|
||||
fs[#fs + 1] = name
|
||||
fs[#fs + 1] = ";"
|
||||
fs[#fs + 1] = minetest.formspec_escape(tab.caption)
|
||||
fs[#fs + 1] ="]"
|
||||
end
|
||||
|
||||
return table.concat(fs, "")
|
||||
end,
|
||||
|
||||
handle_buttons = function(self, view, fields)
|
||||
if fields.main_back then
|
||||
view:switch_to_tab(nil)
|
||||
return true
|
||||
end
|
||||
for i = 1, #view.tablist do
|
||||
local tab = view.tablist[i]
|
||||
if fields["tab_" .. tab.name] then
|
||||
view:switch_to_tab(i)
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end,
|
||||
}
|
||||
Reference in New Issue
Block a user