354 lines
9.8 KiB
Lua
354 lines
9.8 KiB
Lua
MAX_ACCOUNT_MACROS = 36;
|
|
MAX_CHARACTER_MACROS = 18;
|
|
NUM_MACROS_PER_ROW = 6;
|
|
NUM_MACRO_ICONS_SHOWN = 20;
|
|
NUM_ICONS_PER_ROW = 5;
|
|
NUM_ICON_ROWS = 4;
|
|
MACRO_ICON_ROW_HEIGHT = 36;
|
|
|
|
UIPanelWindows["MacroFrame"] = { area = "left", pushable = 5, whileDead = 1 };
|
|
|
|
function MacroFrame_Show()
|
|
ShowUIPanel(MacroFrame);
|
|
end
|
|
|
|
function MacroFrame_OnLoad(self)
|
|
MacroFrame_SetAccountMacros();
|
|
PanelTemplates_SetNumTabs(MacroFrame, 2);
|
|
PanelTemplates_SetTab(MacroFrame, 1);
|
|
end
|
|
|
|
function MacroFrame_OnShow(self)
|
|
MacroFrame_Update();
|
|
PlaySound("igCharacterInfoOpen");
|
|
UpdateMicroButtons();
|
|
end
|
|
|
|
function MacroFrame_OnHide(self)
|
|
MacroPopupFrame:Hide();
|
|
MacroFrame_SaveMacro();
|
|
--SaveMacros();
|
|
PlaySound("igCharacterInfoClose");
|
|
UpdateMicroButtons();
|
|
end
|
|
|
|
function MacroFrame_SetAccountMacros()
|
|
MacroFrame.macroBase = 0;
|
|
MacroFrame.macroMax = MAX_ACCOUNT_MACROS;
|
|
local numAccountMacros, numCharacterMacros = GetNumMacros();
|
|
if ( numAccountMacros > 0 ) then
|
|
MacroFrame_SelectMacro(MacroFrame.macroBase + 1);
|
|
else
|
|
MacroFrame_SelectMacro(nil);
|
|
end
|
|
end
|
|
|
|
function MacroFrame_SetCharacterMacros()
|
|
MacroFrame.macroBase = MAX_ACCOUNT_MACROS;
|
|
MacroFrame.macroMax = MAX_CHARACTER_MACROS;
|
|
local numAccountMacros, numCharacterMacros = GetNumMacros();
|
|
if ( numCharacterMacros > 0 ) then
|
|
MacroFrame_SelectMacro(MacroFrame.macroBase + 1);
|
|
else
|
|
MacroFrame_SelectMacro(nil);
|
|
end
|
|
end
|
|
|
|
function MacroFrame_Update()
|
|
local numMacros;
|
|
local numAccountMacros, numCharacterMacros = GetNumMacros();
|
|
local macroButtonName, macroButton, macroIcon, macroName;
|
|
local name, texture, body;
|
|
local selectedName, selectedBody, selectedIcon;
|
|
|
|
if ( MacroFrame.macroBase == 0 ) then
|
|
numMacros = numAccountMacros;
|
|
else
|
|
numMacros = numCharacterMacros;
|
|
end
|
|
|
|
-- Macro List
|
|
local maxMacroButtons = max(MAX_ACCOUNT_MACROS, MAX_CHARACTER_MACROS);
|
|
for i=1, maxMacroButtons do
|
|
macroButtonName = "MacroButton"..i;
|
|
macroButton = _G[macroButtonName];
|
|
macroIcon = _G[macroButtonName.."Icon"];
|
|
macroName = _G[macroButtonName.."Name"];
|
|
if ( i <= MacroFrame.macroMax ) then
|
|
if ( i <= numMacros ) then
|
|
name, texture, body = GetMacroInfo(MacroFrame.macroBase + i);
|
|
macroIcon:SetTexture(texture);
|
|
macroName:SetText(name);
|
|
macroButton:Enable();
|
|
-- Highlight Selected Macro
|
|
if ( MacroFrame.selectedMacro and (i == (MacroFrame.selectedMacro - MacroFrame.macroBase)) ) then
|
|
macroButton:SetChecked(1);
|
|
MacroFrameSelectedMacroName:SetText(name);
|
|
MacroFrameText:SetText(body);
|
|
MacroFrameSelectedMacroButton:SetID(i);
|
|
MacroFrameSelectedMacroButtonIcon:SetTexture(texture);
|
|
MacroPopupFrame.selectedIconTexture = texture;
|
|
else
|
|
macroButton:SetChecked(0);
|
|
end
|
|
else
|
|
macroButton:SetChecked(0);
|
|
macroIcon:SetTexture("");
|
|
macroName:SetText("");
|
|
macroButton:Disable();
|
|
end
|
|
macroButton:Show();
|
|
else
|
|
macroButton:Hide();
|
|
end
|
|
end
|
|
|
|
-- Macro Details
|
|
if ( MacroFrame.selectedMacro ~= nil ) then
|
|
MacroFrame_ShowDetails();
|
|
MacroDeleteButton:Enable();
|
|
else
|
|
MacroFrame_HideDetails();
|
|
MacroDeleteButton:Disable();
|
|
end
|
|
|
|
--Update New Button
|
|
if ( numMacros < MacroFrame.macroMax ) then
|
|
MacroNewButton:Enable();
|
|
else
|
|
MacroNewButton:Disable();
|
|
end
|
|
|
|
-- Disable Buttons
|
|
if ( MacroPopupFrame:IsShown() ) then
|
|
MacroEditButton:Disable();
|
|
MacroDeleteButton:Disable();
|
|
else
|
|
MacroEditButton:Enable();
|
|
MacroDeleteButton:Enable();
|
|
end
|
|
|
|
if ( not MacroFrame.selectedMacro ) then
|
|
MacroDeleteButton:Disable();
|
|
end
|
|
end
|
|
|
|
function MacroFrame_AddMacroLine(line)
|
|
if ( MacroFrameText:IsVisible() ) then
|
|
MacroFrameText:SetText(MacroFrameText:GetText()..line);
|
|
end
|
|
end
|
|
|
|
function MacroButton_OnClick(self, button)
|
|
MacroFrame_SaveMacro();
|
|
MacroFrame_SelectMacro(MacroFrame.macroBase + self:GetID());
|
|
MacroFrame_Update();
|
|
MacroPopupFrame:Hide();
|
|
MacroFrameText:ClearFocus();
|
|
end
|
|
|
|
function MacroFrame_SelectMacro(id)
|
|
MacroFrame.selectedMacro = id;
|
|
end
|
|
|
|
function MacroFrame_DeleteMacro()
|
|
local selectedMacro = MacroFrame.selectedMacro;
|
|
DeleteMacro(selectedMacro);
|
|
-- the order of the return values (account macros, character macros) matches up with the IDs of the tabs
|
|
local numMacros = select(PanelTemplates_GetSelectedTab(MacroFrame), GetNumMacros());
|
|
if ( selectedMacro > numMacros + MacroFrame.macroBase) then
|
|
selectedMacro = selectedMacro - 1;
|
|
end
|
|
if ( selectedMacro <= MacroFrame.macroBase ) then
|
|
MacroFrame.selectedMacro = nil;
|
|
else
|
|
MacroFrame.selectedMacro = selectedMacro;
|
|
end
|
|
MacroFrame_Update();
|
|
MacroFrameText:ClearFocus();
|
|
end
|
|
|
|
function MacroNewButton_OnClick(self, button)
|
|
MacroFrame_SaveMacro();
|
|
MacroPopupFrame.mode = "new";
|
|
MacroPopupFrame:Show();
|
|
end
|
|
|
|
function MacroEditButton_OnClick(self, button)
|
|
MacroFrame_SaveMacro();
|
|
MacroPopupFrame.mode = "edit";
|
|
MacroPopupFrame:Show();
|
|
end
|
|
|
|
function MacroFrame_HideDetails()
|
|
MacroEditButton:Hide();
|
|
MacroFrameCharLimitText:Hide();
|
|
MacroFrameText:Hide();
|
|
MacroFrameSelectedMacroName:Hide();
|
|
MacroFrameSelectedMacroBackground:Hide();
|
|
MacroFrameSelectedMacroButton:Hide();
|
|
end
|
|
|
|
function MacroFrame_ShowDetails()
|
|
MacroEditButton:Show();
|
|
MacroFrameCharLimitText:Show();
|
|
MacroFrameEnterMacroText:Show();
|
|
MacroFrameText:Show();
|
|
MacroFrameSelectedMacroName:Show();
|
|
MacroFrameSelectedMacroBackground:Show();
|
|
MacroFrameSelectedMacroButton:Show();
|
|
end
|
|
|
|
function MacroButtonContainer_OnLoad(self)
|
|
local button;
|
|
local maxMacroButtons = max(MAX_ACCOUNT_MACROS, MAX_CHARACTER_MACROS);
|
|
for i=1, maxMacroButtons do
|
|
button = CreateFrame("CheckButton", "MacroButton"..i, self, "MacroButtonTemplate");
|
|
button:SetID(i);
|
|
if ( i == 1 ) then
|
|
button:SetPoint("TOPLEFT", self, "TOPLEFT", 6, -6);
|
|
elseif ( mod(i, NUM_MACROS_PER_ROW) == 1 ) then
|
|
button:SetPoint("TOP", "MacroButton"..(i-NUM_MACROS_PER_ROW), "BOTTOM", 0, -10);
|
|
else
|
|
button:SetPoint("LEFT", "MacroButton"..(i-1), "RIGHT", 13, 0);
|
|
end
|
|
end
|
|
end
|
|
|
|
function MacroPopupFrame_OnShow(self)
|
|
MacroPopupEditBox:SetFocus();
|
|
|
|
PlaySound("igCharacterInfoOpen");
|
|
MacroPopupFrame_Update(self);
|
|
MacroPopupOkayButton_Update();
|
|
|
|
if ( self.mode == "new" ) then
|
|
MacroFrameText:Hide();
|
|
MacroPopupButton_SelectTexture(1);
|
|
end
|
|
|
|
-- Disable Buttons
|
|
MacroEditButton:Disable();
|
|
MacroDeleteButton:Disable();
|
|
MacroNewButton:Disable();
|
|
MacroFrameTab1:Disable();
|
|
MacroFrameTab2:Disable();
|
|
end
|
|
|
|
function MacroPopupFrame_OnHide(self)
|
|
if ( self.mode == "new" ) then
|
|
MacroFrameText:Show();
|
|
MacroFrameText:SetFocus();
|
|
end
|
|
|
|
-- Enable Buttons
|
|
MacroEditButton:Enable();
|
|
MacroDeleteButton:Enable();
|
|
local numMacros;
|
|
local numAccountMacros, numCharacterMacros = GetNumMacros();
|
|
if ( MacroFrame.macroBase == 0 ) then
|
|
numMacros = numAccountMacros;
|
|
else
|
|
numMacros = numCharacterMacros;
|
|
end
|
|
if ( numMacros < MacroFrame.macroMax ) then
|
|
MacroNewButton:Enable();
|
|
end
|
|
-- Enable tabs
|
|
PanelTemplates_UpdateTabs(MacroFrame);
|
|
end
|
|
|
|
function MacroPopupFrame_Update(self)
|
|
self = self or MacroPopupFrame;
|
|
local numMacroIcons = GetNumMacroIcons();
|
|
local macroPopupIcon, macroPopupButton;
|
|
local macroPopupOffset = FauxScrollFrame_GetOffset(MacroPopupScrollFrame);
|
|
local index;
|
|
|
|
-- Determine whether we're creating a new macro or editing an existing one
|
|
if ( self.mode == "new" ) then
|
|
MacroPopupEditBox:SetText("");
|
|
elseif ( self.mode == "edit" ) then
|
|
local name, texture, body = GetMacroInfo(MacroFrame.selectedMacro);
|
|
MacroPopupEditBox:SetText(name);
|
|
end
|
|
|
|
-- Icon list
|
|
local texture;
|
|
for i=1, NUM_MACRO_ICONS_SHOWN do
|
|
macroPopupIcon = _G["MacroPopupButton"..i.."Icon"];
|
|
macroPopupButton = _G["MacroPopupButton"..i];
|
|
index = (macroPopupOffset * NUM_ICONS_PER_ROW) + i;
|
|
texture = GetMacroIconInfo(index);
|
|
if ( index <= numMacroIcons ) then
|
|
macroPopupIcon:SetTexture(texture);
|
|
macroPopupButton:Show();
|
|
else
|
|
macroPopupIcon:SetTexture("");
|
|
macroPopupButton:Hide();
|
|
end
|
|
if ( MacroPopupFrame.selectedIcon and (index == MacroPopupFrame.selectedIcon) ) then
|
|
macroPopupButton:SetChecked(1);
|
|
elseif ( MacroPopupFrame.selectedIconTexture == texture ) then
|
|
macroPopupButton:SetChecked(1);
|
|
else
|
|
macroPopupButton:SetChecked(nil);
|
|
end
|
|
end
|
|
|
|
-- Scrollbar stuff
|
|
FauxScrollFrame_Update(MacroPopupScrollFrame, ceil(numMacroIcons / NUM_ICONS_PER_ROW) , NUM_ICON_ROWS, MACRO_ICON_ROW_HEIGHT );
|
|
end
|
|
|
|
function MacroPopupFrame_CancelEdit()
|
|
MacroPopupFrame:Hide();
|
|
MacroFrame_Update();
|
|
MacroPopupFrame.selectedIcon = nil;
|
|
end
|
|
|
|
function MacroPopupOkayButton_Update()
|
|
if ( (strlen(MacroPopupEditBox:GetText()) > 0) and MacroPopupFrame.selectedIcon ) then
|
|
MacroPopupOkayButton:Enable();
|
|
else
|
|
MacroPopupOkayButton:Disable();
|
|
end
|
|
if ( MacroPopupFrame.mode == "edit" and (strlen(MacroPopupEditBox:GetText()) > 0) ) then
|
|
MacroPopupOkayButton:Enable();
|
|
end
|
|
end
|
|
|
|
function MacroPopupButton_SelectTexture(selectedIcon)
|
|
MacroPopupFrame.selectedIcon = selectedIcon;
|
|
-- Clear out selected texture
|
|
MacroPopupFrame.selectedIconTexture = nil;
|
|
MacroFrameSelectedMacroButtonIcon:SetTexture(GetMacroIconInfo(MacroPopupFrame.selectedIcon));
|
|
MacroPopupOkayButton_Update();
|
|
local mode = MacroPopupFrame.mode;
|
|
MacroPopupFrame.mode = nil;
|
|
MacroPopupFrame_Update(MacroPopupFrame);
|
|
MacroPopupFrame.mode = mode;
|
|
end
|
|
|
|
function MacroPopupButton_OnClick(self, button)
|
|
MacroPopupButton_SelectTexture(self:GetID() + (FauxScrollFrame_GetOffset(MacroPopupScrollFrame) * NUM_ICONS_PER_ROW));
|
|
end
|
|
|
|
function MacroPopupOkayButton_OnClick(self, button)
|
|
local index = 1
|
|
if ( MacroPopupFrame.mode == "new" ) then
|
|
index = CreateMacro(MacroPopupEditBox:GetText(), MacroPopupFrame.selectedIcon, nil, (MacroFrame.macroBase > 0));
|
|
elseif ( MacroPopupFrame.mode == "edit" ) then
|
|
index = EditMacro(MacroFrame.selectedMacro, MacroPopupEditBox:GetText(), MacroPopupFrame.selectedIcon);
|
|
end
|
|
MacroPopupFrame:Hide();
|
|
MacroFrame_SelectMacro(index);
|
|
MacroFrame_Update();
|
|
end
|
|
|
|
function MacroFrame_SaveMacro()
|
|
if ( MacroFrame.textChanged and MacroFrame.selectedMacro ) then
|
|
EditMacro(MacroFrame.selectedMacro, nil, nil, MacroFrameText:GetText());
|
|
MacroFrame.textChanged = nil;
|
|
end
|
|
end
|