fix scroll bug
This commit is contained in:
@@ -60,7 +60,7 @@ function choicebox:load(values, selected)
|
|||||||
|
|
||||||
-- insert top-n items
|
-- insert top-n items
|
||||||
local startindex = self._STARTINDEX
|
local startindex = self._STARTINDEX
|
||||||
for idx = startindex, startindex + self:height() do
|
for idx = startindex, startindex + self:height() - 1 do
|
||||||
local item = items[idx]
|
local item = items[idx]
|
||||||
if item then
|
if item then
|
||||||
self:insert(item)
|
self:insert(item)
|
||||||
@@ -97,7 +97,7 @@ function choicebox:scroll(count)
|
|||||||
end
|
end
|
||||||
self._STARTINDEX = startindex
|
self._STARTINDEX = startindex
|
||||||
self:clear()
|
self:clear()
|
||||||
for idx = startindex, startindex + self:height() do
|
for idx = startindex, startindex + self:height() - 1 do
|
||||||
local item = items[idx]
|
local item = items[idx]
|
||||||
if item then
|
if item then
|
||||||
item:bounds():move2(0, idx - startindex)
|
item:bounds():move2(0, idx - startindex)
|
||||||
@@ -115,21 +115,46 @@ function choicebox:scroll(count)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- on resize
|
||||||
|
function choicebox:on_resize()
|
||||||
|
local items = self:_items()
|
||||||
|
local totalcount = #items
|
||||||
|
local startindex = self._STARTINDEX
|
||||||
|
for idx = 1, totalcount do
|
||||||
|
local item = items[idx]
|
||||||
|
if item then
|
||||||
|
if idx >= startindex and idx < startindex + self:height() then
|
||||||
|
if not self:view(item:name()) then
|
||||||
|
item:bounds():move2(0, idx - startindex)
|
||||||
|
self:insert(item)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if self:view(item:name()) then
|
||||||
|
self:remove(item)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
panel.on_resize(self)
|
||||||
|
end
|
||||||
|
|
||||||
-- on event
|
-- on event
|
||||||
function choicebox:on_event(e)
|
function choicebox:on_event(e)
|
||||||
if e.type == event.ev_keyboard then
|
if e.type == event.ev_keyboard then
|
||||||
if e.key_name == "Down" then
|
if e.key_name == "Down" then
|
||||||
if self:current() == self:last() then
|
if self:current() == self:last() then
|
||||||
self:scroll(self:height())
|
self:scroll(self:height())
|
||||||
end
|
else
|
||||||
self:select_next()
|
self:select_next()
|
||||||
|
end
|
||||||
self:_notify_scrolled()
|
self:_notify_scrolled()
|
||||||
return true
|
return true
|
||||||
elseif e.key_name == "Up" then
|
elseif e.key_name == "Up" then
|
||||||
if self:current() == self:first() then
|
if self:current() == self:first() then
|
||||||
self:scroll(-self:height())
|
self:scroll(-self:height())
|
||||||
end
|
else
|
||||||
self:select_prev()
|
self:select_prev()
|
||||||
|
end
|
||||||
self:_notify_scrolled()
|
self:_notify_scrolled()
|
||||||
return true
|
return true
|
||||||
elseif e.key_name == "Enter" or e.key_name == " " then
|
elseif e.key_name == "Enter" or e.key_name == " " then
|
||||||
|
@@ -46,25 +46,6 @@ function menuconf:init(name, bounds)
|
|||||||
|
|
||||||
-- init start index
|
-- init start index
|
||||||
self._STARTINDEX = 1
|
self._STARTINDEX = 1
|
||||||
|
|
||||||
-- on resize for panel
|
|
||||||
self:action_add(action.ac_on_resized, function (v)
|
|
||||||
local items = self:_items()
|
|
||||||
local totalcount = #items
|
|
||||||
local startindex = self._STARTINDEX
|
|
||||||
self:clear()
|
|
||||||
for idx = startindex, startindex + self:height() do
|
|
||||||
local item = items[idx]
|
|
||||||
if item then
|
|
||||||
item:bounds():move2(0, idx - startindex)
|
|
||||||
self:insert(item)
|
|
||||||
else
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
self:select(self:first())
|
|
||||||
self:invalidate()
|
|
||||||
end)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- load configs
|
-- load configs
|
||||||
@@ -93,7 +74,7 @@ function menuconf:load(configs)
|
|||||||
|
|
||||||
-- insert top-n items
|
-- insert top-n items
|
||||||
local startindex = self._STARTINDEX
|
local startindex = self._STARTINDEX
|
||||||
for idx = startindex, startindex + self:height() do
|
for idx = startindex, startindex + self:height() - 1 do
|
||||||
local item = items[idx]
|
local item = items[idx]
|
||||||
if item then
|
if item then
|
||||||
self:insert(item)
|
self:insert(item)
|
||||||
@@ -130,7 +111,7 @@ function menuconf:scroll(count)
|
|||||||
end
|
end
|
||||||
self._STARTINDEX = startindex
|
self._STARTINDEX = startindex
|
||||||
self:clear()
|
self:clear()
|
||||||
for idx = startindex, startindex + self:height() do
|
for idx = startindex, startindex + self:height() - 1 do
|
||||||
local item = items[idx]
|
local item = items[idx]
|
||||||
if item then
|
if item then
|
||||||
item:bounds():move2(0, idx - startindex)
|
item:bounds():move2(0, idx - startindex)
|
||||||
@@ -148,6 +129,29 @@ function menuconf:scroll(count)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- on resize
|
||||||
|
function menuconf:on_resize()
|
||||||
|
local items = self:_items()
|
||||||
|
local totalcount = #items
|
||||||
|
local startindex = self._STARTINDEX
|
||||||
|
for idx = 1, totalcount do
|
||||||
|
local item = items[idx]
|
||||||
|
if item then
|
||||||
|
if idx >= startindex and idx < startindex + self:height() then
|
||||||
|
if not self:view(item:name()) then
|
||||||
|
item:bounds():move2(0, idx - startindex)
|
||||||
|
self:insert(item)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if self:view(item:name()) then
|
||||||
|
self:remove(item)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
panel.on_resize(self)
|
||||||
|
end
|
||||||
|
|
||||||
-- on event
|
-- on event
|
||||||
function menuconf:on_event(e)
|
function menuconf:on_event(e)
|
||||||
local back = false
|
local back = false
|
||||||
@@ -155,15 +159,17 @@ function menuconf:on_event(e)
|
|||||||
if e.key_name == "Down" then
|
if e.key_name == "Down" then
|
||||||
if self:current() == self:last() then
|
if self:current() == self:last() then
|
||||||
self:scroll(self:height())
|
self:scroll(self:height())
|
||||||
end
|
else
|
||||||
self:select_next()
|
self:select_next()
|
||||||
|
end
|
||||||
self:_notify_scrolled()
|
self:_notify_scrolled()
|
||||||
return true
|
return true
|
||||||
elseif e.key_name == "Up" then
|
elseif e.key_name == "Up" then
|
||||||
if self:current() == self:first() then
|
if self:current() == self:first() then
|
||||||
self:scroll(-self:height())
|
self:scroll(-self:height())
|
||||||
end
|
else
|
||||||
self:select_prev()
|
self:select_prev()
|
||||||
|
end
|
||||||
self:_notify_scrolled()
|
self:_notify_scrolled()
|
||||||
return true
|
return true
|
||||||
elseif e.key_name == "Enter" or e.key_name == " " then
|
elseif e.key_name == "Enter" or e.key_name == " " then
|
||||||
|
Reference in New Issue
Block a user