d915f6b844
release / release (push) Successful in 5s
- Re-applied the window enlargement (832x555, more rows) - user accepts the AuctionFrame art seam in exchange for the bigger frame. - Char-view professions (Prof1-8) moved out of the cramped bottom Cooking/FirstAid row into the open middle-left gap (2 rows of 4) so they stop overlapping/overflowing.
307 lines
7.9 KiB
Lua
307 lines
7.9 KiB
Lua
local addonName = ...
|
|
local addon = _G[addonName]
|
|
|
|
local L = LibStub("AceLocale-3.0"):GetLocale(addonName)
|
|
|
|
local WHITE = "|cFFFFFFFF"
|
|
local GREEN = "|cFF00FF00"
|
|
local PETS_PER_PAGE = 12
|
|
|
|
local selectedID
|
|
local currentPetType
|
|
local currentPage
|
|
local currentPetName
|
|
|
|
addon.Pets = {}
|
|
|
|
local ns = addon.Pets -- ns = namespace
|
|
|
|
function ns:OnEnter(frame)
|
|
local id = frame.spellID
|
|
if id then
|
|
AltoTooltip:SetOwner(frame, "ANCHOR_LEFT");
|
|
AltoTooltip:ClearLines();
|
|
AltoTooltip:SetHyperlink("spell:" ..id);
|
|
AltoTooltip:Show();
|
|
end
|
|
end
|
|
|
|
function ns:OnClick(frame, button)
|
|
if frame.spellID and ( button == "LeftButton" ) and ( IsShiftKeyDown() ) then
|
|
local chat = ChatEdit_GetLastActiveWindow()
|
|
if chat:IsShown() then
|
|
local link = DataStore:GetCompanionLink(frame.spellID)
|
|
if link then
|
|
chat:Insert(link)
|
|
end
|
|
end
|
|
end
|
|
|
|
frame:SetChecked(true);
|
|
|
|
local offset = (currentPage-1) * PETS_PER_PAGE
|
|
selectedID = offset + frame:GetID()
|
|
ns:UpdatePets()
|
|
end
|
|
|
|
local function OnChangePetView(self)
|
|
local value = self.value
|
|
|
|
UIDropDownMenu_SetSelectedValue(AltoholicFramePets_SelectPetView, value);
|
|
|
|
if value == 1 or value == 3 then
|
|
AltoholicFrameClasses:Hide()
|
|
AltoholicFramePetsNormal:Show()
|
|
AltoholicFramePetsAllInOne:Hide()
|
|
else
|
|
AltoholicFrameClasses:Show()
|
|
AltoholicFramePetsNormal:Hide()
|
|
AltoholicFramePetsAllInOne:Show()
|
|
end
|
|
|
|
AltoholicFramePets:Show()
|
|
|
|
if value == 1 then
|
|
ns:SetType("CRITTER")
|
|
elseif value == 2 then
|
|
table.sort(DataStore:GetCompanionList(), function(a, b)
|
|
local textA = GetSpellInfo(a) or ""
|
|
local textB = GetSpellInfo(b) or ""
|
|
return textA < textB
|
|
end)
|
|
ns:UpdatePetsAllInOne()
|
|
elseif value == 3 then
|
|
ns:SetType("MOUNT")
|
|
elseif value == 4 then
|
|
table.sort(DataStore:GetMountList(), function(a, b)
|
|
local textA = GetSpellInfo(a) or ""
|
|
local textB = GetSpellInfo(b) or ""
|
|
return textA < textB
|
|
end)
|
|
ns:UpdatePetsAllInOne()
|
|
end
|
|
end
|
|
|
|
function ns:DropDownPets_Initialize()
|
|
local info = UIDropDownMenu_CreateInfo();
|
|
|
|
info.text = COMPANIONS
|
|
info.value = 1
|
|
info.func = OnChangePetView
|
|
info.checked = nil;
|
|
info.icon = nil;
|
|
UIDropDownMenu_AddButton(info, 1);
|
|
|
|
info.text = format("%s %s(%s)", COMPANIONS, GREEN, L["All-in-one"])
|
|
info.value = 2
|
|
info.func = OnChangePetView
|
|
info.checked = nil;
|
|
info.icon = nil;
|
|
UIDropDownMenu_AddButton(info, 1);
|
|
|
|
info.text = MOUNTS
|
|
info.value = 3
|
|
info.func = OnChangePetView
|
|
info.checked = nil;
|
|
info.icon = nil;
|
|
UIDropDownMenu_AddButton(info, 1);
|
|
|
|
info.text = format("%s %s(%s)", MOUNTS, GREEN, L["All-in-one"])
|
|
info.value = 4
|
|
info.func = OnChangePetView
|
|
info.checked = nil;
|
|
info.icon = nil;
|
|
UIDropDownMenu_AddButton(info, 1);
|
|
end
|
|
|
|
local function SetPage(pageNum)
|
|
currentPage = pageNum
|
|
|
|
local character = addon.Tabs.Characters:GetCurrent()
|
|
local pets = DataStore:GetPets(character, currentPetType)
|
|
|
|
if currentPage == 1 then
|
|
AltoholicFramePetsNormalPrevPage:Disable()
|
|
else
|
|
AltoholicFramePetsNormalPrevPage:Enable()
|
|
end
|
|
|
|
local maxPages = 1
|
|
if pets then
|
|
maxPages = ceil(DataStore:GetNumPets(pets) / PETS_PER_PAGE)
|
|
if maxPages == 0 then
|
|
maxPages = 1
|
|
end
|
|
end
|
|
|
|
if currentPage == maxPages then
|
|
AltoholicFramePetsNormalNextPage:Disable()
|
|
else
|
|
AltoholicFramePetsNormalNextPage:Enable()
|
|
end
|
|
|
|
AltoholicFramePetsNormal_PageNumber:SetText(format(MERCHANT_PAGE_NUMBER, currentPage, maxPages ))
|
|
ns:UpdatePets()
|
|
end
|
|
|
|
function ns:GoToPreviousPage()
|
|
SetPage(currentPage - 1)
|
|
end
|
|
|
|
function ns:GoToNextPage()
|
|
SetPage(currentPage + 1)
|
|
end
|
|
|
|
function ns:SetType(petType)
|
|
selectedID = 1
|
|
currentPetType = petType
|
|
SetPage(1)
|
|
end
|
|
|
|
function ns:UpdatePets()
|
|
local DS = DataStore
|
|
local character = addon.Tabs.Characters:GetCurrent()
|
|
local pets = DS:GetPets(character, currentPetType)
|
|
|
|
if not pets or (DS:GetNumPets(pets) == 0) then -- added this test as simply addressing the table seems to make it grow, I'd assume this is due to AceDB magic value ['*'].
|
|
for i = 1, PETS_PER_PAGE do
|
|
local button = _G["AltoholicFramePetsNormal_Button" .. i];
|
|
|
|
if currentPetType == "MOUNT" then
|
|
button:SetDisabledTexture([[Interface\PetPaperDollFrame\UI-PetFrame-Slots-Mounts]])
|
|
else
|
|
button:SetDisabledTexture([[Interface\PetPaperDollFrame\UI-PetFrame-Slots-Companions]])
|
|
end
|
|
button:Disable();
|
|
button:SetChecked(false);
|
|
end
|
|
return
|
|
end
|
|
|
|
local offset = (currentPage-1) * PETS_PER_PAGE
|
|
|
|
for i = 1, PETS_PER_PAGE do
|
|
local index = offset + i
|
|
local button = _G["AltoholicFramePetsNormal_Button" .. i];
|
|
|
|
local modelID, name, spellID, icon = DS:GetPetInfo(pets, index)
|
|
|
|
if icon and spellID then -- if there's a pet .. texture & enable it
|
|
button:SetNormalTexture(icon);
|
|
button:Enable()
|
|
button.spellID = spellID
|
|
else
|
|
button.spellID = nil
|
|
if currentPetType == "MOUNT" then
|
|
button:SetDisabledTexture([[Interface\PetPaperDollFrame\UI-PetFrame-Slots-Mounts]])
|
|
else
|
|
button:SetDisabledTexture([[Interface\PetPaperDollFrame\UI-PetFrame-Slots-Companions]])
|
|
end
|
|
button:Disable();
|
|
end
|
|
|
|
modelID = tonumber(modelID)
|
|
if selectedID and (index == selectedID) and modelID then
|
|
button:SetChecked(true); -- check only if it's the selected button and it has a model id
|
|
AltoholicFramePetsNormal_PetName:SetText(name)
|
|
AltoholicFramePetsNormal_ModelFrame:SetCreature(modelID);
|
|
else
|
|
button:SetChecked(false);
|
|
end
|
|
end
|
|
end
|
|
|
|
function ns:UpdatePetsAllInOne()
|
|
local VisibleLines = 10
|
|
local frame = "AltoholicFramePetsAllInOne"
|
|
local entry = frame.."Entry"
|
|
|
|
local offset = FauxScrollFrame_GetOffset( _G[ frame.."ScrollFrame" ] );
|
|
|
|
local mode = UIDropDownMenu_GetSelectedValue(AltoholicFramePets_SelectPetView);
|
|
local petList, petType
|
|
|
|
local DS = DataStore
|
|
if mode == 2 then
|
|
petList = DS:GetCompanionList()
|
|
petType = "CRITTER"
|
|
elseif mode == 4 then
|
|
petList = DS:GetMountList()
|
|
petType = "MOUNT"
|
|
end
|
|
|
|
local realm, account = addon:GetCurrentRealm()
|
|
local character
|
|
|
|
for i=1, VisibleLines do
|
|
local line = i + offset
|
|
if line <= #petList then -- if the line is visible
|
|
local spellID
|
|
|
|
spellID = petList[line]
|
|
|
|
local petName, _, petTexture = GetSpellInfo(spellID)
|
|
|
|
if petName then
|
|
_G[entry..i.."Name"]:SetText(WHITE .. petName)
|
|
_G[entry..i.."Name"]:SetJustifyH("LEFT")
|
|
_G[entry..i.."Name"]:SetPoint("TOPLEFT", 15, 0)
|
|
end
|
|
|
|
for j = 1, 10 do
|
|
local itemName = entry.. i .. "Item" .. j;
|
|
local itemButton = _G[itemName]
|
|
local itemTexture = _G[itemName .. "_Background"]
|
|
|
|
local classButton = _G["AltoholicFrameClassesItem" .. j]
|
|
if classButton.CharName then
|
|
character = DS:GetCharacter(classButton.CharName, realm, account)
|
|
|
|
itemButton:SetScript("OnEnter", function(self) ns:OnEnter(self) end)
|
|
itemTexture:SetTexture(petTexture)
|
|
|
|
if DS:IsPetKnown(character, petType, spellID) then
|
|
itemTexture:SetVertexColor(1.0, 1.0, 1.0);
|
|
_G[itemName .. "Name"]:SetText("\124TInterface\\RaidFrame\\ReadyCheck-Ready:14\124t")
|
|
else
|
|
itemTexture:SetVertexColor(0.4, 0.4, 0.4);
|
|
_G[itemName .. "Name"]:SetText("\124TInterface\\RaidFrame\\ReadyCheck-NotReady:14\124t")
|
|
end
|
|
itemButton.spellID = spellID
|
|
itemButton:Show()
|
|
else
|
|
itemButton.spellID = nil
|
|
itemButton:Hide()
|
|
end
|
|
end
|
|
|
|
_G[ entry..i ]:Show()
|
|
else
|
|
_G[ entry..i ]:Hide()
|
|
end
|
|
end
|
|
|
|
FauxScrollFrame_Update( _G[ frame.."ScrollFrame" ], #petList, VisibleLines, 41);
|
|
end
|
|
|
|
local function ScanHunter()
|
|
-- this is a specific function to scan hunter pet talents
|
|
-- DEFAULT_CHAT_FRAME:AddMessage("Scanning Pet " .. currentPetName)
|
|
end
|
|
|
|
function ns:OnChange()
|
|
-- this event is triggered too often for our needs, some filtering is required to avoid scanning pet data too often
|
|
if arg1 ~= "player" then return end
|
|
|
|
local name = UnitName("pet")
|
|
if not name or name == UNKNOWN then return end -- if there's a usable pet name ..
|
|
|
|
if not currentPetName then -- not set ? initial scan
|
|
currentPetName = name
|
|
ScanHunter()
|
|
elseif currentPetName ~= name then -- already set, has it changed ? re-scan
|
|
currentPetName = name
|
|
ScanHunter()
|
|
end
|
|
end
|