134 lines
3.4 KiB
Lua
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 |