Files
Anthony Narkevicius 83314f574c Deconstruction blacklist (#89)
* Missing Non-DE items

* Move Deconstruct options into seperate group
Adds blacklist functionality for general items and lockboxes

* Add translation strings

* Add LibItemSearch functionality to blacklist

* Clean up redundant variables and API calls
2025-12-01 11:30:54 -07:00

988 lines
29 KiB
Lua

local E, _, V, P, G = unpack(ElvUI); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local C, L = unpack(select(2, ...))
local B = E:GetModule("Bags")
local _G = _G
local gsub, match = string.gsub, string.match
local GameTooltip = _G["GameTooltip"]
E.Options.args.bags = {
type = "group",
name = L["BAGSLOT"],
childGroups = "tab",
get = function(info) return E.db.bags[info[#info]] end,
set = function(info, value) E.db.bags[info[#info]] = value end,
args = {
intro = {
order = 1,
type = "description",
name = L["BAGS_DESC"]
},
enable = {
order = 2,
type = "toggle",
name = L["Enable"],
desc = L["Enable/Disable the all-in-one bag."],
get = function(info) return E.private.bags.enable end,
set = function(info, value) E.private.bags.enable = value E:StaticPopup_Show("PRIVATE_RL") end
},
general = {
order = 3,
type = "group",
name = L["General"],
disabled = function() return not E.Bags.Initialized end,
args = {
header = {
order = 1,
type = "header",
name = L["General"],
},
strata = {
order = 2,
type = "select",
name = L["Frame Strata"],
set = function(info, value) E.db.bags[info[#info]] = value E:StaticPopup_Show("PRIVATE_RL") end,
values = {
["BACKGROUND"] = "BACKGROUND",
["LOW"] = "LOW",
["MEDIUM"] = "MEDIUM",
["HIGH"] = "HIGH",
["DIALOG"] = "DIALOG",
["TOOLTIP"] = "TOOLTIP"
}
},
currencyFormat = {
order = 3,
type = "select",
name = L["Currency Format"],
desc = L["The display format of the currency icons that get displayed below the main bag. (You have to be watching a currency for this to display)"],
values = {
["ICON"] = L["Icons Only"],
["ICON_TEXT"] = L["Icons and Text"],
["ICON_TEXT_ABBR"] = L["Icons and Text (Short)"]
},
set = function(info, value) E.db.bags[info[#info]] = value B:UpdateTokens() end
},
moneyFormat = {
order = 4,
type = "select",
name = L["Money Format"],
desc = L["The display format of the money text that is shown at the top of the main bag."],
values = {
["SMART"] = L["Smart"],
["FULL"] = L["Full"],
["SHORT"] = L["SHORT"],
["SHORTINT"] = L["Short (Whole Numbers)"],
["CONDENSED"] = L["Condensed"],
["BLIZZARD"] = L["Blizzard Style"]
},
set = function(info, value) E.db.bags[info[#info]] = value B:UpdateGoldText() end
},
moneyCoins = {
order = 5,
type = "toggle",
name = L["Show Coins"],
desc = L["Use coin icons instead of colored text."],
set = function(info, value) E.db.bags[info[#info]] = value B:UpdateGoldText() end
},
transparent = {
order = 6,
type = "toggle",
name = L["Transparent Buttons"],
set = function(info, value) E.db.bags[info[#info]] = value E:StaticPopup_Show("PRIVATE_RL") end
},
questIcon = {
order = 7,
type = "toggle",
name = L["Show Quest Icon"],
desc = L["Display an exclamation mark on items that starts a quest."],
set = function(info, value) E.db.bags[info[#info]] = value B:UpdateAllBagSlots() end
},
junkIcon = {
order = 8,
type = "toggle",
name = L["Show Junk Icon"],
desc = L["Display the junk icon on all grey items that can be vendored."],
set = function(info, value) E.db.bags[info[#info]] = value B:UpdateAllBagSlots() end
},
junkDesaturate = {
order = 9,
type = "toggle",
name = L["Desaturate Junk Items"],
set = function(info, value) E.db.bags[info[#info]] = value B:UpdateAllBagSlots() end,
},
qualityColors = {
order = 10,
type = "toggle",
name = L["Show Quality Color"],
desc = L["Colors the border according to the Quality of the Item."],
set = function(info, value) E.db.bags[info[#info]] = value B:UpdateAllBagSlots() end
},
showBindType = {
order = 11,
type = "toggle",
name = L["Show Bind on Equip/Use Text"],
set = function(info, value) E.db.bags[info[#info]] = value B:UpdateAllBagSlots() end
},
clearSearchOnClose = {
order = 12,
type = "toggle",
name = L["Clear Search On Close"],
set = function(info, value) E.db.bags[info[#info]] = value end
},
reverseSlots = {
order = 13,
type = "toggle",
name = L["Reverse Bag Slots"],
set = function(info, value) E.db.bags[info[#info]] = value B:UpdateAll() B:UpdateTokens() end
},
disableBagSort = {
order = 14,
type = "toggle",
name = L["Disable Bag Sort"],
set = function(info, value) E.db.bags[info[#info]] = value B:ToggleSortButtonState(false) end
},
disableBankSort = {
order = 15,
type = "toggle",
name = L["Disable Bank Sort"],
set = function(info, value) E.db.bags[info[#info]] = value B:ToggleSortButtonState(true) end
},
unlearnedVanityIcon = {
order = 17,
type = "toggle",
name = L["Unlearned Vanity"],
desc = L["Unlearned Vanity Desc"],
set = function(info, value) E.db.bags[info[#info]] = value B:UpdateAllBagSlots() end
},
unlearnedWardrobeIcon = {
order = 18,
type = "toggle",
name = L["Unlearned Wardrobe"],
desc = L["Unlearned Wardrobe Desc"],
set = function(info, value) E.db.bags[info[#info]] = value B:UpdateAllBagSlots() end
},
countGroup = {
order = 19,
type = "group",
name = L["Item Count Font"],
guiInline = true,
args = {
countFont = {
order = 1,
type = "select",
dialogControl = "LSM30_Font",
name = L["Font"],
values = AceGUIWidgetLSMlists.font,
set = function(info, value) E.db.bags.countFont = value B:UpdateCountDisplay() end
},
countFontSize = {
order = 2,
type = "range",
name = L["FONT_SIZE"],
min = 4, max = 33, step = 1,
set = function(info, value) E.db.bags.countFontSize = value B:UpdateCountDisplay() end,
},
countFontOutline = {
order = 3,
type = "select",
name = L["Font Outline"],
set = function(info, value) E.db.bags.countFontOutline = value B:UpdateCountDisplay() end,
values = C.Values.FontFlags
},
countFontColor = {
order = 4,
type = "color",
name = L["COLOR"],
get = function(info)
local t = E.db.bags[info[#info]]
local d = P.bags[info[#info]]
return t.r, t.g, t.b, t.a, d.r, d.g, d.b
end,
set = function(info, r, g, b)
local t = E.db.bags[info[#info]]
t.r, t.g, t.b = r, g, b
B:UpdateCountDisplay()
end
}
}
},
itemLevelGroup = {
order = 20,
type = "group",
name = L["Item Level"],
guiInline = true,
args = {
itemLevel = {
order = 1,
type = "toggle",
name = L["Display Item Level"],
desc = L["Displays item level on equippable items."],
set = function(info, value) E.db.bags.itemLevel = value B:UpdateItemLevelDisplay() end
},
itemLevelCustomColorEnable = {
order = 2,
type = "toggle",
name = L["Enable Custom Color"],
disabled = function() return not E.db.bags.itemLevel end,
set = function(info, value) E.db.bags.itemLevelCustomColorEnable = value B:UpdateItemLevelDisplay() end
},
itemLevelCustomColor = {
order = 3,
type = "color",
name = L["Custom Color"],
disabled = function() return not E.db.bags.itemLevel or not E.db.bags.itemLevelCustomColorEnable end,
get = function(info)
local t = E.db.bags.itemLevelCustomColor
local d = P.bags.itemLevelCustomColor
return t.r, t.g, t.b, t.a, d.r, d.g, d.b
end,
set = function(info, r, g, b)
local t = E.db.bags.itemLevelCustomColor
t.r, t.g, t.b = r, g, b
B:UpdateItemLevelDisplay()
end
},
itemLevelThreshold = {
order = 4,
type = "range",
name = L["Item Level Threshold"],
desc = L["The minimum item level required for it to be shown."],
min = 1, max = 1000, step = 1,
disabled = function() return not E.db.bags.itemLevel end,
set = function(info, value) E.db.bags.itemLevelThreshold = value B:UpdateItemLevelDisplay() end
},
itemLevelFont = {
order = 5,
type = "select",
dialogControl = "LSM30_Font",
name = L["Font"],
values = AceGUIWidgetLSMlists.font,
disabled = function() return not E.db.bags.itemLevel end,
set = function(info, value) E.db.bags.itemLevelFont = value B:UpdateItemLevelDisplay() end
},
itemLevelFontSize = {
order = 6,
type = "range",
name = L["FONT_SIZE"],
min = 4, max = 33, step = 1,
disabled = function() return not E.db.bags.itemLevel end,
set = function(info, value) E.db.bags.itemLevelFontSize = value B:UpdateItemLevelDisplay() end
},
itemLevelFontOutline = {
order = 7,
type = "select",
name = L["Font Outline"],
disabled = function() return not E.db.bags.itemLevel end,
set = function(info, value) E.db.bags.itemLevelFontOutline = value B:UpdateItemLevelDisplay() end,
values = C.Values.FontFlags
}
}
}
}
},
sizeGroup = {
order = 4,
type = "group",
name = L["Size"],
disabled = function() return not E.Bags.Initialized end,
args = {
header = {
order = 1,
type = "header",
name = L["Size"],
},
bagSize = {
order = 2,
type = "range",
name = L["Button Size (Bag)"],
desc = L["The size of the individual buttons on the bag frame."],
min = 15, max = 60, step = 1,
set = function(info, value) E.db.bags[info[#info]] = value B:Layout() end
},
bankSize = {
order = 3,
type = "range",
name = L["Button Size (Bank)"],
desc = L["The size of the individual buttons on the bank frame."],
min = 15, max = 60, step = 1,
set = function(info, value) E.db.bags[info[#info]] = value B:Layout(true) end
},
spacer = {
order = 4,
type = "description",
name = ""
},
bagWidth = {
order = 5,
type = "range",
name = L["Panel Width (Bags)"],
desc = L["Adjust the width of the bag frame."],
min = 150, max = 1400, step = 1,
set = function(info, value) E.db.bags[info[#info]] = value B:Layout() end
},
bankWidth = {
order = 6,
type = "range",
name = L["Panel Width (Bank)"],
desc = L["Adjust the width of the bank frame."],
min = 150, max = 1400, step = 1,
set = function(info, value) E.db.bags[info[#info]] = value B:Layout(true) end
}
}
},
colorGroup = {
order = 5,
type = "group",
name = L["COLORS"],
args = {
header = {
order = 1,
type = "header",
name = L["COLORS"]
},
profession = {
order = 2,
type = "group",
name = L["Profession Bags"],
guiInline = true,
get = function(info)
local t = E.db.bags.colors.profession[info[#info]]
local d = P.bags.colors.profession[info[#info]]
return t.r, t.g, t.b, t.a, d.r, d.g, d.b
end,
set = function(info, r, g, b)
local t = E.db.bags.colors.profession[info[#info]]
t.r, t.g, t.b = r, g, b
if not E.Bags.Initialized then return end
B:UpdateBagColors("ProfessionColors", info[#info], r, g, b)
B:UpdateAllBagSlots()
end,
args = {
professionBagColors = {
order = 1,
type = "toggle",
name = L["Enable"],
get = function(info) return E.db.bags[info[#info]] end,
set = function(info, value)
E.db.bags[info[#info]] = value
if not E.Bags.Initialized then return end
B:UpdateAllBagSlots()
end
},
spacer = {
order = 2,
type = "description",
name = ""
},
quiver = {
order = 3,
type = "color",
name = L["Quiver"],
disabled = function() return not E.db.bags.professionBagColors end
},
ammoPouch = {
order = 4,
type = "color",
name = L["Ammo Pouch"],
disabled = function() return not E.db.bags.professionBagColors end
},
soulBag = {
order = 5,
type = "color",
name = L["Soul Bag"],
disabled = function() return not E.db.bags.professionBagColors end
},
leatherworking = {
order = 6,
type = "color",
name = L["Leatherworking"],
disabled = function() return not E.db.bags.professionBagColors end
},
inscription = {
order = 7,
type = "color",
name = L["INSCRIPTION"],
disabled = function() return not E.db.bags.professionBagColors end
},
herbs = {
order = 8,
type = "color",
name = L["Herbalism"],
disabled = function() return not E.db.bags.professionBagColors end
},
enchanting = {
order = 9,
type = "color",
name = L["Enchanting"],
disabled = function() return not E.db.bags.professionBagColors end
},
engineering = {
order = 10,
type = "color",
name = L["Engineering"],
disabled = function() return not E.db.bags.professionBagColors end
},
gems = {
order = 11,
type = "color",
name = L["Gems"],
disabled = function() return not E.db.bags.professionBagColors end
},
mining = {
order = 12,
type = "color",
name = L["Mining"],
disabled = function() return not E.db.bags.professionBagColors end
}
}
},
items = {
order = 3,
type = "group",
name = L["ITEMS"],
guiInline = true,
get = function(info)
local t = E.db.bags.colors.items[info[#info]]
local d = P.bags.colors.items[info[#info]]
return t.r, t.g, t.b, t.a, d.r, d.g, d.b
end,
set = function(info, r, g, b)
local t = E.db.bags.colors.items[info[#info]]
t.r, t.g, t.b = r, g, b
if not E.Bags.Initialized then return end
B:UpdateQuestColors("QuestColors", info[#info], r, g, b)
B:UpdateAllBagSlots()
end,
args = {
questItemColors = {
order = 1,
type = "toggle",
name = L["Enable"],
get = function(info) return E.db.bags[info[#info]] end,
set = function(info, value)
E.db.bags[info[#info]] = value
if not E.Bags.Initialized then return end
B:UpdateAllBagSlots()
end
},
questStarter = {
order = 2,
type = "color",
name = L["Quest Starter"],
disabled = function() return not E.db.bags.questItemColors end
},
questItem = {
order = 3,
type = "color",
name = L["ITEM_BIND_QUEST"],
disabled = function() return not E.db.bags.questItemColors end
}
}
}
}
},
bagBar = {
order = 6,
type = "group",
name = L["Bag-Bar"],
get = function(info) return E.db.bags.bagBar[info[#info]] end,
set = function(info, value) E.db.bags.bagBar[info[#info]] = value B:SizeAndPositionBagBar() end,
args = {
header = {
order = 1,
type = "header",
name = L["Bag-Bar"]
},
enable = {
order = 2,
type = "toggle",
name = L["Enable"],
desc = L["Enable/Disable the Bag-Bar."],
get = function(info) return E.private.bags.bagBar end,
set = function(info, value) E.private.bags.bagBar = value E:StaticPopup_Show("PRIVATE_RL") end
},
showBackdrop = {
order = 3,
type = "toggle",
name = L["Backdrop"],
disabled = function() return not E.private.bags.bagBar end
},
mouseover = {
order = 4,
type = "toggle",
name = L["Mouse Over"],
desc = L["The frame is not shown unless you mouse over the frame."],
disabled = function() return not E.private.bags.bagBar end
},
size = {
order = 5,
type = "range",
name = L["Button Size"],
desc = L["Set the size of your bag buttons."],
min = 24, max = 60, step = 1,
disabled = function() return not E.private.bags.bagBar end
},
spacing = {
order = 6,
type = "range",
name = L["Button Spacing"],
desc = L["The spacing between buttons."],
min = -1, max = 10, step = 1,
disabled = function() return not E.private.bags.bagBar end
},
backdropSpacing = {
order = 7,
type = "range",
name = L["Backdrop Spacing"],
desc = L["The spacing between the backdrop and the buttons."],
min = 0, max = 10, step = 1,
disabled = function() return not E.private.bags.bagBar end
},
sortDirection = {
order = 8,
type = "select",
name = L["Sort Direction"],
desc = L["The direction that the bag frames will grow from the anchor."],
values = {
["ASCENDING"] = L["Ascending"],
["DESCENDING"] = L["Descending"]
},
disabled = function() return not E.private.bags.bagBar end
},
growthDirection = {
order = 9,
type = "select",
name = L["Bar Direction"],
desc = L["The direction that the bag frames be (Horizontal or Vertical)."],
values = {
["VERTICAL"] = L["Vertical"],
["HORIZONTAL"] = L["Horizontal"]
},
disabled = function() return not E.private.bags.bagBar end
},
visibility = {
order = 10,
type = "input",
name = L["Visibility State"],
desc = L["This works like a macro, you can run different situations to get the actionbar to show/hide differently.\n Example: '[combat] show;hide'"],
width = "full",
multiline = true,
set = function(info, value)
if value and value:match("[\n\r]") then
value = value:gsub("[\n\r]","")
end
E.db.bags.bagBar.visibility = value
B:SizeAndPositionBagBar()
end,
disabled = function() return not E.private.bags.bagBar end
}
}
},
split = {
order = 7,
type = "group",
name = L["Split"],
get = function(info) return E.db.bags.split[info[#info]] end,
set = function(info, value) E.db.bags.split[info[#info]] = value B:UpdateAll() end,
disabled = function() return not E.Bags.Initialized end,
args = {
header = {
order = 1,
type = "header",
name = L["Split"]
},
bagSpacing = {
order = 2,
type = "range",
name = L["Bag Spacing"],
min = 0, max = 20, step = 1
},
player = {
order = 3,
type = "toggle",
name = L["Bag"],
set = function(info, value) E.db.bags.split[info[#info]] = value B:Layout() end
},
bank = {
order = 4,
type = "toggle",
name = L["Bank"],
set = function(info, value) E.db.bags.split[info[#info]] = value B:Layout(true) end
},
splitbags = {
order = 5,
type = "group",
name = L["PLAYER"],
get = function(info) return E.db.bags.split[info[#info]] end,
set = function(info, value) E.db.bags.split[info[#info]] = value B:Layout() end,
disabled = function() return not E.db.bags.split.player end,
guiInline = true,
args = {
bag1 = {
order = 2,
type = "toggle",
name = L["Bag 1"]
},
bag2 = {
order = 3,
type = "toggle",
name = L["Bag 2"]
},
bag3 = {
order = 4,
type = "toggle",
name = L["Bag 3"]
},
bag4 = {
order = 5,
type = "toggle",
name = L["Bag 4"]
}
}
},
splitbank = {
order = 6,
type = "group",
name = L["Bank"],
get = function(info) return E.db.bags.split[info[#info]] end,
set = function(info, value) E.db.bags.split[info[#info]] = value B:Layout(true) end,
disabled = function() return not E.db.bags.split.bank end,
guiInline = true,
args = {
bag5 = {
order = 2,
type = "toggle",
name = L["Bank 1"]
},
bag6 = {
order = 3,
type = "toggle",
name = L["Bank 2"]
},
bag7 = {
order = 4,
type = "toggle",
name = L["Bank 3"]
},
bag8 = {
order = 5,
type = "toggle",
name = L["Bank 4"]
},
bag9 = {
order = 6,
type = "toggle",
name = L["Bank 5"]
},
bag10 = {
order = 7,
type = "toggle",
name = L["Bank 6"]
},
bag11 = {
order = 8,
type = "toggle",
name = L["Bank 7"]
}
}
}
}
},
bagSortingGroup = {
order = 9,
type = "group",
name = L["Bag Sorting"],
disabled = function() return not E.Bags.Initialized end,
args = {
header = {
order = 1,
type = "header",
name = L["Bag Sorting"]
},
sortInverted = {
order = 2,
type = "toggle",
name = L["Sort Inverted"],
desc = L["Direction the bag sorting will use to allocate the items."]
},
spacer = {
order = 3,
type = "description",
name = " "
},
description = {
order = 4,
type = "description",
name = L["Here you can add items or search terms that you want to be excluded from sorting. To remove an item just click on its name in the list."]
},
addEntryGroup = {
order = 5,
type = "group",
name = L["Add Item or Search Syntax"],
guiInline = true,
args = {
addEntryProfile = {
order = 1,
type = "input",
name = L["Profile"],
desc = L["Add an item or search syntax to the ignored list. Items matching the search syntax will be ignored."],
get = function(info) return "" end,
set = function(info, value)
if value == "" or gsub(value, "%s+", "") == "" then return end --Don't allow empty entries
--Store by itemID if possible
local itemID = match(value, "item:(%d+)")
E.db.bags.ignoredItems[(itemID or value)] = value
end
},
spacer = {
order = 2,
type = "description",
name = " ",
width = "normal"
},
addEntryGlobal = {
order = 3,
type = "input",
name = L["Global"],
desc = L["Add an item or search syntax to the ignored list. Items matching the search syntax will be ignored."],
get = function(info) return "" end,
set = function(info, value)
if value == "" or gsub(value, "%s+", "") == "" then return end --Don't allow empty entries
--Store by itemID if possible
local itemID = match(value, "item:(%d+)")
E.global.bags.ignoredItems[(itemID or value)] = value
--Remove from profile list if we just added the same item to global list
if E.db.bags.ignoredItems[(itemID or value)] then
E.db.bags.ignoredItems[(itemID or value)] = nil
end
end
}
}
},
ignoredEntriesProfile = {
order = 6,
type = "multiselect",
name = L["Ignored Items and Search Syntax (Profile)"],
values = function() return E.db.bags.ignoredItems end,
get = function(info, value) return E.db.bags.ignoredItems[value] end,
set = function(info, value)
E.db.bags.ignoredItems[value] = nil
GameTooltip:Hide()--Make sure tooltip is properly hidden
end
},
ignoredEntriesGlobal = {
order = 7,
type = "multiselect",
name = L["Ignored Items and Search Syntax (Global)"],
values = function() return E.global.bags.ignoredItems end,
get = function(info, value) return E.global.bags.ignoredItems[value] end,
set = function(info, value)
E.global.bags.ignoredItems[value] = nil
GameTooltip:Hide()--Make sure tooltip is properly hidden
end
}
}
},
deconstructGroup = {
order = 10,
type = "group",
name = L["Deconstruct Mode"],
disabled = function() return not E.Bags.Initialized end,
args = {
header = {
order = 1,
type = "header",
name = L["Deconstruct Mode"]
},
description = {
order = 2,
type = "description",
name = L["Deconstruct Mode Desc"]
}
,deconstruct = {
order = 3,
type = "toggle",
name = L["Enable"],
set = function(info, value) E.db.bags[info[#info]] = value E:StaticPopup_Show("PRIVATE_RL") end
},
spacer = {
order = 4,
type = "description",
name = " "
},
deconstructBlacklistGroup = {
order = 5,
type = "group",
name = L["Deconstruct Blacklist"],
guiInline = true,
args = {
addEntryProfile = {
order = 1,
type = "input",
name = L["Profile"],
desc = L["Add an item or search syntax to the deconstruct blacklist."],
get = function(info) return "" end,
set = function(info, value)
if value == "" or gsub(value, "%s+", "") == "" then return end
local itemID = match(value, "item:(%d+)")
E.db.bags.deconstructBlacklist[(itemID or value)] = value
local D = B:GetModule("Deconstruct")
if D and D.BuildBlacklistDE then D:BuildBlacklistDE() end
end
},
spacer = {
order = 2,
type = "description",
name = " ",
width = "normal"
},
addEntryGlobal = {
order = 3,
type = "input",
name = L["Global"],
desc = L["Add an item or search syntax to the deconstruct blacklist."],
get = function(info) return "" end,
set = function(info, value)
if value == "" or gsub(value, "%s+", "") == "" then return end
local itemID = match(value, "item:(%d+)")
E.global.bags.deconstructBlacklist[(itemID or value)] = value
if E.db.bags.deconstructBlacklist[(itemID or value)] then
E.db.bags.deconstructBlacklist[(itemID or value)] = nil
end
local D = B:GetModule("Deconstruct")
if D and D.BuildBlacklistDE then D:BuildBlacklistDE() end
end
}
}
},
deconstructBlacklistProfile = {
order = 6,
type = "multiselect",
name = L["Deconstruct Blacklist (Profile)"],
values = function() return E.db.bags.deconstructBlacklist end,
get = function(info, value) return E.db.bags.deconstructBlacklist[value] end,
set = function(info, value)
E.db.bags.deconstructBlacklist[value] = nil
GameTooltip:Hide()
local D = B:GetModule("Deconstruct")
if D and D.BuildBlacklistDE then D:BuildBlacklistDE() end
end
},
deconstructBlacklistGlobal = {
order = 7,
type = "multiselect",
name = L["Deconstruct Blacklist (Global)"],
values = function() return E.global.bags.deconstructBlacklist end,
get = function(info, value) return E.global.bags.deconstructBlacklist[value] end,
set = function(info, value)
E.global.bags.deconstructBlacklist[value] = nil
GameTooltip:Hide()
local D = B:GetModule("Deconstruct")
if D and D.BuildBlacklistDE then D:BuildBlacklistDE() end
end
},
spacer2 = {
order = 8,
type = "description",
name = " "
},
lockBlacklistGroup = {
order = 9,
type = "group",
name = L["Lockbox Blacklist"],
guiInline = true,
args = {
addEntryProfile = {
order = 1,
type = "input",
name = L["Profile"],
desc = L["Add an item or search syntax to the lockbox blacklist."],
get = function(info) return "" end,
set = function(info, value)
if value == "" or gsub(value, "%s+", "") == "" then return end
local itemID = match(value, "item:(%d+)")
E.db.bags.lockBlacklist[(itemID or value)] = value
local D = B:GetModule("Deconstruct")
if D and D.BuildBlacklistLOCK then D:BuildBlacklistLOCK() end
end
},
spacer = {
order = 2,
type = "description",
name = " ",
width = "normal"
},
addEntryGlobal = {
order = 3,
type = "input",
name = L["Global"],
desc = L["Add an item or search syntax to the lockbox blacklist."],
get = function(info) return "" end,
set = function(info, value)
if value == "" or gsub(value, "%s+", "") == "" then return end
local itemID = match(value, "item:(%d+)")
E.global.bags.lockBlacklist[(itemID or value)] = value
if E.db.bags.lockBlacklist[(itemID or value)] then
E.db.bags.lockBlacklist[(itemID or value)] = nil
end
local D = B:GetModule("Deconstruct")
if D and D.BuildBlacklistLOCK then D:BuildBlacklistLOCK() end
end
}
}
},
lockBlacklistProfile = {
order = 10,
type = "multiselect",
name = L["Lockbox Blacklist (Profile)"],
values = function() return E.db.bags.lockBlacklist end,
get = function(info, value) return E.db.bags.lockBlacklist[value] end,
set = function(info, value)
E.db.bags.lockBlacklist[value] = nil
GameTooltip:Hide()
local D = B:GetModule("Deconstruct")
if D and D.BuildBlacklistLOCK then D:BuildBlacklistLOCK() end
end
},
lockBlacklistGlobal = {
order = 11,
type = "multiselect",
name = L["Lockbox Blacklist (Global)"],
values = function() return E.global.bags.lockBlacklist end,
get = function(info, value) return E.global.bags.lockBlacklist[value] end,
set = function(info, value)
E.global.bags.lockBlacklist[value] = nil
GameTooltip:Hide()
local D = B:GetModule("Deconstruct")
if D and D.BuildBlacklistLOCK then D:BuildBlacklistLOCK() end
end
}
}
},
search_syntax = {
order = 11,
type = "group",
name = L["Search Syntax"],
disabled = function() return not E.Bags.Initialized end,
args = {
header = {
order = 1,
type = "header",
name = L["Search Syntax"]
},
text = {
order = 2,
type = "input",
multiline = 26,
width = "full",
name = "",
get = function(info) return L["SEARCH_SYNTAX_DESC"] end,
set = E.noop
}
}
}
}
}