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 }, deconstruct = { order = 16, type = "toggle", name = L["Deconstruct Mode"], desc = L["Deconstruct Mode Desc"], set = function(info, value) E.db.bags[info[#info]] = value E:StaticPopup_Show("PRIVATE_RL") 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 } } }, search_syntax = { order = 10, 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 } } } } }