|
|
|
@ -265,7 +265,7 @@ function EditField:onInput(keys)
|
|
|
|
|
|
|
|
|
|
if self.key and keys.LEAVESCREEN then
|
|
|
|
|
local old = self.text
|
|
|
|
|
self.text = self.saved_text
|
|
|
|
|
self:setText(self.saved_text)
|
|
|
|
|
if self.on_change and old ~= self.saved_text then
|
|
|
|
|
self.on_change(self.text, old)
|
|
|
|
|
end
|
|
|
|
@ -291,26 +291,32 @@ function EditField:onInput(keys)
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
return not not self.key
|
|
|
|
|
elseif keys._MOUSE_L then
|
|
|
|
|
local mouse_x, mouse_y = self:getMousePos()
|
|
|
|
|
if mouse_x then
|
|
|
|
|
self:setCursor(mouse_x)
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
elseif keys.CURSOR_LEFT then
|
|
|
|
|
self.cursor = math.max(1, self.cursor - 1)
|
|
|
|
|
self:setCursor(self.cursor - 1)
|
|
|
|
|
return true
|
|
|
|
|
elseif keys.A_MOVE_W_DOWN then -- Ctrl-Left (prev word start)
|
|
|
|
|
local _, prev_word_start = self.text:sub(1, self.cursor-1):
|
|
|
|
|
find('.*[^%w_%-]+[%w_%-]')
|
|
|
|
|
self.cursor = prev_word_start or 1
|
|
|
|
|
self:setCursor(prev_word_start or 1)
|
|
|
|
|
return true
|
|
|
|
|
elseif keys.A_CARE_MOVE_W then -- Alt-Left (home)
|
|
|
|
|
self.cursor = 1
|
|
|
|
|
self:setCursor(1)
|
|
|
|
|
return true
|
|
|
|
|
elseif keys.CURSOR_RIGHT then
|
|
|
|
|
self.cursor = math.min(self.cursor + 1, #self.text + 1)
|
|
|
|
|
self:setCursor(self.cursor + 1)
|
|
|
|
|
return true
|
|
|
|
|
elseif keys.A_MOVE_E_DOWN then -- Ctrl-Right (next word end)
|
|
|
|
|
local _, next_word_end = self.text:find('[%w_%-]+[^%w_%-]', self.cursor)
|
|
|
|
|
self.cursor = next_word_end or #self.text + 1
|
|
|
|
|
self:setCursor(next_word_end)
|
|
|
|
|
return true
|
|
|
|
|
elseif keys.A_CARE_MOVE_E then -- Alt-Right (end)
|
|
|
|
|
self.cursor = #self.text + 1
|
|
|
|
|
self:setCursor()
|
|
|
|
|
return true
|
|
|
|
|
elseif keys._STRING then
|
|
|
|
|
local old = self.text
|
|
|
|
@ -318,15 +324,14 @@ function EditField:onInput(keys)
|
|
|
|
|
-- handle backspace
|
|
|
|
|
local del_pos = self.cursor - 1
|
|
|
|
|
if del_pos > 0 then
|
|
|
|
|
self.text = old:sub(1, del_pos-1) .. old:sub(del_pos+1)
|
|
|
|
|
self.cursor = del_pos
|
|
|
|
|
self:setText(old:sub(1, del_pos-1) .. old:sub(del_pos+1),
|
|
|
|
|
del_pos)
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
local cv = string.char(keys._STRING)
|
|
|
|
|
if not self.on_char or self.on_char(cv, old) then
|
|
|
|
|
self.text = old:sub(1, self.cursor-1) .. cv ..
|
|
|
|
|
old:sub(self.cursor)
|
|
|
|
|
self.cursor = self.cursor + 1
|
|
|
|
|
self:setText(old:sub(1,self.cursor-1)..cv..old:sub(self.cursor),
|
|
|
|
|
self.cursor + 1)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if self.on_change and self.text ~= old then
|
|
|
|
|