194 lines
4.7 KiB
Lua
194 lines
4.7 KiB
Lua
|
|
function OpenStackSplitFrame(maxStack, parent, anchor, anchorTo)
|
|
if ( StackSplitFrame.owner ) then
|
|
StackSplitFrame.owner.hasStackSplit = 0;
|
|
end
|
|
|
|
if ( not maxStack ) then
|
|
maxStack = 0;
|
|
end
|
|
|
|
StackSplitFrame.maxStack = maxStack;
|
|
if ( StackSplitFrame.maxStack < 2 ) then
|
|
StackSplitFrame:Hide();
|
|
return;
|
|
end
|
|
|
|
StackSplitFrame.owner = parent;
|
|
parent.hasStackSplit = 1;
|
|
StackSplitFrame.split = 1;
|
|
StackSplitFrame.typing = 0;
|
|
StackSplitText:SetText(StackSplitFrame.split);
|
|
StackSplitLeftButton:Disable();
|
|
StackSplitRightButton:Enable();
|
|
|
|
StackSplitFrame:ClearAllPoints();
|
|
StackSplitFrame:SetPoint(anchor, parent, anchorTo, 0, 0);
|
|
StackSplitFrame:Show();
|
|
end
|
|
|
|
function UpdateStackSplitFrame(maxStack)
|
|
StackSplitFrame.maxStack = maxStack;
|
|
if ( StackSplitFrame.maxStack < 2 ) then
|
|
if ( StackSplitFrame.owner ) then
|
|
StackSplitFrame.owner.hasStackSplit = 0;
|
|
end
|
|
StackSplitFrame:Hide();
|
|
return;
|
|
end
|
|
|
|
if ( StackSplitFrame.split > StackSplitFrame.maxStack ) then
|
|
StackSplitFrame.split = StackSplitFrame.maxStack;
|
|
StackSplitText:SetText(StackSplitFrame.split);
|
|
end
|
|
|
|
if ( StackSplitFrame.split == StackSplitFrame.maxStack ) then
|
|
StackSplitRightButton:Disable();
|
|
else
|
|
StackSplitRightButton:Enable();
|
|
end
|
|
|
|
if ( StackSplitFrame.split == 1 ) then
|
|
StackSplitLeftButton:Disable();
|
|
else
|
|
StackSplitLeftButton:Enable();
|
|
end
|
|
end
|
|
|
|
function StackSplitFrame_OnChar(self,text)
|
|
if ( text < "0" or text > "9" ) then
|
|
return;
|
|
end
|
|
|
|
if ( self.typing == 0 ) then
|
|
self.typing = 1;
|
|
self.split = 0;
|
|
end
|
|
|
|
local split = (self.split * 10) + text;
|
|
if ( split == self.split ) then
|
|
if( self.split == 0 ) then
|
|
self.split = 1;
|
|
end
|
|
return;
|
|
end
|
|
|
|
if ( split <= self.maxStack ) then
|
|
self.split = split;
|
|
StackSplitText:SetText(split);
|
|
if ( split == self.maxStack ) then
|
|
StackSplitRightButton:Disable();
|
|
else
|
|
StackSplitRightButton:Enable();
|
|
end
|
|
if ( split == 1 ) then
|
|
StackSplitLeftButton:Disable();
|
|
else
|
|
StackSplitLeftButton:Enable();
|
|
end
|
|
elseif ( split == 0 ) then
|
|
self.split = 1;
|
|
end
|
|
end
|
|
|
|
function StackSplitFrame_OnKeyDown(self,key)
|
|
local numKey = gsub(key, "NUMPAD", "");
|
|
if ( key == "BACKSPACE" or key == "DELETE" ) then
|
|
if ( self.typing == 0 or self.split == 1 ) then
|
|
return;
|
|
end
|
|
|
|
self.split = floor(self.split / 10);
|
|
if ( self.split <= 1 ) then
|
|
self.split = 1;
|
|
self.typing = 0;
|
|
StackSplitLeftButton:Disable();
|
|
else
|
|
StackSplitLeftButton:Enable();
|
|
end
|
|
StackSplitText:SetText(self.split);
|
|
if ( self.money == self.maxStack ) then
|
|
StackSplitRightButton:Disable();
|
|
else
|
|
StackSplitRightButton:Enable();
|
|
end
|
|
elseif ( key == "ENTER" ) then
|
|
StackSplitFrameOkay_Click();
|
|
elseif ( GetBindingFromClick(key) == "TOGGLEGAMEMENU" ) then
|
|
StackSplitFrameCancel_Click();
|
|
elseif ( key == "LEFT" or key == "DOWN" ) then
|
|
StackSplitFrameLeft_Click();
|
|
elseif (key == "RIGHT" or key == "UP" ) then
|
|
StackSplitFrameRight_Click();
|
|
elseif ( not ( tonumber(numKey) ) and GetBindingAction(key) ) then
|
|
--Running bindings not used by the StackSplit frame allows players to retain control of their characters.
|
|
RunBinding(GetBindingAction(key));
|
|
end
|
|
|
|
self.down = self.down or {};
|
|
self.down[key] = true;
|
|
end
|
|
|
|
function StackSplitFrame_OnKeyUp(self,key)
|
|
local numKey = gsub(key, "NUMPAD", "");
|
|
if ( not ( tonumber(numKey) ) and GetBindingAction(key) ) then
|
|
--If we don't run the up bindings as well, interesting things happen (like you never stop moving)
|
|
RunBinding(GetBindingAction(key), "up");
|
|
end
|
|
|
|
if ( self.down ) then
|
|
self.down[key] = nil;
|
|
end
|
|
end
|
|
|
|
function StackSplitFrameLeft_Click()
|
|
if ( StackSplitFrame.split == 1 ) then
|
|
return;
|
|
end
|
|
|
|
StackSplitFrame.split = StackSplitFrame.split - 1;
|
|
StackSplitText:SetText(StackSplitFrame.split);
|
|
if ( StackSplitFrame.split == 1 ) then
|
|
StackSplitLeftButton:Disable();
|
|
end
|
|
StackSplitRightButton:Enable();
|
|
end
|
|
|
|
function StackSplitFrameRight_Click()
|
|
if ( StackSplitFrame.split == StackSplitFrame.maxStack ) then
|
|
return;
|
|
end
|
|
|
|
StackSplitFrame.split = StackSplitFrame.split + 1;
|
|
StackSplitText:SetText(StackSplitFrame.split);
|
|
if ( StackSplitFrame.split == StackSplitFrame.maxStack ) then
|
|
StackSplitRightButton:Disable();
|
|
end
|
|
StackSplitLeftButton:Enable();
|
|
end
|
|
|
|
function StackSplitFrameOkay_Click()
|
|
StackSplitFrame:Hide();
|
|
|
|
if ( StackSplitFrame.owner ) then
|
|
StackSplitFrame.owner.SplitStack(StackSplitFrame.owner, StackSplitFrame.split);
|
|
end
|
|
end
|
|
|
|
function StackSplitFrameCancel_Click()
|
|
StackSplitFrame:Hide();
|
|
end
|
|
|
|
function StackSplitFrame_OnHide (self)
|
|
for key in next, (self.down or {}) do
|
|
if ( GetBindingAction(key) ) then
|
|
RunBinding(GetBindingAction(key), "up");
|
|
end
|
|
self.down[key] = nil;
|
|
end
|
|
|
|
if ( StackSplitFrame.owner ) then
|
|
StackSplitFrame.owner.hasStackSplit = 0;
|
|
end
|
|
end
|