--[[
PowerAurasButtons
Module: AurasConfig
--]]
-- Create module frames.
local CoreFrame = PowerAurasButtons;
local ModuleFrame = CoreFrame:RegisterModule("AurasConfig", { "Auras" });
local Modules = CoreFrame.Modules;
--[[
----------------------------------------------------------------------------------------------------
OnCreateConfigurationFrame
Creates the configuration frame for the Config module.
----------------------------------------------------------------------------------------------------
--]]
function ModuleFrame:OnCreateConfigurationFrame(name)
-- Only do this if the name matches the module name.
if(name ~= ModuleFrame.Name and name) then return; end
-- Make the parent frame.
local ActionEditor = CreateFrame("Frame", nil, UIParent);
ActionEditor:SetHeight(110);
-- Add the appropriate elements to the editor frame. Start with type.
ActionEditor.TypeLabel = Modules.Config:CreateHeaderWidget("Action Type", ActionEditor, 0);
-- Type changing callback.
local typechange = function(self)
-- Go forth.
if(self == ActionEditor.TypeSpell) then
-- Enable the spell button.
ActionEditor.TypeSpell:Select();
ActionEditor.TypeItem:Deselect();
ActionEditor.TypeMacro:Deselect();
Modules.Config:UpdateActionData("type", "spell");
elseif(self == ActionEditor.TypeItem) then
-- Item button.
ActionEditor.TypeItem:Select();
ActionEditor.TypeSpell:Deselect();
ActionEditor.TypeMacro:Deselect();
Modules.Config:UpdateActionData("type", "item");
elseif(self == ActionEditor.TypeMacro) then
-- Macro button.
ActionEditor.TypeMacro:Select();
ActionEditor.TypeSpell:Deselect();
ActionEditor.TypeItem:Deselect();
Modules.Config:UpdateActionData("type", "macro");
end
end
-- Button #1: Spell.
ActionEditor.TypeSpell = Modules.Config:CreateButtonWidget(ActionEditor, "Spell",
"Interface\\GossipFrame\\TrainerGossipIcon");
ActionEditor.TypeSpell:SetPoint("TOP", ActionEditor, "TOP", -115, -25);
ActionEditor.TypeSpell:SetScript("OnClick", typechange);
-- Button #2: Item
ActionEditor.TypeItem = Modules.Config:CreateButtonWidget(ActionEditor, "Item",
"Interface\\GossipFrame\\VendorGossipIcon");
ActionEditor.TypeItem:SetPoint("TOP", ActionEditor, "TOP", 0, -25);
ActionEditor.TypeItem:SetScript("OnClick", typechange);
-- Button #3: Macro
ActionEditor.TypeMacro = Modules.Config:CreateButtonWidget(ActionEditor, "Macro",
"Interface\\GossipFrame\\BinderGossipIcon");
ActionEditor.TypeMacro:SetPoint("TOP", ActionEditor, "TOP", 115, -25);
ActionEditor.TypeMacro:SetScript("OnClick", typechange);
-- Action Name/ID.
ActionEditor.IDLabel = Modules.Config:CreateHeaderWidget("Action Name/ID", ActionEditor, -56);
-- Add in the amazing editbox.
ActionEditor.IDEditbox = CreateFrame("EditBox", nil, ActionEditor, "InputBoxTemplate");
ActionEditor.IDEditbox:SetPoint("TOP", ActionEditor, "TOP", 0, -81);
ActionEditor.IDEditbox:SetHeight(24);
ActionEditor.IDEditbox:SetWidth(225);
ActionEditor.IDEditbox:SetAutoFocus(false);
ActionEditor.IDEditbox:SetMultiLine(false);
-- Create a save script.
ActionEditor.IDEditbox.Save = function()
-- See if the contents are text or number.
local contents = tonumber(ActionEditor.IDEditbox:GetText(), 10);
if(not contents) then
-- Reset contents var.
contents = ActionEditor.IDEditbox:GetText();
-- Convert the text to an ID.
if(Modules.Config:GetCurrentActionData()["type"] == "spell") then
-- Easy.
contents = select(2, GetSpellBookItemInfo(contents));
elseif(Modules.Config:GetCurrentActionData()["type"] == "item") then
-- Not so easy.
local link = select(2, GetItemInfo(contents));
if(link) then
contents = tonumber(select(5, string.find(link,
"|?c?f?f?(%x*)|?H?([^:]*):?(%d+):?(%d*):?(%d*):?(%d*):?(%d*):?(%d*):?"..
"(%-?%d*):?(%-?%d*):?(%d*)|?h?%[?([^%[%]]*)%]?|?h?|?r?")), 10);
end
elseif(Modules.Config:GetCurrentActionData()["type"] == "macro") then
-- Easy.
contents = select(1, GetMacroIndexByName(contents));
end
end
-- Save.
if(type(contents) == "number") then
Modules.Config:UpdateActionData("id", contents);
else
CoreFrame:Print("Could not convert '%s' to an ID.", ActionEditor.IDEditbox:GetText());
Modules.Config:UpdateActionData("id", nil);
end
-- Clear focus.
ActionEditor.IDEditbox:ClearFocus();
end
-- Register scripts.
ActionEditor.IDEditbox:SetScript("OnEnterPressed", ActionEditor.IDEditbox.Save);
ActionEditor.IDEditbox:SetScript("OnEscapePressed", ActionEditor.IDEditbox.Save);
-- Tooltips (localization handled by the config module)
Modules.Config:RegisterConfigTooltip(ActionEditor.TypeSpell, {
title = "Type: Spell",
text = "Select this to make this action affect the display of a spell button."
});
Modules.Config:RegisterConfigTooltip(ActionEditor.TypeItem, {
title = "Type: Item",
text = "Select this to make this action affect the display of an item button."
});
Modules.Config:RegisterConfigTooltip(ActionEditor.TypeMacro, {
title = "Type: Macro",
text = "Select this to make this action affect the display of a macro button."
});
Modules.Config:RegisterConfigTooltip(ActionEditor.IDEditbox, {
title = "Action Name/ID",
text = "The name or ID or the spell, item or macro to alter the display of."
});
-- Add the necessary functions.
ActionEditor.UpdateAction = function(self, actionData)
-- Update the type buttons.
if(actionData["type"] and actionData["type"] == "spell") then
-- Enable the spell button.
ActionEditor.TypeSpell:Select();
ActionEditor.TypeItem:Deselect();
ActionEditor.TypeMacro:Deselect();
elseif(actionData["type"] and actionData["type"] == "item") then
-- Enable the item button.
ActionEditor.TypeItem:Select();
ActionEditor.TypeSpell:Deselect();
ActionEditor.TypeMacro:Deselect();
elseif(actionData["type"] and actionData["type"] == "macro") then
-- Enable the macro button.
ActionEditor.TypeMacro:Select();
ActionEditor.TypeSpell:Deselect();
ActionEditor.TypeItem:Deselect();
else
-- Enable no buttons.
ActionEditor.TypeSpell:Deselect();
ActionEditor.TypeItem:Deselect();
ActionEditor.TypeMacro:Deselect();
end
-- Update the editboxes.
if(actionData["id"] and actionData["type"] and actionData["type"] == "spell") then
-- Update the editbox.
ActionEditor.IDEditbox:SetText(GetSpellInfo(actionData["id"]) or actionData["id"]);
-- Update the editbox.
elseif(actionData["id"] and actionData["type"] and actionData["type"] == "item") then
ActionEditor.IDEditbox:SetText(GetItemInfo(actionData["id"]) or actionData["id"]);
-- Update the editbox.
elseif(actionData["id"] and actionData["type"] and actionData["type"] == "macro") then
-- Update the editbox.
ActionEditor.IDEditbox:SetText(GetMacroInfo(actionData["id"]) or actionData["id"]);
elseif(actionData["id"]) then
-- Just use the ID/Text.
ActionEditor.IDEditbox:SetText(actionData["id"]);
else
-- Clear the editbox.
ActionEditor.IDEditbox:SetText("");
end
end;
-- Done.
Modules.Config:RegisterActionConfigFrame(ActionEditor, 1);
end
--[[
----------------------------------------------------------------------------------------------------
OnInitialize
Fired by the module handler. Put all the loading code into here.
----------------------------------------------------------------------------------------------------
--]]
function ModuleFrame:OnInitialize()
-- Register module events for config frames.
CoreFrame:RegisterModuleEventListener("OnCreateConfigurationFrame", ModuleFrame);
-- Done.
return true;
end