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.

122 lines
3.2 KiB

5 years ago
--imports
local WIM = WIM;
local _G = _G;
local pairs = pairs;
local GetTime = GetTime;
--set namespace
setfenv(1, WIM);
------------------------------------------
-- Module: ClickControl (Experimental) --
------------------------------------------
local ClickControl = WIM.CreateModule("ClickControl", true);
local isInitialized = false;
local buttons = {};
local frame;
db_defaults.ClickControl = {
clickSensitivity = .2;
};
local function getButtonDownCount()
local count = 0;
for button, tbl in pairs(buttons) do
if(tbl.mouseDown) then
count = count + 1;
end
end
return count;
end
local function getButtonTable(button)
if(buttons[_G.tostring(button)]) then
return buttons[button];
else
buttons[_G.tostring(button)] = {};
return getButtonTable(button);
end
end
local function cleanButtonTable(button)
local tbl = getButtonTable(button);
for t, _ in pairs(tbl) do
tbl[t] = nil;
end
end
local function worldFrameClicked(button)
dPrint("WorldFrame -> Clicked["..button.."]");
WIM.CallModuleFunction("OnWorldFrameClick", button);
end
function ClickControl:OnEnable()
if(not isInitialized) then
_G.WorldFrame:HookScript("OnMouseDown", function(self, button)
if(ClickControl.enabled) then
local p = getButtonTable(button);
p.mouseDown = true;
p.clickStart = GetTime();
end
end);
_G.WorldFrame:HookScript("OnMouseUp", function(self, button)
if(ClickControl.enabled) then
local buttonCount = getButtonDownCount(); -- we need to know this cause we don't want to count moving.
local p = getButtonTable(button);
p.mouseDown = false;
p.clickStop = GetTime();
if(((p.clickStop or 999999999) - (p.clickStart or 0)) < db.ClickControl.clickSensitivity and buttonCount < 2 and not p.move) then
worldFrameClicked(button);
end
cleanButtonTable(button);
end
end);
-- we only want to add hook once.
isInitialized = true;
end
end
function ClickControl:OnDisable()
if(isInitialized) then
-- alert to reload UI.
_G.StaticPopupDialogs["WIM_CLICKCONTROL_DISABLE"] = {
preferredIndex = STATICPOPUP_NUMDIALOGS,
text = L["The UI must be reloaded in order to disable this module fully. Reload UI now?"],
button1 = _G.TEXT(_G.YES),
button2 = _G.TEXT(_G.NO),
OnShow = function(self) end,
OnHide = function() end,
OnAccept = function() _G.ReloadUI(); end,
OnCancel = function() end,
timeout = 0,
whileDead = 1,
hideOnEscape = 1
};
_G.StaticPopup_Show ("WIM_CLICKCONTROL_DISABLE", theLink);
end
end
------------------------------------------
-- Sub Functionality, Editbox Focus --
------------------------------------------
function ClickControl:OnWorldFrameClick(button)
if(EditBoxInFocus) then
local editBox = EditBoxInFocus;
editBox:Hide();
editBox:Show();
end
end