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.

141 lines
4.0 KiB

local _, addon = ...
local MainFrame;
local NavBar = Narci_NavBar;
local buttonData = {
{"Equipment", function() NavBar:SelectTab(1) end},
{"Title", function() local b = Narci_TitleManager_Switch; if not b.isOn then b:Click() end end},
{"Sets", function() NavBar:SelectTab(2) end},
--{"Soulbinds", function() NavBar:SelectTab(3) end},
{"M+", function() NavBar:SelectTab(3) end},
};
NarciGamePadNavBarButtonMixin = {};
function NarciGamePadNavBarButtonMixin:SetButtonName(name)
self.ButtonName:SetWidth(0);
self.ButtonName:SetText( string.upper(name) );
local width = math.max(48, (self.ButtonName:GetWrappedWidth() or 0) + 12);
self.ButtonName:SetWidth(width);
self:SetWidth(width);
return width
end
function NarciGamePadNavBarButtonMixin:OnEnter()
self.ButtonName:SetTextColor(1, 1, 1);
end
function NarciGamePadNavBarButtonMixin:OnLeave()
if not self.isOn then
self.ButtonName:SetTextColor(0.60, 0.60, 0.60);
end
end
function NarciGamePadNavBarButtonMixin:OnMouseDown()
self.ButtonName:SetPoint("CENTER", self, "CENTER", 0, -0.8);
end
function NarciGamePadNavBarButtonMixin:OnMouseUp()
self.ButtonName:SetPoint("CENTER", self, "CENTER", 0, 0);
end
function NarciGamePadNavBarButtonMixin:OnClick()
MainFrame:SelectButton(self);
if self.onClickFunc then
self.onClickFunc();
end
end
function NarciGamePadNavBarButtonMixin:SetSelection(state)
if state then
self.isOn = true;
self:OnEnter();
else
self.isOn = nil;
self:OnLeave();
end
end
NarciGamePadNavBarMixin = {};
local function UpdateThemeColor_OnShow(self)
self.SelectionHighlight:SetVertexColor( NarciThemeUtil:GetColor() );
end
function NarciGamePadNavBarMixin:OnLoad()
addon.GamePadNavBar = self;
MainFrame = self;
if not self.NavButtons then
self.NavButtons = {};
end
self:SetScript("OnLoad", nil);
self.OnLoad = nil;
end
function NarciGamePadNavBarMixin:OnShow()
self:Init();
UpdateThemeColor_OnShow(self);
self:SetScript("OnShow", UpdateThemeColor_OnShow);
end
function NarciGamePadNavBarMixin:SetBumperStyle(id)
local styleName;
if id == 2 then
styleName = "PS";
else
styleName = "Xbox";
end
self.LeftBumper:SetTexture("Interface\\AddOns\\Narcissus_GamePad\\Art\\"..styleName.."\\Bumpers");
self.RightBumper:SetTexture("Interface\\AddOns\\Narcissus_GamePad\\Art\\"..styleName.."\\Bumpers");
end
function NarciGamePadNavBarMixin:Init()
self:ClearAllPoints();
--self:SetPoint("TOPLEFT", Narci_Character, "TOPLEFT", 24, -24);
self:SetPoint("TOP", Narci_GuideLineFrame, "TOP", 0, 0);
self:SetBumperStyle(1);
--Create Buttons
local button;
local width;
local padding = 72;
local fullWidth = padding;
for i = 1, #buttonData do
if not self.NavButtons[i] then
self.NavButtons[i] = CreateFrame("Button", nil, self, "NarciGamePadNavBarButtonTemplate");
end
button = self.NavButtons[i];
button:SetPoint("LEFT", self, "LEFT", fullWidth, 0);
button.onClickFunc = buttonData[i][2];
width = button:SetButtonName(buttonData[i][1]);
fullWidth = fullWidth + width;
end
fullWidth = fullWidth + padding;
self:SetWidth(fullWidth);
end
function NarciGamePadNavBarMixin:SelectButton(navButton)
for _, button in pairs(self.NavButtons) do
button:SetSelection(false);
end
if navButton then
navButton:SetSelection(true);
local width = navButton:GetWidth();
self.SelectionHighlight:SetWidth( math.max(width, 72) );
self.SelectionHighlight:ClearAllPoints();
self.SelectionHighlight:SetPoint("BOTTOM", navButton, "BOTTOM", 0, 0);
self.SelectionHighlight:Show();
else
self.SelectionHighlight:Hide();
end
end
function NarciGamePadNavBarMixin:SelectButtonByID(id)
self:SelectButton(self.NavButtons[id]);
end