You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
1.7 KiB

5 years ago
--[[
EditBoxGroup.lua
@Author : DengSir (tdaddon@163.com)
@Link : https://dengsir.github.io
]]
local MAJOR, MINOR = 'EditBoxGroup', 1
local EditBoxGroup = LibStub('tdGUI-1.0'):NewClass(MAJOR, MINOR)
if not EditBoxGroup then return end
function EditBoxGroup:Constructor()
self._objectOrders = {}
self._objectIndexs = {}
self._OnTabPressed = function(object)
if IsShiftKeyDown() then
self:GetPrevObject(object):SetFocus()
else
self:GetNextObject(object):SetFocus()
end
end
end
function EditBoxGroup:RegisterEditBox(object)
tinsert(self._objectOrders, object)
self._objectIndexs[object] = #self._objectOrders
object:SetScript('OnTabPressed', self._OnTabPressed)
end
function EditBoxGroup:GetNextObject(object)
local index = self._objectIndexs[object]
if index then
local count = #self._objectOrders
local i = index
local next
repeat
i = i % count + 1
next = self._objectOrders[i]
if next:IsVisible() and next:IsEnabled() then
return next
end
until i == index
end
return object
end
function EditBoxGroup:GetPrevObject(object)
local index = self._objectIndexs[object]
if index then
local count = #self._objectOrders
local i = index
local prev
repeat
i = i == 1 and count or i - 1
prev = self._objectOrders[i]
if prev:IsVisible() and prev:IsEnabled() then
return prev
end
until i == index
end
end
function EditBoxGroup:ClearFocus()
for _, object in ipairs(self._objectOrders) do
object:ClearFocus()
end
end