режим предателя + UI референсы и DragonUI
This commit is contained in:
@@ -0,0 +1,186 @@
|
||||
|
||||
UIMENU_BUTTON_HEIGHT = 16;
|
||||
UIMENU_BUTTON_WIDTH = 104;
|
||||
UIMENU_BORDER_HEIGHT = 12;
|
||||
UIMENU_BORDER_WIDTH = 12;
|
||||
|
||||
UIMENU_NUMBUTTONS = 32;
|
||||
UIMENU_TIMEOUT = 2.0;
|
||||
|
||||
function UIMenu_Initialize(self)
|
||||
self.numButtons = 0;
|
||||
self.subMenu = "";
|
||||
local name = self:GetName();
|
||||
for i = 1, UIMENU_NUMBUTTONS, 1 do
|
||||
local button = _G[name.."Button"..i];
|
||||
button:SetWidth(UIMENU_BUTTON_WIDTH);
|
||||
button:SetHeight(UIMENU_BUTTON_HEIGHT);
|
||||
button:Hide();
|
||||
|
||||
local shortcutString = _G[button:GetName().."ShortcutText"];
|
||||
shortcutString:Hide();
|
||||
end
|
||||
|
||||
self:SetWidth(UIMENU_BUTTON_WIDTH + (UIMENU_BORDER_WIDTH * 2));
|
||||
self:SetHeight(UIMENU_BORDER_HEIGHT * 2);
|
||||
end
|
||||
|
||||
function UIMenu_OnShow(self)
|
||||
self.timeleft = UIMENU_TIMEOUT;
|
||||
self.counting = 0;
|
||||
end
|
||||
|
||||
function UIMenu_AddButton(self, text, shortcut, func, nested, value)
|
||||
local id = self.numButtons + 1;
|
||||
if ( id > UIMENU_NUMBUTTONS ) then
|
||||
message("Too many buttons in UIMenu: "..self:GetName());
|
||||
return;
|
||||
end
|
||||
|
||||
self.numButtons = id;
|
||||
|
||||
local button = _G[self:GetName().."Button"..id];
|
||||
if ( text ) then
|
||||
button:SetText(text);
|
||||
end
|
||||
button.func = func;
|
||||
button.nested = nested;
|
||||
button.value = value;
|
||||
button:Show();
|
||||
|
||||
if ( shortcut ) then
|
||||
local shortcutString = _G[button:GetName().."ShortcutText"];
|
||||
shortcutString:SetText(shortcut);
|
||||
shortcutString:Show();
|
||||
end
|
||||
|
||||
self:SetHeight((id * UIMENU_BUTTON_HEIGHT) + (UIMENU_BORDER_HEIGHT * 2));
|
||||
end
|
||||
|
||||
function UIMenu_OnUpdate(self, elapsed)
|
||||
if ( self.counting == 1 ) then
|
||||
local timeleft = self.timeleft - elapsed;
|
||||
if ( timeleft <= 0 ) then
|
||||
self:Hide();
|
||||
return;
|
||||
end
|
||||
self.timeleft = timeleft;
|
||||
end
|
||||
end
|
||||
|
||||
function UIMenuButton_OnLoad(self)
|
||||
self:SetPoint("TOP", self:GetParent(), "TOP", 0, -((self:GetID() - 1) * UIMENU_BUTTON_HEIGHT) - UIMENU_BORDER_HEIGHT);
|
||||
end
|
||||
|
||||
function UIMenuButton_OnClick(self)
|
||||
local func = self.func;
|
||||
if ( func ) then
|
||||
func(self);
|
||||
end
|
||||
|
||||
self:GetParent():Hide();
|
||||
PlaySound("UChatScrollButton");
|
||||
end
|
||||
|
||||
function UIMenu_StartCounting(menu)
|
||||
menu.counting = 1;
|
||||
|
||||
if ( menu.onlyAutoHideSelf ) then
|
||||
return;
|
||||
end
|
||||
local parentName = menu.parentMenu;
|
||||
if ( parentName ) then
|
||||
UIMenu_StartCounting(_G[parentName]);
|
||||
end
|
||||
end
|
||||
|
||||
function UIMenu_StopCounting(menu)
|
||||
menu.counting = 0;
|
||||
menu.timeleft = UIMENU_TIMEOUT;
|
||||
|
||||
local parentName = menu.parentMenu;
|
||||
if ( parentName ) then
|
||||
UIMenu_StopCounting(_G[parentName]);
|
||||
end
|
||||
end
|
||||
|
||||
function UIMenuButton_OnEnter(self)
|
||||
local nested = self.nested;
|
||||
if ( nested ) then
|
||||
local menu = _G[nested];
|
||||
if ( not menu:IsShown() ) then
|
||||
local oldMenu = _G[self:GetParent().subMenu];
|
||||
if ( oldMenu ) then
|
||||
oldMenu:Hide();
|
||||
end
|
||||
|
||||
self:GetParent().subMenu = nested;
|
||||
menu:ClearAllPoints();
|
||||
menu:SetPoint("BOTTOMLEFT", self, "BOTTOMRIGHT", 10, -12);
|
||||
menu:Show();
|
||||
if ( menu:GetRight() and menu:GetRight() > GetScreenWidth() ) then
|
||||
-- flip the menu's anchor if it is running off the screen
|
||||
menu:ClearAllPoints();
|
||||
menu:SetPoint("BOTTOMRIGHT", self, "BOTTOMLEFT", -10, -12);
|
||||
end
|
||||
end
|
||||
|
||||
UIMenu_StopCounting(menu);
|
||||
else
|
||||
UIMenu_StopCounting(self:GetParent());
|
||||
end
|
||||
end
|
||||
|
||||
function UIMenuButton_OnLeave(self)
|
||||
UIMenu_StartCounting(self:GetParent());
|
||||
|
||||
local nested = self.nested;
|
||||
if ( nested ) then
|
||||
UIMenu_StartCounting(_G[nested]);
|
||||
end
|
||||
end
|
||||
|
||||
function UIMenu_AutoSize(frame)
|
||||
if ( UIMenu_GetNumButtons(frame) == 0 ) then
|
||||
return;
|
||||
end
|
||||
local button, buttonName, shortcutText;
|
||||
local name = frame:GetName();
|
||||
local width;
|
||||
local maxWidth = 0;
|
||||
for i=1, UIMENU_NUMBUTTONS do
|
||||
buttonName = name.."Button"..i
|
||||
button = _G[buttonName];
|
||||
if ( button:IsShown() ) then
|
||||
width = button:GetTextWidth();
|
||||
shortcutText = _G[buttonName.."ShortcutText"];
|
||||
if ( shortcutText:GetText() ~= "" ) then
|
||||
width = width + shortcutText:GetWidth();
|
||||
end
|
||||
-- Add padding
|
||||
width = width + 20;
|
||||
if ( width > maxWidth ) then
|
||||
maxWidth = width;
|
||||
end
|
||||
end
|
||||
end
|
||||
for i=1, UIMENU_NUMBUTTONS do
|
||||
_G[name.."Button"..i]:SetWidth(maxWidth);
|
||||
end
|
||||
frame:SetWidth(maxWidth + (UIMENU_BORDER_WIDTH * 2));
|
||||
end
|
||||
|
||||
function UIMenu_FinishInitializing(frame)
|
||||
if ( UIMenu_GetNumButtons(frame) == 0 ) then
|
||||
return false;
|
||||
end
|
||||
UIMenu_AutoSize(frame);
|
||||
return true;
|
||||
end
|
||||
|
||||
function UIMenu_GetNumButtons(frame)
|
||||
if ( not frame.numButtons ) then
|
||||
return 0;
|
||||
end
|
||||
return frame.numButtons;
|
||||
end
|
||||
Reference in New Issue
Block a user