134 lines
3.4 KiB
Lua

Page = {
classname = "FNPage",
}
function Page:new(page_name, gui_name, num_per_page, forward_func, back_func)
local obj = {
page_name = page_name,
num_per_page = num_per_page,
forward_func = forward_func,
back_func = back_func,
}
function init()
Events.add_custom_event(gui_name, "sprite-button", obj.page_name .. "-forward", obj.page_forward_event)
Events.add_custom_event(gui_name, "sprite-button", obj.page_name .. "-back", obj.page_back_event)
end
function obj:get_page_global()
local global = Player.get_global()
if not global["page-" .. page_name] then global["page-" .. page_name] = {} end
return global["page-" .. page_name]
end
function obj:get_cur_page()
return obj:get_page_global().cur_page or 1
end
function obj:set_cur_page(val)
local max_page = self:amount_page()
if max_page < 1 then max_page = 1 end
local gl_page = obj:get_page_global()
if val < 1 then
gl_page.cur_page = max_page
elseif val > max_page then
gl_page.cur_page = 1
else
gl_page.cur_page = val
end
end
function obj:amount_page()
return math.ceil(#obj:get_page_list() / self.num_per_page)
end
function obj:set_page_list(item_list)
self:get_page_global().list = item_list
--set new cur_page
local max_tab = self:amount_page()
local cur_tab = self:get_cur_page()
if cur_tab > max_tab then
obj:set_cur_page(max_tab)
end
end
function obj:get_page_list()
return self:get_page_global().list or {}
end
function obj:get_list_for_tab(tab_namber)
if tab_namber < 1 and tab_namber > obj:amount_page() then
return {}
end
local src_list = obj:get_page_list()
local ret_list = {}
local beg_ind = (tab_namber - 1) * self.num_per_page + 1
local end_ind = math.min(tab_namber * self.num_per_page, #src_list)
for i = beg_ind, end_ind do
table.insert(ret_list, src_list[i])
end
return ret_list
end
function obj:draw_forward_arrow( parent )
for _, gui in pairs(parent.children) do
if gui and gui.valid then
gui.destroy()
end
end
Gui.add_sprite_button(parent, { type = "sprite-button", name = self.page_name .. "-forward", style = "fnei_right_arrow_button_style" })
end
function obj:draw_back_arrow( parent )
for _, gui in pairs(parent.children) do
if gui and gui.valid then
gui.destroy()
end
end
Gui.add_sprite_button(parent, { type = "sprite-button", name = self.page_name .. "-back", style = "fnei_left_arrow_button_style" })
end
function obj.page_forward_event(event, name)
if event.control then
obj:set_cur_page(obj:get_cur_page() + 5)
elseif event.alt then
obj:set_cur_page(obj:amount_page())
elseif event.shift then
obj:set_cur_page(obj:get_cur_page() + 10)
else
obj:set_cur_page(obj:get_cur_page() + 1)
end
if obj.forward_func then
obj.forward_func(event, tab_name)
end
end
function obj.page_back_event(event, name)
if event.control then
obj:set_cur_page(obj:get_cur_page() - 5)
elseif event.alt then
obj:set_cur_page(1)
elseif event.shift then
obj:set_cur_page(obj:get_cur_page() - 10)
else
obj:set_cur_page(obj:get_cur_page() - 1)
end
if obj.back_func then
obj.back_func(event, tab_name)
end
end
init()
setmetatable(obj, self)
self.__index = self; return obj
end