track last shortcut assigned and ignore other keys

This change also takes advantage of fact that ev.code increases by 1
with each key in same row which removes a lot of duplication
pull/2/merge
Dobrica Pavlinusic 12 years ago
parent 88d5f578f8
commit 796b42cc36

@ -37,6 +37,7 @@ SelectMenu = {
"A", "S", "D", "F", "G", "H", "J", "K", "L", "Del",
"Z", "X", "C", "V", "B", "N", "M", ".", "Sym", "Ent",
},
last_shortcut = 0,
-- state buffer
page = 1,
current = 1,
@ -76,8 +77,9 @@ function SelectMenu:updateFont()
end
function SelectMenu:getItemIndexByShortCut(c, perpage)
if c == nil then return end -- unused key
for _k,_v in ipairs(self.item_shortcuts) do
if _v == c then
if _v == c and _k <= self.last_shortcut then
return (perpage * (self.page - 1) + _k)
end
end
@ -121,6 +123,7 @@ function SelectMenu:choose(ypos, height)
end
end
self.last_shortcut = 0
while true do
if pagedirty then
@ -165,6 +168,8 @@ function SelectMenu:choose(ypos, height)
self.item_shortcuts[c], true)
end
self.last_shortcut = c
renderUtf8Text(fb.bb, 50, y, self.face, self.fhash,
self.item_array[i], true)
end
@ -204,6 +209,7 @@ function SelectMenu:choose(ypos, height)
local ev = input.waitForEvent()
ev.code = adjustKeyEvents(ev)
if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then
local selected = nil
if ev.code == KEY_FW_UP then
prevItem()
elseif ev.code == KEY_FW_DOWN then
@ -227,75 +233,33 @@ function SelectMenu:choose(ypos, height)
self.current = 1
markerdirty = true
end
elseif ev.code == KEY_FW_PRESS then
elseif ev.code == KEY_FW_PRESS or ev.code == KEY_ENTER and self.last_shortcut < 30 then
if self.items == 0 then
return nil
else
return (perpage*(self.page-1) + self.current)
end
elseif ev.code == KEY_Q then
return self:getItemIndexByShortCut("Q", perpage)
elseif ev.code == KEY_W then
return self:getItemIndexByShortCut("W", perpage)
elseif ev.code == KEY_D then
return self:getItemIndexByShortCut("D", perpage)
elseif ev.code == KEY_E then
return self:getItemIndexByShortCut("E", perpage)
elseif ev.code == KEY_F then
return self:getItemIndexByShortCut("F", perpage)
elseif ev.code == KEY_G then
return self:getItemIndexByShortCut("G", perpage)
elseif ev.code == KEY_H then
return self:getItemIndexByShortCut("H", perpage)
elseif ev.code == KEY_I then
return self:getItemIndexByShortCut("I", perpage)
elseif ev.code == KEY_J then
return self:getItemIndexByShortCut("J", perpage)
elseif ev.code == KEY_K then
return self:getItemIndexByShortCut("K", perpage)
elseif ev.code == KEY_L then
return self:getItemIndexByShortCut("L", perpage)
elseif ev.code == KEY_A then
return self:getItemIndexByShortCut("A", perpage)
elseif ev.code == KEY_S then
return self:getItemIndexByShortCut("S", perpage)
elseif ev.code == KEY_O then
return self:getItemIndexByShortCut("O", perpage)
elseif ev.code == KEY_P then
return self:getItemIndexByShortCut("P", perpage)
elseif ev.code == KEY_R then
return self:getItemIndexByShortCut("R", perpage)
elseif ev.code == KEY_T then
return self:getItemIndexByShortCut("T", perpage)
elseif ev.code == KEY_U then
return self:getItemIndexByShortCut("U", perpage)
elseif ev.code == KEY_Y then
return self:getItemIndexByShortCut("Y", perpage)
elseif ev.code >= KEY_Q and ev.code <= KEY_P then
selected = self:getItemIndexByShortCut(self.item_shortcuts[ ev.code - KEY_Q + 1 ], perpage)
elseif ev.code >= KEY_A and ev.code <= KEY_L then
selected = self:getItemIndexByShortCut(self.item_shortcuts[ ev.code - KEY_A + 11], perpage)
elseif ev.code >= KEY_Z and ev.code <= KEY_M then
selected = self:getItemIndexByShortCut(self.item_shortcuts[ ev.code - KEY_Z + 21], perpage)
elseif ev.code == KEY_DEL then
return self:getItemIndexByShortCut("Del", perpage)
elseif ev.code == KEY_Z then
return self:getItemIndexByShortCut("Z", perpage)
elseif ev.code == KEY_X then
return self:getItemIndexByShortCut("X", perpage)
elseif ev.code == KEY_C then
return self:getItemIndexByShortCut("C", perpage)
elseif ev.code == KEY_V then
return self:getItemIndexByShortCut("V", perpage)
elseif ev.code == KEY_B then
return self:getItemIndexByShortCut("B", perpage)
elseif ev.code == KEY_N then
return self:geTitemIndexByShortCut("N", perpage)
elseif ev.code == KEY_M then
return self:getItemIndexByShortCut("M", perpage)
selected = self:getItemIndexByShortCut("Del", perpage)
elseif ev.code == KEY_DOT then
return self:getItemIndexByShortCut(".", perpage)
selected = self:getItemIndexByShortCut(".", perpage)
elseif ev.code == KEY_SYM or ev.code == KEY_SLASH then -- DXG has slash after dot
return self:getItemIndexByShortCut("Sym", perpage)
selected = self:getItemIndexByShortCut("Sym", perpage)
elseif ev.code == KEY_ENTER then
return self:getItemIndexByShortCut("Ent", perpage)
selected = self:getItemIndexByShortCut("Ent", perpage)
elseif ev.code == KEY_BACK then
return nil
end
if selected ~= nil then
print("# selected "..selected)
return selected
end
end
end
end

Loading…
Cancel
Save