_, BrokerGarbage = ... BrokerGarbage:CheckSettings() -- options panel if BrokerGarbage.PT then BrokerGarbage.categoryTest = CreateFrame("Frame", "BrokerGarbageCategoryTestFrame", InterfaceOptionsFramePanelContainer) BrokerGarbage.categoryTest.name = BrokerGarbage.locale.PTCategoryTest BrokerGarbage.categoryTest.parent = "Broker_Garbage" BrokerGarbage.categoryTest:Hide() -- button tooltip infos local function ShowTooltip(self) GameTooltip:SetOwner(self, "ANCHOR_RIGHT") if self.tiptext then GameTooltip:SetText(self.tiptext, nil, nil, nil, nil, true) elseif self.itemLink then GameTooltip:SetHyperlink(self.itemLink) end GameTooltip:Show() end local function HideTooltip() GameTooltip:Hide() end local category local boxHeight = 200 local boxWidth = 330 local numCols = 8 local backdrop = { bgFile = "Interface\\ChatFrame\\ChatFrameBackground", insets = {left = 4, right = 4, top = 4, bottom = 4}, edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", edgeSize = 16 } function BrokerGarbage:UpdatePreviewBox(finish) if category == nil or category == "" then return end if not BrokerGarbage.listButtons.preview then BrokerGarbage.listButtons.preview = {} end local buttonList = BrokerGarbage.listButtons.preview local itemList = {} local index = 1 for itemID, value, set in BrokerGarbage.PT:IterateSet(category) do if buttonList[index] then -- use available button local button = buttonList[index] local itemLink, texture _, itemLink, _, _, _, _, _, _, _, texture, _ = GetItemInfo(itemID) button.itemID = itemID button.itemLink = itemLink button:SetNormalTexture(texture) button:SetChecked(false) button:Show() else -- create another button local iconbutton = CreateFrame("CheckButton", "BG_PreviewIconButton"..index, _G["BG_PreviewBoxContent"]) iconbutton:Hide() iconbutton:SetWidth(36) iconbutton:SetHeight(36) iconbutton:SetNormalTexture("Interface\\Icons\\Inv_misc_questionmark") iconbutton:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square") iconbutton:SetCheckedTexture("Interface\\Buttons\\UI-Button-Outline") iconbutton:SetChecked(false) local tex = iconbutton:GetCheckedTexture() tex:ClearAllPoints() tex:SetPoint("CENTER") tex:SetWidth(36/37*66) tex:SetHeight(36/37*66) iconbutton:SetScript("OnClick", function(self) local check = self:GetChecked() BrokerGarbage:Debug("OnClick", check) if IsModifiedClick("CHATLINK") and ChatFrameEditBox:IsVisible() then -- post item link ChatFrameEditBox:Insert(self.itemLink) self:SetChecked(not check) else self:SetChecked(not check) end end) iconbutton:SetScript("OnEnter", ShowTooltip) iconbutton:SetScript("OnLeave", HideTooltip) if index == 1 then -- place first icon iconbutton:SetPoint("TOPLEFT", "BG_PreviewBoxContent", "TOPLEFT", 6, -6) elseif mod(index, numCols) == 1 then -- new row iconbutton:SetPoint("TOPLEFT", buttonList[index-numCols], "BOTTOMLEFT", 0, -6) else -- new button next to the old one iconbutton:SetPoint("LEFT", buttonList[index-1], "RIGHT", 4, 0) end buttonList[index] = iconbutton end if GetItemCount(itemID) ~= 0 and not itemList[itemID] then itemList[itemID] = true index = index + 1 end end -- hide unnessessary buttons while buttonList[index] do buttonList[index]:Hide() index = index + 1 end if not finish then BrokerGarbage:UpdatePreviewBox(true) end end local function ShowOptions() local title, subtitle = LibStub("tekKonfig-Heading").new(BrokerGarbage.categoryTest, BrokerGarbage.locale.PTCategoryTestTitle, BrokerGarbage.locale.PTCategoryTestSubTitle) local explainText = BrokerGarbage.categoryTest:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall") explainText:SetPoint("TOPLEFT", subtitle, "BOTTOMLEFT", 0, 0) explainText:SetPoint("RIGHT", BrokerGarbage.categoryTest, -32, 0) explainText:SetHeight(40) explainText:SetNonSpaceWrap(true) explainText:SetJustifyH("LEFT") explainText:SetJustifyV("TOP") explainText:SetText(BrokerGarbage.locale.PTCategoryTestExplanation) -- dropdown menu for choosing the LPT string to view local categoryString, categoryText, categoryContainer = LibStub("tekKonfig-Dropdown").new(BrokerGarbage.categoryTest, BrokerGarbage.locale.PTCategoryTestDropdownTitle, "TOPLEFT", explainText, "BOTTOMLEFT", 0, -10) categoryText:SetText(BrokerGarbage.locale.PTCategoryTestDropdownText) categoryString:SetWidth(400) local function OnClick() UIDropDownMenu_SetSelectedValue(categoryString, this.category) category = this.category categoryText:SetText(category) BrokerGarbage:UpdatePreviewBox() end UIDropDownMenu_Initialize(categoryString, function(self,level) local selected = UIDropDownMenu_GetSelectedValue(categoryString) level = level or 1 if level == 1 then for key, subarray in pairs(BrokerGarbage.PTSets) do -- submenus local info = UIDropDownMenu_CreateInfo() info.hasArrow = true info.text = key info.category = key info.checked = key == selected info.value = { [1] = key } info.func = function() category = key UIDropDownMenu_SetSelectedValue(categoryString, category) categoryText:SetText(category) BrokerGarbage:UpdatePreviewBox() end UIDropDownMenu_AddButton(info, level) end else -- getting values of first menu local parentValue = UIDROPDOWNMENU_MENU_VALUE local PTSets = BrokerGarbage.PTSets for i = 1, level - 1 do PTSets = PTSets[ parentValue[i] ] end for key, value in pairs(PTSets) do local newValue = {} for i = 1, level - 1 do newValue[i] = parentValue[i] end newValue[level] = key -- calculate category string local valueString = newValue[1] for i = 2, level do valueString = valueString.."."..newValue[i] end local info = UIDropDownMenu_CreateInfo(); if type(value) == "table" then -- submenu info.hasArrow = true info.category = valueString info.value = newValue info.func = function() category = valueString UIDropDownMenu_SetSelectedValue(categoryString, category) categoryText:SetText(category) BrokerGarbage:UpdatePreviewBox() end else -- end node info.hasArrow = false info.func = function() category = valueString UIDropDownMenu_SetSelectedValue(categoryString, category) categoryText:SetText(category) BrokerGarbage:UpdatePreviewBox() end end info.checked = valueString == selected info.text = key UIDropDownMenu_AddButton(info, level); end end end) -- create the container local previewBox = CreateFrame("ScrollFrame", "BG_PreviewBox", BrokerGarbage.categoryTest, "UIPanelScrollFrameTemplate") previewBox:SetPoint("TOPLEFT", categoryContainer, "BOTTOMLEFT", 8, 4) previewBox:SetHeight(boxHeight) previewBox:SetWidth(boxWidth) previewBox:SetBackdrop(backdrop) previewBox:SetBackdropBorderColor(0.4, 0.4, 0.4) previewBox:SetBackdropColor(0.1, 0.1, 0.1) local group_preview = CreateFrame("Frame", "BG_PreviewBoxContent", previewBox) group_preview:SetAllPoints() group_preview:SetHeight(boxHeight) group_preview:SetWidth(boxWidth) previewBox:SetScrollChild(group_preview) -- now do the update & reset functions BrokerGarbage:UpdatePreviewBox() BrokerGarbage.categoryTest:SetScript("OnShow", BrokerGarbage.UpdatePreviewBox) end --BrokerGarbage.categoryTest:SetScript("OnShow", ShowOptions) table.insert(BrokerGarbage.optionsModules, BrokerGarbage.categoryTest) BrokerGarbage.optionsModules[#BrokerGarbage.optionsModules].OnShow = ShowOptions end