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.
726 lines
24 KiB
726 lines
24 KiB
local addonName, addon = ...
|
|
addon = LibStub("AceAddon-3.0"):GetAddon(addonName)
|
|
|
|
local L = LibStub("AceLocale-3.0"):GetLocale(addonName)
|
|
local CollectionList = {}
|
|
addon.CollectionList = CollectionList
|
|
CollectionList.showAll = true
|
|
|
|
local MogItLoaded = false
|
|
|
|
function addon.Init:initCollectionList()
|
|
local f = CreateFrame("Frame", "BW_ColectionListFrame", BetterWardrobeCollectionFrame, "BW_ColectionListFrameTemplate")
|
|
end
|
|
|
|
function CollectionList:BuildCollectionList(complete)
|
|
local list = {}
|
|
local searchString = string.lower(WardrobeCollectionFrameSearchBox:GetText())
|
|
local filterCollected = C_TransmogCollection.GetCollectedShown()
|
|
local filterUncollected = C_TransmogCollection.GetUncollectedShown()
|
|
local filterSource = {}
|
|
local selectedCategory = BetterWardrobeCollectionFrame.ItemsCollectionFrame:GetActiveCategory()
|
|
|
|
for i = 1, 6 do
|
|
filterSource[i] = C_TransmogCollection.IsSourceTypeFilterChecked(i)
|
|
end
|
|
|
|
local collectionList = addon.CollectionList:CurrentList()
|
|
for visualID, _ in pairs(collectionList["item"]) do
|
|
local sources = C_TransmogCollection.GetAllAppearanceSources(visualID)
|
|
|
|
if sources then
|
|
local sourceInfo = C_TransmogCollection.GetSourceInfo(sources[1])
|
|
local camera = C_TransmogCollection.GetAppearanceCameraID(visualID)
|
|
sourceInfo.camera = camera
|
|
local isCollected = false
|
|
local sourceTypes = {}
|
|
|
|
for i,d in pairs(sources)do
|
|
local info = C_TransmogCollection.GetSourceInfo(d)
|
|
if info.sourceType then
|
|
sourceTypes[info.sourceType] = true
|
|
end
|
|
local collected = select(5,C_TransmogCollection.GetAppearanceSourceInfo(d))
|
|
|
|
if collected then
|
|
isCollected = true
|
|
end
|
|
end
|
|
|
|
local filter = false
|
|
for i in pairs(sourceTypes) do
|
|
if filterSource[i] then
|
|
filter = true
|
|
break
|
|
end
|
|
end
|
|
|
|
if #sourceTypes == 0 then
|
|
filter = true
|
|
end
|
|
|
|
local catType = sourceInfo.categoryID
|
|
local invTypeMatch = false
|
|
if CollectionList.showAll then
|
|
invTypeMatch = true
|
|
|
|
elseif (CollectionList.Category == 117 and catType == 19) then
|
|
invTypeMatch = true
|
|
|
|
elseif (CollectionList.Category == 116 and catType > 11 and catType ~= 19) then
|
|
invTypeMatch = true
|
|
|
|
else
|
|
invTypeMatch = catType == CollectionList.Category
|
|
end
|
|
|
|
if complete then
|
|
tinsert(list, sourceInfo)
|
|
elseif ((not isCollected and filterUncollected) or (isCollected and filterCollected)) and filter and invTypeMatch then
|
|
if searchString then
|
|
for i, data in pairs(sources) do
|
|
local source_info = C_TransmogCollection.GetSourceInfo(data)
|
|
local match = string.find(string.lower(source_info.name or ""), searchString) or string.find(string.lower(baseSet.label or ""), searchString) or string.find(string.lower(baseSet.description or ""), searchString)
|
|
if match then
|
|
tinsert(list, source_info)
|
|
break
|
|
end
|
|
end
|
|
else
|
|
tinsert(list, sourceInfo)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
return list
|
|
end
|
|
|
|
function CollectionList:BuildShoppingList()
|
|
local collectionList = self:BuildCollectionList(true)
|
|
local shoppingList = {}
|
|
for _, data in ipairs(collectionList) do
|
|
local sources = C_TransmogCollection.GetAllAppearanceSources(data.visualID)
|
|
--local sources = C_TransmogCollection.GetAppearanceSources(data.visualID)
|
|
for _, data in pairs(sources) do
|
|
local sourceInfo = C_TransmogCollection.GetSourceInfo(data)
|
|
tinsert(shoppingList, sourceInfo)
|
|
end
|
|
end
|
|
|
|
return shoppingList
|
|
end
|
|
|
|
--Needs to to take account of variant
|
|
function CollectionList:UpdateList(type, typeID, add, sourceID)
|
|
typeID = tonumber(typeID)
|
|
if not typeID then return end
|
|
local addSet = false
|
|
local setName, setInfo, itemModID
|
|
local selectedList = CollectionList:SelectedCollectionList()
|
|
if selectedList == "MOGIT" then
|
|
return addon.MogIt.UpdateWishlistItem(type, typeID, add, sourceID)
|
|
end
|
|
|
|
local collectionList = addon.CollectionList:CurrentList()
|
|
if type == "item" then --TypeID is visualID
|
|
collectionList[type][typeID] = add or nil
|
|
if BetterWardrobeCollectionFrame.ItemsCollectionFrame:IsShown() then
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:RefreshVisualsList()
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:UpdateItems()
|
|
print(add and L["Appearance added."] or L["Appearance removed."])
|
|
end
|
|
|
|
return collectionList[type][typeID]
|
|
else
|
|
local sources
|
|
if type == "set" then
|
|
sources = addon.GetSetSources(typeID)
|
|
setName = C_TransmogSets.GetSetInfo(typeID).name
|
|
else
|
|
setInfo = addon.GetSetInfo(typeID)
|
|
sources = addon.GetSetsources(typeID)
|
|
setName = "name"
|
|
itemModID = setInfo.mod or 0
|
|
end
|
|
|
|
collectionList[type][typeID] = (add and {}) or nil
|
|
|
|
for sourceID, isCollected in pairs(sources) do
|
|
|
|
local sourceInfo = C_TransmogCollection.GetSourceInfo(sourceID)
|
|
local visualID = C_TransmogCollection.GetItemInfo(sourceInfo.itemID, itemModID or sourceInfo.itemModID)--(type == "set" and sourceInfo.visualID) or addon.GetItemSource(sourceID, setInfo.mod)
|
|
|
|
if add and visualID then
|
|
collectionList[type][typeID][visualID] = add
|
|
end
|
|
|
|
addSet = self:UpdateList("item", visualID, add or nil)
|
|
end
|
|
|
|
----if type == "set" then
|
|
BetterWardrobeCollectionFrame.SetsCollectionFrame:OnSearchUpdate()
|
|
BetterWardrobeCollectionFrame.SetsTransmogFrame:OnSearchUpdate()
|
|
----else
|
|
---- BW_SetsTransmogFrame:OnSearchUpdate()
|
|
---- BW_SetsCollectionFrame:OnSearchUpdate()
|
|
-----end
|
|
|
|
--print(addSet and L["%s: Uncollected items added"]:format(setName) or L["No new appearces needed."])
|
|
return addSet
|
|
end
|
|
end
|
|
|
|
|
|
BetterWardrobeSetsCollectionListMixin = {}
|
|
function BetterWardrobeSetsCollectionListMixin:Toggle(toggleState)
|
|
if (IsShiftKeyDown()) then
|
|
CollectionList:GenerateListView()
|
|
else
|
|
local atTransmogrifier = C_Transmog.IsAtTransmogNPC()
|
|
local transmogLocation = TransmogUtil.GetTransmogLocation("HEADSLOT", Enum.TransmogType.Appearance, Enum.TransmogModification.Main)
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:SetActiveSlot(transmogLocation)
|
|
--BetterWardrobeCollectionFrame.ItemsCollectionFrame:SetActiveSlot("HEADSLOT", Enum.TransmogType.Appearance)
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:RefreshVisualsList()
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:UpdateItems()
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame.SlotsFrame:SetShown(not toggleState and not atTransmogrifier)
|
|
--WardrobeCollectionFrameWeaponDropDown:SetShown(not toggleState)
|
|
self.CollectionListTitle:SetShown(toggleState)
|
|
local listcount = CollectionList:ListCount("item")
|
|
self.CollectionListHelpText:SetShown(toggleState and listcount == 0)
|
|
self.SlotsFrame:SetShown(toggleState)
|
|
end
|
|
end
|
|
|
|
function BetterWardrobeSetsCollectionListMixin:SetTitle()
|
|
self.CollectionListTitle.Name:SetText(L["Collection List"])
|
|
self.CollectionListHelpText.Name:SetText(L["COLLECTION_LIST_HELP"])
|
|
end
|
|
|
|
function addon.Init:BuildCollectionList()
|
|
CollectionList:AddMogItData()
|
|
CollectionList:CreateDropdown()
|
|
end
|
|
|
|
local spacingNoSmallButton = 2
|
|
local spacingWithSmallButton = 12
|
|
local defaultSectionSpacing = 24
|
|
local shorterSectionSpacing = 19
|
|
|
|
function addon:GetActiveCategory()
|
|
return CollectionList.Category
|
|
end
|
|
|
|
function addon:IsWeaponCat()
|
|
return BW_CollectionListButton.ToggleState and CollectionList.Category and CollectionList.Category > 100
|
|
end
|
|
|
|
local catchAll = TransmogUtil.GetTransmogLocation("HEADSLOT", Enum.TransmogType.Appearance, Enum.TransmogModification.Main)
|
|
--function WardrobeItemsCollectionMixin:SetActiveSlot(transmogLocation, category, ignorePreviousSlot)
|
|
local function slotOnClick(self, transmogLocation)
|
|
local slotButtons = self.parent.Buttons
|
|
for i = 1, #slotButtons do
|
|
local button = slotButtons[i]
|
|
button.SelectedTexture:SetShown(button.transmogLocation:IsEqual(self.transmogLocation))
|
|
end
|
|
|
|
|
|
if self.transmogLocation:IsAppearance() then
|
|
CollectionList.Category = transmogLocation and self.transmogLocation:GetArmorCategoryID() or self.transmogLocation:GetSlotID() + 100
|
|
CollectionList.showAll = false
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:ChangeModelsSlot(transmogLocation)
|
|
else
|
|
|
|
CollectionList.Category = catchAll and catchAll:GetArmorCategoryID()
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:ChangeModelsSlot(catchAll)
|
|
CollectionList.showAll = true
|
|
end
|
|
|
|
CloseDropDownMenus()
|
|
BW_CloseDropDownMenus()
|
|
PlaySound(SOUNDKIT.UI_TRANSMOG_GEAR_SLOT_CLICK)
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:RefreshVisualsList()
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:UpdateItems()
|
|
end
|
|
|
|
function BetterWardrobeSetsCollectionListMixin:CreateSlotButtons()
|
|
local slots = { "head", "shoulder", "back", "chest", "shirt", "tabard", "wrist", "hands", "waist", "legs", "feet", "mainhand", "secondaryhand" }
|
|
local parentFrame = self.SlotsFrame
|
|
local lastButton
|
|
local xOffset = spacingNoSmallButton
|
|
|
|
local button = CreateFrame("BUTTON", nil, parentFrame, "WardrobeSlotButtonTemplate")
|
|
button:SetSize(40,40)
|
|
button.NormalTexture:ClearAllPoints()
|
|
button.NormalTexture:SetAllPoints()
|
|
button.NormalTexture:SetAtlas("transmog-nav-slot-enchant", false)
|
|
button.transmogLocation = TransmogUtil.GetTransmogLocation("MAINHANDSLOT", Enum.TransmogType.Illusion, Enum.TransmogModification.Main)
|
|
button.parent = parentFrame
|
|
button.SelectedTexture:SetShown(true)
|
|
|
|
button:SetPoint("TOPLEFT")
|
|
button:SetScript("OnEnter", function(button) GameTooltip:SetOwner(button, "ANCHOR_RIGHT"); GameTooltip:SetText(L["View All"]); end)
|
|
button:SetScript("OnClick", function(button) slotOnClick(button, button.transmogLocation) end)
|
|
lastButton = button
|
|
|
|
for i = 1, #slots do
|
|
local value = tonumber(slots[i])
|
|
if (value) then
|
|
-- this is a spacer
|
|
xOffset = value
|
|
else
|
|
local slotString = slots[i]
|
|
local button = CreateFrame("BUTTON", nil, parentFrame, "WardrobeSlotButtonTemplate")
|
|
button.NormalTexture:SetAtlas("transmog-nav-slot-"..slotString, true)
|
|
if (lastButton) then
|
|
button:SetPoint("LEFT", lastButton, "RIGHT", xOffset, 0)
|
|
else
|
|
button:SetPoint("TOPLEFT")
|
|
end
|
|
button.slot = string.upper(slotString).."SLOT"
|
|
xOffset = spacingNoSmallButton
|
|
lastButton = button
|
|
button.parent = parentFrame
|
|
button.transmogLocation = TransmogUtil.GetTransmogLocation(button.slot, button.transmogType, button.modification)
|
|
button:SetScript("OnClick", function(button) slotOnClick(button , button.transmogLocation) end)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
function CollectionList:Dropdown_OnClick(arg1, arg2, checked)
|
|
CollectionList:SelectedCollectionList(arg1)
|
|
--BW_UIDropDownMenu_SetSelectedID(BW_CollectionList_Dropdown, arg1)
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:RefreshVisualsList()
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:UpdateItems()
|
|
end
|
|
|
|
local MogItKey
|
|
|
|
local function GeneratorFunction(owner, rootDescription)
|
|
rootDescription:CreateTitle("Collection Lists");
|
|
rootDescription:SetTag("MENU_COLLECTION_LIST");
|
|
|
|
local list = addon.collectionListDB.profile.lists
|
|
for index, data in pairs(list) do
|
|
rootDescription:CreateRadio(data.name, function() return index == CollectionList:SelectedCollectionList() end, function()
|
|
CollectionList:SelectedCollectionList(index)
|
|
--BW_UIDropDownMenu_SetSelectedID(BW_CollectionList_Dropdown, arg1)
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:RefreshVisualsList()
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:UpdateItems()
|
|
end,index);
|
|
|
|
end
|
|
|
|
if MogItLoaded then
|
|
rootDescription:CreateButton( "MogIt Wishlist", function()
|
|
CollectionList:SelectedCollectionList(#list + 1)
|
|
--BW_UIDropDownMenu_SetSelectedID(BW_CollectionList_Dropdown, arg1)
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:RefreshVisualsList()
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:UpdateItems()
|
|
end);
|
|
|
|
end
|
|
end
|
|
|
|
--Dropdownmenu for the Collection List
|
|
function CollectionList:CreateDropdown()
|
|
BW_CollectionList_Dropdown = CreateFrame("DropdownButton", "BW_CollectionList_Dropdown", BW_ColectionListFrame, "WowStyle1DropdownTemplate")
|
|
BW_CollectionList_Dropdown:SetPoint("BOTTOM", BW_ColectionListFrame, "BOTTOM", 0, 15)
|
|
--BW_CollectionList_Dropdown:SetScript("OnMouseUp", function(button)
|
|
BW_CollectionList_Dropdown:SetupMenu(GeneratorFunction);
|
|
|
|
|
|
--end)
|
|
local level = BW_ColectionListFrame:GetFrameLevel()
|
|
BW_CollectionList_Dropdown:SetFrameLevel(level+1)
|
|
BW_ColectionListFrame.dropdownFrame = BW_CollectionList_Dropdown
|
|
|
|
local button = CreateFrame("Button", "BW_CollectionListOptionsButton", BW_CollectionList_Dropdown, "SquareIconButtonTemplate")
|
|
button:SetSize(30,30)
|
|
button:SetPoint("LEFT", "BW_CollectionList_Dropdown", "RIGHT", 1, 0)
|
|
button.Icon:SetTexture("Interface\\Buttons\\UI-OptionsButton")
|
|
button.Icon:SetSize(15,15)
|
|
button:SetScript("OnClick", function(button) CollectionList:OptionButton_OnClick(button) end)
|
|
end
|
|
|
|
|
|
local action
|
|
function CollectionList:OptionButton_OnClick(button)
|
|
|
|
local function GeneratorFunction(owner, rootDescription)
|
|
rootDescription:CreateButton(L["Add List"], function() action = "add"; BetterWardrobeOutfitManager:ShowPopup("BW_NAME_COLLECTION") end);
|
|
rootDescription:CreateButton(L["Rename"], function() action = "rename"; BetterWardrobeOutfitManager:ShowPopup("BW_NAME_COLLECTION") end);
|
|
rootDescription:CreateButton(L["Delete"], function() CollectionList:DeleteList()end);
|
|
rootDescription:CreateButton(L["Add by Item ID"], function() BetterWardrobeOutfitManager:ShowPopup("BETTER_WARDROBE_COLLECTIONLIST_ITEM_POPUP") end);
|
|
|
|
end
|
|
|
|
MenuUtil.CreateContextMenu(parent, GeneratorFunction);
|
|
|
|
end
|
|
|
|
function CollectionList:AddMogItData()
|
|
MogItLoaded = C_AddOns.IsAddOnLoaded("MogIt")
|
|
if not MogItLoaded and CollectionList:SelectedCollectionList() == "MOGIT" then
|
|
CollectionList:SelectedCollectionList(1)
|
|
end
|
|
end
|
|
|
|
|
|
function CollectionList:AddList(name)
|
|
if not name then return false end
|
|
|
|
local profile = addon.collectionListDB.profile
|
|
local default = {item = {}, set = {}, extraset = {}, name = name}
|
|
tinsert(profile.lists, default)
|
|
local list = CollectionList:SelectedCollectionList(#profile.lists)
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:RefreshVisualsList()
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:UpdateItems()
|
|
BW_CollectionList_Dropdown:SetupMenu(GeneratorFunction);
|
|
|
|
return true
|
|
end
|
|
|
|
|
|
function CollectionList:RenameList(name)
|
|
if not name then return false end
|
|
|
|
local profile = addon.collectionListDB.profile
|
|
local list = CollectionList:CurrentList()
|
|
list.name = name
|
|
--BW_CollectionList_DropdownText:SetText(list.name)
|
|
BW_CollectionList_Dropdown:SetupMenu(GeneratorFunction);
|
|
|
|
return true
|
|
end
|
|
|
|
|
|
function CollectionList:DeleteList()
|
|
local profile = addon.collectionListDB.profile
|
|
if #profile.lists == 1 then
|
|
--Error cant delete last list
|
|
return false
|
|
end
|
|
|
|
tremove(profile.lists, CollectionList:SelectedCollectionList())
|
|
CollectionList:SelectedCollectionList(1)
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:RefreshVisualsList()
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:UpdateItems()
|
|
BW_CollectionList_Dropdown:SetupMenu(GeneratorFunction);
|
|
|
|
return true
|
|
end
|
|
|
|
|
|
function CollectionList:IsInList(itemID, itemType, full)
|
|
itemType = itemType or "item"
|
|
if full then
|
|
local profile = addon.collectionListDB.profile.lists
|
|
local count = 0
|
|
|
|
for i, data in ipairs(profile) do
|
|
local collectionList = profile[i]
|
|
if not collectionList then return end
|
|
local isInList = collectionList[itemType][itemID]
|
|
if isInList then count = count + 1 end
|
|
end
|
|
return count ~= 0, count
|
|
else
|
|
local collectionList = addon.CollectionList:CurrentList()
|
|
local isInList = collectionList[itemType][itemID] or false
|
|
return isInList
|
|
end
|
|
end
|
|
|
|
--[[ if Wow.IsAddonEnabled("TheUndermineJournal") and TUJMarketInfo then
|
|
local function GetTUJPrice(itemLink, arg)
|
|
local data = TUJMarketInfo(itemLink)
|
|
return data and data[arg] or nil
|
|
end
|
|
]]
|
|
function CollectionList:ListCount(type)
|
|
local list = CollectionList:CurrentList()
|
|
local counter = 0
|
|
if not list then return counter end
|
|
|
|
type = type or "item"
|
|
list = list[type]
|
|
|
|
for i in pairs(list) do
|
|
counter = counter + 1
|
|
end
|
|
return counter
|
|
end
|
|
|
|
function CollectionList:CurrentList()
|
|
local selectedList = CollectionList:SelectedCollectionList()
|
|
if selectedList == MogItKey then
|
|
return addon.MogIt.GetMogitWishlist()
|
|
else
|
|
return addon.collectionListDB.profile.lists[selectedList]
|
|
end
|
|
end
|
|
|
|
--Returns selected list and sets list if value is included
|
|
function CollectionList:SelectedCollectionList(value)
|
|
if value then
|
|
addon.collectionListDB.profile.selectedCollectionList = value
|
|
local list = CollectionList:CurrentList()
|
|
if not list then return end
|
|
end
|
|
|
|
return addon.collectionListDB.profile.selectedCollectionList
|
|
end
|
|
|
|
local function GetCustomPriceValue(source, itemID)
|
|
return TSM_API.GetCustomPriceValue(source, itemID)
|
|
end
|
|
|
|
local function MoneyToString(priceMarket)
|
|
return TSM_API.FormatMoneyString(priceMarket)
|
|
end
|
|
|
|
local TSMSources
|
|
local function TSMPricelookup(itemID)
|
|
if (not C_AddOns.IsAddOnLoaded("TradeSkillMaster")) then return "" end
|
|
|
|
if not TSMSources then
|
|
TSMSources = {}
|
|
TSM_API.GetPriceSourceKeys(TSMSources)
|
|
end
|
|
|
|
local source = TSMSources[addon.db.profile["TSM_Market"]] or "DBMarket"
|
|
return MoneyToString((GetCustomPriceValue(source, "i:"..itemID) or 0))
|
|
end
|
|
|
|
local function GetBossInfo(itemID)
|
|
local drops = C_TransmogCollection.GetAppearanceSourceDrops(itemID)
|
|
local sourceText = ""
|
|
if (#drops == 1) then
|
|
sourceText = _G["TRANSMOG_SOURCE_"..TRANSMOG_SOURCE_BOSS_DROP]..": "..string.format(WARDROBE_TOOLTIP_ENCOUNTER_SOURCE, drops[1].encounter, drops[1].instance)
|
|
showDifficulty = true
|
|
end
|
|
return sourceText
|
|
end
|
|
|
|
|
|
local LISTWINDOW
|
|
local AceGUI = LibStub("AceGUI-3.0")
|
|
function CollectionList:GenerateListView()
|
|
if self.LISTWINDOW then self.LISTWINDOW:Hide() end
|
|
|
|
-- Create a container frame
|
|
local f = AceGUI:Create("Window")
|
|
f:SetCallback("OnClose",function(widget) AceGUI:Release(widget) end)
|
|
f:SetTitle("Collection List")
|
|
f:SetLayout("Flow")
|
|
--f:SetAutoAdjustHeight(true)
|
|
f:EnableResize(false)
|
|
_G["BetterWardrobeCollectionListWindow"] = f.frame
|
|
self.LISTWINDOW = f
|
|
tinsert(UISpecialFrames, "BetterWardrobeCollectionListWindow")
|
|
|
|
local scrollcontainer = AceGUI:Create("SimpleGroup")
|
|
scrollcontainer:SetFullWidth(true)
|
|
scrollcontainer:SetHeight(f.frame:GetHeight()-75)
|
|
scrollcontainer:SetLayout("Fill") -- important!
|
|
f:AddChild(scrollcontainer)
|
|
|
|
local scroll = AceGUI:Create("ScrollFrame")
|
|
scroll:SetLayout("Flow")
|
|
scroll:SetFullWidth(true)
|
|
scroll:SetFullHeight(true)
|
|
scrollcontainer:AddChild(scroll)
|
|
|
|
local btn = AceGUI:Create("Button")
|
|
btn:SetWidth(170)
|
|
btn:SetHeight(25)
|
|
btn:SetText(L["Export TSM Groups"])
|
|
btn:SetCallback("OnClick", function() CollectionList:TSMGroupExport() end)
|
|
f:AddChild(btn)
|
|
btn:ClearAllPoints()
|
|
btn:SetPoint("BOTTOMRIGHT")
|
|
|
|
local list = CollectionList:BuildShoppingList()
|
|
for i, data in ipairs(list) do
|
|
if data then
|
|
local GetItemInfo = C_Item and C_Item.GetItemInfo
|
|
local _, itemLink, _, _, _, _, _, _, _, itemIcon, _, _, _, _, expacID = GetItemInfo(data.itemID)
|
|
local nameColor = ITEM_QUALITY_COLORS[data.quality] or ""
|
|
local transmogSource = data.sourceType and _G["TRANSMOG_SOURCE_"..(data.sourceType)] or L.OM_GOLD..L["Collected"]..L.ENDCOLOR
|
|
local bossInfo = ""
|
|
|
|
local CheckBox = AceGUI:Create("InteractiveLabel")
|
|
local priceText = TSMPricelookup(data.itemID)
|
|
local name = data.name and nameColor.hex..data.name..L.ENDCOLOR or ""
|
|
|
|
if data.sourceType and data.sourceType == 1 then
|
|
bossinfo = GetBossInfo(data.sourceID)
|
|
CheckBox:SetText(L.COLLECTIONLIST_TEXT:format(name, bossinfo))
|
|
elseif data.sourceType and (data.sourceType == 3 or data.sourceType == 4 or data.sourceType == 6) then
|
|
CheckBox:SetText(L.SHOPPINGLIST_TEXT:format(name, transmogSource, priceText))
|
|
else
|
|
CheckBox:SetText(L.COLLECTIONLIST_TEXT:format(name, transmogSource))
|
|
end
|
|
|
|
CheckBox:SetImage(itemIcon)
|
|
CheckBox:SetImageSize(20,20)
|
|
CheckBox:SetFullWidth(true)
|
|
|
|
if i == 1 or list[i-1].visualID ~= data.visualID then
|
|
local Heading = AceGUI:Create("Heading")
|
|
Heading:SetFullWidth(true)
|
|
scroll:AddChild(Heading)
|
|
end
|
|
|
|
CheckBox:SetCallback("OnClick", function()
|
|
if IsModifiedClick("CHATLINK") then
|
|
if (itemLink) then
|
|
HandleModifiedItemClick(itemLink)
|
|
end
|
|
elseif IsModifiedClick("DRESSUP") then
|
|
DressUpVisual(data.sourceID)
|
|
end
|
|
end)
|
|
|
|
CheckBox:SetCallback("OnEnter", function()
|
|
GameTooltip:SetOwner(UIParent, "ANCHOR_CURSOR", 0, 0)
|
|
if itemLink then
|
|
GameTooltip:SetHyperlink(itemLink)
|
|
GameTooltip:Show()
|
|
end
|
|
end)
|
|
|
|
CheckBox:SetCallback("OnLeave", function()
|
|
GameTooltip:Hide()
|
|
end)
|
|
scroll:AddChild(CheckBox)
|
|
end
|
|
end
|
|
end
|
|
|
|
function CollectionList:TSMGroupExport()
|
|
if self.LISTWINDOW then self.LISTWINDOW:Hide() end
|
|
local f = AceGUI:Create("Window")
|
|
f:SetCallback("OnClose",function(widget) AceGUI:Release(widget) end)
|
|
--f:SetTitle("TSM Export")
|
|
f:SetLayout("Fill")
|
|
--f:SetAutoAdjustHeight(true)
|
|
f:EnableResize(false)
|
|
_G["BetterWardrobeCollectionExportWindow"] = f.frame
|
|
LISTWINDOW = f
|
|
tinsert(UISpecialFrames, "BetterWardrobeCollectionExportWindow")
|
|
|
|
local CheckBox = AceGUI:Create("MultiLineEditBox")
|
|
CheckBox:SetFullHeight(true)
|
|
CheckBox:SetFullWidth(true)
|
|
CheckBox:DisableButton(true)
|
|
CheckBox:SetLabel("")
|
|
f:AddChild(CheckBox)
|
|
|
|
local list = CollectionList:BuildShoppingList()
|
|
local itemString = ""
|
|
local groupCount = 1
|
|
local lastVisual
|
|
for i, data in ipairs(list) do
|
|
if data.sourceType and (data.sourceType == 3 or data.sourceType == 4 or data.sourceType == 6) then
|
|
if i == 1 or lastVisual ~= data.visualID then
|
|
itemString = L["%sgroup:Appearance Group %s,"]:format(itemString, groupCount)
|
|
groupCount = groupCount + 1
|
|
lastVisual = data.visualID
|
|
end
|
|
itemString = itemString.."i:"..data.itemID..","
|
|
end
|
|
|
|
end
|
|
CheckBox:SetText(itemString)
|
|
end
|
|
|
|
function CollectionListTooltip_OnEnter(self)
|
|
GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
|
|
GameTooltip:SetText(L["Click: Show Collection List"])
|
|
GameTooltip:AddLine(L["Shift Click: Show Detail List"])
|
|
GameTooltip:Show()
|
|
end
|
|
|
|
BW_CollectionListDropDownMixin = {}
|
|
|
|
function BW_CollectionListDropDownMixin:OnLoad()
|
|
local button = _G[self:GetName().."Button"]
|
|
button:Hide()
|
|
end
|
|
|
|
StaticPopupDialogs["BETTER_WARDROBE_COLLECTIONLIST_ITEM_POPUP"] = {
|
|
text = L["Type the item ID in the text box below"],
|
|
preferredIndex = 3,
|
|
button1 = ADD,
|
|
button2 = CANCEL,
|
|
hasEditBox = true,
|
|
maxLetters = 512,
|
|
editBoxWidth = 260,
|
|
OnShow = function() if LISTWINDOW then LISTWINDOW:Hide() end end,
|
|
OnAccept = function(self)
|
|
|
|
local itemID = self.editBox:GetText()
|
|
if not itemID then return false end
|
|
local appearanceID, sourceID = C_TransmogCollection.GetItemInfo(tonumber(itemID))
|
|
if not appearanceID then return false end
|
|
|
|
CollectionList:UpdateList("item", appearanceID, true)
|
|
end,
|
|
EditBoxOnEnterPressed = function(self)
|
|
if self:GetParent().button1:IsEnabled() then
|
|
StaticPopup_OnClick(self:GetParent(), 1)
|
|
end
|
|
end,
|
|
EditBoxOnEscapePressed = HideParentPanel,
|
|
exclusive = true,
|
|
whileDead = true,
|
|
}
|
|
|
|
StaticPopupDialogs["BW_NAME_COLLECTION"] = {
|
|
preferredIndex = 3,
|
|
text = L["List Name"],
|
|
button1 = SAVE,
|
|
button2 = CANCEL,
|
|
OnAccept = function(self)
|
|
local name = self.editBox:GetText()
|
|
if action == "add" then
|
|
CollectionList:AddList(name)
|
|
elseif action == "rename" then
|
|
CollectionList:RenameList(name)
|
|
end
|
|
action = nil
|
|
end,
|
|
timeout = 0,
|
|
whileDead = 1,
|
|
hideOnEscape = 1,
|
|
hasEditBox = 1,
|
|
maxLetters = 31,
|
|
OnShow = function(self)
|
|
self.button1:Disable()
|
|
self.button2:Enable()
|
|
self.editBox:SetFocus()
|
|
end,
|
|
OnHide = function(self)
|
|
self.editBox:SetText("")
|
|
end,
|
|
EditBoxOnEnterPressed = function(self)
|
|
if self:GetParent().button1:IsEnabled() then
|
|
StaticPopup_OnClick(self:GetParent(), 1)
|
|
end
|
|
end,
|
|
EditBoxOnTextChanged = function (self)
|
|
local parent = self:GetParent()
|
|
if parent.editBox:GetText() ~= "" then
|
|
parent.button1:Enable()
|
|
else
|
|
parent.button1:Disable()
|
|
end
|
|
end,
|
|
EditBoxOnEscapePressed = function(self)
|
|
self:GetParent():Hide()
|
|
end
|
|
}
|