From 5a7b88baae8069c8eb6068df816197836322e6c9 Mon Sep 17 00:00:00 2001 From: Adrian L Lange Date: Fri, 15 Mar 2013 20:42:35 +0100 Subject: [PATCH] Add the item filter as an option --- Config.lua | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Monomyth.lua | 20 +------- 2 files changed, 150 insertions(+), 19 deletions(-) diff --git a/Config.lua b/Config.lua index a2738f2..7bec9e7 100644 --- a/Config.lua +++ b/Config.lua @@ -11,6 +11,26 @@ local defaults = { gossipraid = true, modifier = 'SHIFT', reverse = false, + ignoredQuests = { + -- Inscription weapons + [31690] = 79343, -- Inscribed Tiger Staff + [31691] = 79340, -- Inscribed Crane Staff + [31692] = 79341, -- Inscribed Serpent Staff + + -- Darkmoon Faire artifacts + [29443] = 71635, -- Imbued Crystal + [29444] = 71636, -- Monstrous Egg + [29445] = 71637, -- Mysterious Grimoire + [29446] = 71638, -- Ornate Weapon + [29451] = 71715, -- A Treatise on Strategy + [29456] = 71951, -- Banner of the Fallen + [29457] = 71952, -- Captured Insignia + [29458] = 71953, -- Fallen Adventurer's Journal + [29464] = 71716, -- Soothsayer's Runes + + -- Misc + [31664] = 88604, -- Nat's Fishing Journal + } } local Panel = CreateFrame('Frame', nil, InterfaceOptionsFramePanelContainer) @@ -28,6 +48,8 @@ Panel:SetScript('OnEvent', function() end end) +local UpdateFilterBox + function Panel:okay() for key, value in pairs(temporary) do MonomythDB[key] = value @@ -54,6 +76,8 @@ function Panel:refresh() UIDropDownMenu_SetText(button, _G[MonomythDB[key] .. '_KEY']) end end + + UpdateFilterBox() end local CreateCheckButton @@ -104,6 +128,41 @@ do end end +local filterBackdrop = { + bgFile = [=[Interface\ChatFrame\ChatFrameBackground]=], tile = true, tileSize = 16, + edgeFile = [=[Interface\Tooltips\UI-Tooltip-Border]=], edgeSize = 16, + insets = {left = 4, right = 4, top = 4, bottom = 4} +} + +local function FilterDetailsOnEnter(self) + GameTooltip:SetOwner(self, 'ANCHOR_TOPLEFT') + GameTooltip:AddLine('Easily add more items to filter by\ngrabbing one from your inventory\nand dropping it into the box below.\n\nJust as easily you remove an existing\nitem by right-clicking on it.', 1, 1, 1) + GameTooltip:Show() +end + +local function FilterItemOnEnter(self) + GameTooltip:SetOwner(self, 'ANCHOR_TOPLEFT') + GameTooltip:SetItemByID(self.itemID) +end + +local filterItems = {} + +StaticPopupDialogs.MONOMYTH_FILTER = { + text = 'Are you sure you want to delete |T%s:16|t%s from the filter?', + button1 = 'Yes', + button2 = 'No', + OnAccept = function(self, data) + MonomythDB.ignoredQuests[data.questID] = nil + filterItems[data.itemID] = nil + data.button:Hide() + + UpdateFilterBox() + end, + timeout = 0, + hideOnEscape = true, + preferredIndex = 3, -- Avoid some taint +} + Panel:SetScript('OnShow', function(self) local Title = self:CreateFontString(nil, nil, 'GameFontNormalLarge') Title:SetPoint('TOPLEFT', 16, -16) @@ -195,6 +254,96 @@ Panel:SetScript('OnShow', function(self) end end) + local FilterText = self:CreateFontString(nil, nil, 'GameFontHighlight') + FilterText:SetPoint('TOPLEFT', Modifier, 'BOTTOMLEFT', 18, -30) + FilterText:SetText('Items filtered from automization') + + local FilterDetails = CreateFrame('Button', nil, self) + FilterDetails:SetPoint('LEFT', FilterText, 'RIGHT') + FilterDetails:SetNormalTexture([=[Interface\GossipFrame\ActiveQuestIcon]=]) + FilterDetails:SetSize(16, 16) + + FilterDetails:SetScript('OnEnter', FilterDetailsOnEnter) + FilterDetails:SetScript('OnLeave', GameTooltip_Hide) + + local FilterBox = CreateFrame('Frame', nil, self) + FilterBox:SetPoint('TOPLEFT', FilterText, 'BOTTOMLEFT', -12, -8) + FilterBox:SetPoint('BOTTOMRIGHT', -8, 8) + FilterBox:SetBackdrop(filterBackdrop) + FilterBox:SetBackdropColor(0, 0, 0, 1/2) + + local FilterBounds = CreateFrame('Frame', nil, FilterBox) + FilterBounds:SetPoint('TOPLEFT', 8, -8) + FilterBounds:SetPoint('BOTTOMRIGHT', -8, 8) + + local function FilterItemOnClick(self, button) + if(button == 'RightButton') then + local _, link, _, _, _, _, _, _, _, texture = GetItemInfo(self.itemID) + local dialog = StaticPopup_Show('MONOMYTH_FILTER', texture, link) + dialog.data = { + itemID = self.itemID, + questID = self.questID, + button = self + } + end + end + + function UpdateFilterBox() + for quest, item in pairs(MonomythDB.ignoredQuests) do + if(not filterItems[item]) then + local Button = CreateFrame('Button', nil, FilterBox) + Button:SetSize(34, 34) + Button:RegisterForClicks('AnyUp') + + local Texture = Button:CreateTexture(nil, 'ARTWORK') + Texture:SetAllPoints() + Texture:SetTexture(select(10, GetItemInfo(item))) + + Button:SetScript('OnClick', FilterItemOnClick) + Button:SetScript('OnEnter', FilterItemOnEnter) + Button:SetScript('OnLeave', GameTooltip_Hide) + + Button.questID = quest + Button.itemID = item + + filterItems[item] = Button + end + end + + local index = 1 + local cols = math.floor(FilterBounds:GetWidth() / 36) + + for item, button in pairs(filterItems) do + button:ClearAllPoints() + button:SetPoint('TOPLEFT', FilterBounds, (index - 1) % cols * 36, math.floor((index - 1) / cols) * -36) + + index = index + 1 + end + end + + UpdateFilterBox() + + FilterBox:SetScript('OnMouseUp', function() + if(CursorHasItem()) then + local _, itemID, link = GetCursorInfo() + + for bag = 0, 4 do + for slot = 1, GetContainerNumSlots(bag) do + if(GetContainerItemLink(bag, slot) == link) then + local _, questID = GetContainerItemQuestInfo(bag, slot) + if(questID) then + MonomythDB.ignoredQuests[questID] = itemID + ClearCursor() + + UpdateFilterBox() + return + end + end + end + end + end + end) + self:SetScript('OnShow', nil) end) diff --git a/Monomyth.lua b/Monomyth.lua index 472d426..80a99f9 100644 --- a/Monomyth.lua +++ b/Monomyth.lua @@ -234,24 +234,6 @@ Monomyth:Register('MODIFIER_STATE_CHANGED', function(key, state) end end, true) -local ignoredItems = { - -- Inscription weapons - [31690] = true, -- Inscribed Tiger Staff - [31691] = true, -- Inscribed Crane Staff - [31692] = true, -- Inscribed Serpent Staff - - -- Darkmoon Faire artifacts - [29443] = true, -- Imbued Crystal - [29444] = true, -- Monstrous Egg - [29445] = true, -- Mysterious Grimoire - [29446] = true, -- Ornate Weapon - [29451] = true, -- A Treatise on Strategy - [29456] = true, -- Banner of the Fallen - [29457] = true, -- Captured Insignia - [29458] = true, -- Fallen Adventurer's Journal - [29464] = true, -- Soothsayer's Runes -} - local questTip = CreateFrame('GameTooltip', 'MonomythTip', UIParent) local questLevel = string.gsub(ITEM_MIN_LEVEL, '%%d', '(%%d+)') @@ -270,7 +252,7 @@ local function BagUpdate(bag) for slot = 1, GetContainerNumSlots(bag) do local _, id, active = GetContainerItemQuestInfo(bag, slot) - if(id and not active and not IsQuestFlaggedCompleted(id) and not ignoredItems[id]) then + if(id and not active and not IsQuestFlaggedCompleted(id) and not MonomythDB.ignoredQuests[id]) then questTip:SetBagItem(bag, slot) questTip:Show() -- 1.7.9.5