local task = LibStub("LibAsync"):Create("FurnitureCatalogue_Settings") local p = FurC.DebugOut -- debug function calling zo_strformat with up to 10 args function FurC.GetDontScanTradingHouse() return FurC.settings["dontScanTradingHouse"] end function FurC.SetDontScanTradingHouse(value) FurC.settings["dontScanTradingHouse"] = value end function FurC.GetEnableDebug() return FurC.settings["enableDebug"] end function FurC.SetEnableDebug(value) FurC.settings["enableDebug"] = value end function FurC.GetHideRumourRecipes() return FurC.settings["hideDoubtfuls"] end function FurC.SetHideRumourRecipes(value) FurC.settings["hideDoubtfuls"] = value FurC.updateDropdownData() FurC.UpdateGui() end function FurC.GetHideCrownStoreItems() return FurC.settings["hideCrownstore"] end function FurC.SetHideCrownStoreItems(value) FurC.settings["hideCrownstore"] = value FurC.updateDropdownData() FurC.UpdateGui() end function FurC.GetHideRumourRecipesEntry() return FurC.settings["hideRumourEntry"] end function FurC.SetHideRumourRecipesEntry(value) FurC.settings["hideRumourEntry"] = value FurC.updateDropdownData() FurC.UpdateGui() end function FurC.GetHideCrownStoreEntry() return FurC.settings["hideCrownStoreEntry"] end function FurC.SetHideCrownStoreEntry(value) FurC.settings["hideCrownStoreEntry"] = value FurC.updateDropdownData() FurC.UpdateGui() end function FurC.GetFilterAllOnText() return FurC.settings["filterAllOnText"] end function FurC.SetFilterAllOnText(value) FurC.settings["filterAllOnText"] = value FurC.UpdateGui() end function FurC.GetFilterAllOnTextNoRumour() return FurC.settings["filterAllOnTextNoRumour"] end function FurC.GetFilterAllOnTextNoRumour(value) FurC.settings["filterAllOnTextNoRumour"] = value FurC.UpdateGui() end function FurC.GetFilterAllOnTextNoBooks() return FurC.settings["filterAllOnTextNoBooks"] end function FurC.GetFilterAllOnTextNoBooks(value) FurC.settings["filterAllOnTextNoBooks"] = value FurC.UpdateGui() end function FurC.GetFilterAllOnTextNoCrown() return FurC.settings["filterAllOnTextNoCrown"] end function FurC.GetFilterAllOnTextNoCrown(value) FurC.settings["filterAllOnTextNoCrown"] = value FurC.UpdateGui() end function FurC.GetFontSize() if FurC.settings["fontSize"] < 10 then FurC.settings["fontSize"] = 10 end return FurC.settings["fontSize"] end function FurC.SetFontSize(value) if nil == value then value = FurC.GetFontSize() end if value == 0 then value = 18 end FurC.settings["fontSize"] = value local size = tostring(value) FurC.SetLineHeight() task:Call(function() FurC.UpdateGui() end) end --------------------------- --------- Tooltip --------- --------------------------- function FurC.GetDisableTooltips() return FurC.settings["disableTooltips"] end function FurC.SetDisableTooltips(value) FurC.settings["disableTooltips"] = value end function FurC.GetColouredTooltips() return FurC.settings["coloredTooltips"] end function FurC.SetColouredTooltips(value) FurC.settings["coloredTooltips"] = value end function FurC.GetHideKnowledge() return FurC.settings["hideKnowledge"] end function FurC.SetHideKnowledge(value) FurC.settings["hideKnowledge"] = value end function FurC.GetHideUnknown() return FurC.settings["hideUnknown"] end function FurC.SetHideUnknown(value) FurC.settings["hideUnknown"] = value end function FurC.GetHideMats() return FurC.settings["hideMats"] end function FurC.SetHideMats(value) FurC.settings["hideMats"] = value end function FurC.GetHideSource() return FurC.settings["hideSource"] end function FurC.SetHideSource(value) FurC.settings["hideSource"] = value end function FurC.GetHideCraftingStation() return FurC.settings["hideCraftingStation"] end function FurC.SetHideCraftingStation(value) FurC.settings["hideCraftingStation"] = value end function FurC.GetEnableShoppingList() return FurC.settings["enableShoppingList"] end function FurC.SetEnableShoppingList(value) FurC.settings["enableShoppingList"] = value end --------------------------- -------- /Tooltip --------- --------------------------- --------------------------- --------- Filters --------- --------------------------- local function containsTrue(ary) for key, value in pairs(ary) do if value then return true end end end function FurC.GetFilterQuality() return FurC.settings.filterQuality end function FurC.SetFilterQuality(quality) local controls = FurC.GuiElements.qualityButtons local filterArray = FurC.settings.filterQuality quality = quality or 0 if quality == 0 then for key, value in pairs (filterArray) do FurC.settings.filterQuality[key] = false end else filterArray[quality] = not filterArray[quality] end FurC.settings.filterQualityAll = not containsTrue(filterArray) for key, control in pairs (controls) do control:SetState((filterArray[key-1] and BSTATE_PRESSED) or BSTATE_NORMAL) end FurC.GuiOnScroll(nil, 0) FurC.SetFilter() FurC.UpdateGui() end function FurC.GetFilterCraftingType() return FurC.settings.filterCraftingType end function FurC.SetFilterCraftingType(craftingType) local controls = FurC.GuiElements.craftingTypeFilters local filterArray = FurC.settings.filterCraftingType if craftingType == 0 then for key, value in pairs (filterArray) do filterArray[key] = false end else filterArray[craftingType] = not filterArray[craftingType] end FurC.settings.filterCraftingTypeAll = not containsTrue(filterArray) for key, control in pairs (controls) do control:SetState((filterArray[key] and BSTATE_PRESSED) or BSTATE_NORMAL) end FurC.GuiOnScroll(FurCGui_ListHolder_Slider, 0) FurC.SetFilter() FurC.UpdateGui() end function FurC.GetSearchFilter() if (not FurC.SearchFilter) or FurC.SearchFilter == "Filter by text search" then FurC.SearchFilter = FurC_SearchBox:GetText() or "" end return FurC.SearchFilter or "" end function FurC.GuiSetSearchboxTextFrom(control) -- call asynchronely to prevent lagging. Praise votan. task:Call(function() local text = control:GetText() control:GetNamedChild("Text"):SetText((text == "" and "Filter by text search") or "") FurC.SearchFilter = text FurC.GuiOnSliderUpdate(FurCGui_ListHolder_Slider, 0) FurC.UpdateGui() end) end function FurC.GetHideBooks() return FurC.settings["hideBooks"] end function FurC.SetHideBooks(value) FurC.settings["hideBooks"] = value FurC.UpdateGui() end function FurC.GetMergeLuxuryAndSales() return FurC.settings["mergeLuxuryAndSales"] end function FurC.SetMergeLuxuryAndSales(value) FurC.settings["mergeLuxuryAndSales"] = value FurC.UpdateGui() end --------------------------- --------- Dropdown -------- --------------------------- FurC.DropdownChoices = { ["Source"] = nil, ["Version"] = nil, ["Character"] = nil, } function FurC.GetDropdownChoice(dropdownName) return (FurC.DropdownChoices[dropdownName] or FurC.GetDefaultDropdownChoice(dropdownName)) end function FurC.GetDropdownText(dropdownName) local dropdown = FurC.DropdownData[dropdownName] local key = FurC.GetDropdownChoice(dropdownName) return dropdown[key] end local function getDropdownIndex(dropdownName, value) local dropdown = FurC.DropdownData["Choices"..dropdownName] for listKey, listValue in pairs(dropdown) do if listValue == value then return listKey end end dropdown[#dropdown+1] = value return #dropdown end local dropdownData = FurC.DropdownData -- Source: All, All (craftable), Craftable (known), craftable (unknown), purchaseable -- Character: Accountwide, crafter1, crafter2... -- Version: All, Homestead, Morrowind function FurC.SetDropdownChoice(dropdownName, textValue, dropdownIndex) textValue = textValue or FurC.GetDefaultDropdownChoice(dropdownName) local dropdownIndex = dropdownIndex or getDropdownIndex(dropdownName, textValue) or 0 -- p("FurC.SetDropdownChoice(<<1>>, <<2>> (Index: <<3>>))", dropdownName, textValue, dropdownIndex) -- if we're setting the dropdown menu "source" to "purchaseable", set "character" to "All" FurC.DropdownChoices[dropdownName] = dropdownIndex if dropdownName == "Source" then if dropdownIndex > FURC_CRAFTING_UNKNOWN or dropdownIndex < FURC_CRAFTING then FurC.DropdownChoices["Character"] = 1 FurC_DropdownCharacter:GetNamedChild("SelectedItemText"):SetText(FurnitureCatalogue.DropdownData.ChoicesCharacter[1]) end end -- if we're setting the characters array to something other than 1, we can't use source 1 or 5 if dropdownName == "Character" and (dropdownIndex > 1) then if FurC.DropdownChoices["Source"] > FURC_CRAFTING_UNKNOWN or FurC.DropdownChoices["Source"] < FURC_CRAFTING then local knownIndex = FURC_CRAFTING_KNOWN FurC.DropdownChoices["Source"] = knownIndex FurC_DropdownSource:GetNamedChild("SelectedItemText"):SetText(FurnitureCatalogue.DropdownData.ChoicesSource[knownIndex]) end end FurC.DropdownChoices[dropdownName] = dropdownIndex zo_callLater(function() FurC.UpdateGui() end, 500) end function FurC.GetDefaultDropdownChoiceText(dropdownName) return FurC.DropdownData["Choices"..dropdownName][FurC.GetDefaultDropdownChoice(dropdownName)] end function FurC.GetDefaultDropdownChoice(dropdownName) return FurC.settings.dropdownDefaults[dropdownName] end function FurC.SetDefaultDropdownChoice(dropdownName, value) local dropdownIndex = getDropdownIndex(dropdownName, value) local dropdown = FurC.DropdownData["Choices"..dropdownName] FurC.settings.dropdownDefaults[dropdownName] = dropdownIndex -- FurC.UpdateDropdownChoice(dropdownName, value, dropdownIndex) -- FurC.UpdateGui() end function FurC.GetResetDropdownChoice() return FurC.settings["resetDropdownChoice"] end function FurC.SetResetDropdownChoice(value) FurC.settings["resetDropdownChoice"] = value end function FurC.GetDropdownChoiceTextual(dropdownName) local value = FurC.GetDropdownChoice(dropdownName) local dropdown = FurC.DropdownData["Choices"..dropdownName] return FurC.DropdownData["Choices"..dropdownName][value] end function FurC.GetDefaultDropdownChoiceTextual() return FurC.DropdownData["Choices"..dropdownName][FurC.GetDefaultDropdownChoice(dropdownName)] end function FurC.GetAccountCrafters() local ret = {} for characterName, isCrafter in pairs(FurC.settings.accountCharacters) do if isCrafter then table.insert(ret, characterName) end end return ret end function FurC.GetAccountCharacters() local ret = {} for characterName, isCrafter in pairs(FurC.settings.accountCharacters) do table.insert(ret, characterName) end return ret end function FurC.GetSkipInitialScan() return FurC.settings["skipInitialScan"] end function FurC.SetSkipInitialScan(value) FurC.settings["skipInitialScan"] = value end --------------------------- -------- /Dropdown -------- -------- /Filters -------- --------------------------- function FurC.GetUseInventoryIcons() return FurC.settings["useInventoryIcons"] end function FurC.SetUseInventoryIcons(value) FurC.settings["useInventoryIcons"] = value end function FurC.GetUseInventoryIconsOnChar() return FurC.settings["useInventoryIconsOnChar"] end function FurC.SetUseInventoryIconsOnChar(value) FurC.settings["useInventoryIconsOnChar"] = value end function FurC.GetHideKnownInventoryIcons() return FurC.settings["hideKnownInventoryIcons"] end function FurC.SetHideKnownInventoryIcons(value) FurC.settings["hideKnownInventoryIcons"] = value end function FurC.GetStartupSilently() return FurC.settings["startupSilently"] end function FurC.SetStartupSilently(value) FurC.settings["startupSilently"] = value; end function FurC.GetTinyUi() return FurC.settings["useTinyUi"] end function FurC.SetTinyUi(value) FurC.settings["useTinyUi"] = value FurC.SlotTemplate = "FurC_SlotTemplate" .. ((value and "Tiny") or "") FurC.ApplyLineTemplate() end function FurC.GetListOffset() return FurC.ListOffset or 0 end function FurC.SetListOffset(value) FurC.ListOffset = value end function FurC.WipeDatabase() d("|cFFFFFFresetting |r|c2266ffFurniture Catalogue |r|cFFFFFFdata...|r") FurC.settings.data = {} FurC.settings.accountCharacters = {} FurC.settings.excelExport = {} FurC.ScanRecipes(true, true) -- d("FurnitureCatalogue: Scan complete") end function FurC.DeleteCharacter(characterName) d("Now deleting recipe knowledge for " .. characterName) for key, value in pairs(FurC.settings.accountCharacters) do if value == characterName then FurC.settings.accountCharacters[key] = false end end for recipeKey, recipeArray in pairs(FurC.settings.data) do if recipeArray.craftable then recipeArray.characters[characterName] = nil end end local guiDropdownEntries = FurC_Dropdown.comboBox.m_sortedItems if nil == guiDropdownEntries then return end for index, data in pairs(guiDropdownEntries) do if data.name == characterName then FurC_Dropdown.comboBox.m_sortedItems[index] = nil return end end d(zo_strformat("<<1>> deleted from |c2266ffFurniture Catalogue|r database. Entry will disappear from settings dropdown after the next reloadui.", characterName)) end function FurC.GetCurrentCharacterName() if nil == FurC.CharacterName then FurC.CharacterName = zo_strformat(GetUnitName('player')) end return FurC.CharacterName end