You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
185 lines
7.8 KiB
185 lines
7.8 KiB
|
1 year ago
|
|
||
|
|
local addonId, platerInternal = ...
|
||
|
|
|
||
|
|
local Plater = Plater
|
||
|
|
---@type detailsframework
|
||
|
|
local DF = DetailsFramework
|
||
|
|
local _
|
||
|
|
|
||
|
|
local TAB_INDEX_SEARCH = 26
|
||
|
|
|
||
|
|
function platerInternal.CreateSearchOptions()
|
||
|
|
local searchFrame = PlaterOptionsPanelContainerSearchFrame
|
||
|
|
local OTTFrame = PlaterNameplatesOverTheTopFrame
|
||
|
|
local mainFrame = PlaterOptionsPanelContainer
|
||
|
|
|
||
|
|
--before creating the search options, we need to create load all other tabs that has load on demand and did not load yet
|
||
|
|
searchFrame.TabsToLoad_Funtions = {}
|
||
|
|
local bHasLoadOnDemand = false
|
||
|
|
|
||
|
|
for tabName, bLoadState in pairs(platerInternal.LoadOnDemand_IsLoaded) do
|
||
|
|
if (not bLoadState) then
|
||
|
|
if (platerInternal.CreateSearchOptions ~= platerInternal.LoadOnDemand_LoadFunc[tabName]) then
|
||
|
|
table.insert(searchFrame.TabsToLoad_Funtions, platerInternal.LoadOnDemand_LoadFunc[tabName])
|
||
|
|
bHasLoadOnDemand = true
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
--check if there's any tab to load and if it's not already loading
|
||
|
|
if (bHasLoadOnDemand and not searchFrame.bIsLoadingOnDemand) then
|
||
|
|
searchFrame.bIsLoadingOnDemand = true
|
||
|
|
|
||
|
|
--execute the load function for each tab with a delay of 50ms
|
||
|
|
local totalTabsToLoad = #searchFrame.TabsToLoad_Funtions
|
||
|
|
for i = 1, totalTabsToLoad do
|
||
|
|
local func = searchFrame.TabsToLoad_Funtions[i]
|
||
|
|
if (i == 1) then
|
||
|
|
C_Timer.After(0, func)
|
||
|
|
else
|
||
|
|
C_Timer.After(0.05 * i, func)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
if (not searchFrame.TimeBar) then
|
||
|
|
local texture = [[Interface\AddOns\Plater\images\bar_skyline]]
|
||
|
|
local timeBar = DF:CreateTimeBar(searchFrame, texture, 500, 30, 0, "timeBarLoadOnDemand", "$parentLoadOnDemandTimeBar")
|
||
|
|
timeBar:SetPoint("center", 0, 0)
|
||
|
|
timeBar:SetHook("OnTimerEnd", function()
|
||
|
|
timeBar:Hide()
|
||
|
|
platerInternal.CreateSearchOptions()
|
||
|
|
end)
|
||
|
|
searchFrame.TimeBar = timeBar
|
||
|
|
end
|
||
|
|
|
||
|
|
searchFrame.TimeBar:SetTimer((totalTabsToLoad + 1) * 0.05)
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
if (bHasLoadOnDemand) then
|
||
|
|
--there still some tabs to load, wait for them to load
|
||
|
|
searchFrame.TimeBar:SetTimer(0.05)
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
--already loaded? return
|
||
|
|
if (platerInternal.LoadOnDemand_IsLoaded.SearchOptions) then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local startX, startY, heightSize = 10, platerInternal.optionsYStart, 755
|
||
|
|
local highlightColorLastCombat = {1, 1, .2, .25}
|
||
|
|
|
||
|
|
--templates
|
||
|
|
local options_text_template = DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE")
|
||
|
|
local options_dropdown_template = DF:GetTemplate ("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")
|
||
|
|
local options_switch_template = DF:GetTemplate ("switch", "OPTIONS_CHECKBOX_TEMPLATE")
|
||
|
|
local options_slider_template = DF:GetTemplate ("slider", "OPTIONS_SLIDER_TEMPLATE")
|
||
|
|
local options_button_template = DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE")
|
||
|
|
|
||
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
|
--~search panel
|
||
|
|
local searchBox = DF:CreateTextEntry (searchFrame, function()end, 156, 20, "serachTextEntry", _, _, DF:GetTemplate ("dropdown", "PLATER_DROPDOWN_OPTIONS"))
|
||
|
|
searchBox:SetAsSearchBox()
|
||
|
|
searchBox:SetJustifyH("left")
|
||
|
|
searchBox:SetPoint(10, -145)
|
||
|
|
|
||
|
|
--create a search box in the main tab
|
||
|
|
local mainSearchBox = DF:CreateTextEntry(OTTFrame, function()end, 156, 20, "mainSearchTextEntry", _, _, DF:GetTemplate("dropdown", "PLATER_DROPDOWN_OPTIONS"))
|
||
|
|
mainSearchBox:SetAsSearchBox()
|
||
|
|
mainSearchBox:SetJustifyH("left")
|
||
|
|
mainSearchBox:SetPoint("topright", -220, 0)
|
||
|
|
|
||
|
|
local optionsWildCardFrame = CreateFrame("frame", "$parentWildCardOptionsFrame", searchFrame, BackdropTemplateMixin and "BackdropTemplate")
|
||
|
|
optionsWildCardFrame:SetAllPoints()
|
||
|
|
|
||
|
|
--all settings tables
|
||
|
|
local allTabSettings = PlaterOptionsPanelFrame.AllSettingsTable
|
||
|
|
|
||
|
|
local allTabHeaders = { --~changeindex2
|
||
|
|
mainFrame.AllButtons [1].button.text:GetText(), -- general
|
||
|
|
mainFrame.AllButtons [2].button.text:GetText(), -- threat & aggro
|
||
|
|
mainFrame.AllButtons [3].button.text:GetText(), -- target
|
||
|
|
mainFrame.AllButtons [4].button.text:GetText(), -- cast bar
|
||
|
|
mainFrame.AllButtons [5].button.text:GetText(), -- level & strata
|
||
|
|
mainFrame.AllButtons [8].button.text:GetText(), -- personal bar
|
||
|
|
mainFrame.AllButtons [9].button.text:GetText(), -- buff settings
|
||
|
|
--10 aura filter
|
||
|
|
mainFrame.AllButtons [11].button.text:GetText(), -- buff special
|
||
|
|
--mainFrame.AllButtons [12].button.text:GetText(), -- ghost auras
|
||
|
|
mainFrame.AllButtons [13].button.text:GetText(), -- enemy npc
|
||
|
|
mainFrame.AllButtons [14].button.text:GetText(), -- enemy player
|
||
|
|
mainFrame.AllButtons [15].button.text:GetText(), -- friendly npc
|
||
|
|
mainFrame.AllButtons [16].button.text:GetText(), -- friendly player
|
||
|
|
--17 18 19 has no options (npc colors, cast colors, aura list)
|
||
|
|
--mainFrame.AllButtons [20].button.text:GetText(), -- spell feedback (animations)
|
||
|
|
mainFrame.AllButtons [21].button.text:GetText(), -- auto
|
||
|
|
--22 profiles
|
||
|
|
mainFrame.AllButtons [23].button.text:GetText(), -- advanced
|
||
|
|
--mainFrame.AllButtons [24].button.text:GetText(), -- resources
|
||
|
|
--25 search
|
||
|
|
}
|
||
|
|
|
||
|
|
--this table will hold all options
|
||
|
|
local allOptions = {}
|
||
|
|
--start the fill process filling 'allOptions' with each individual option from each tab
|
||
|
|
for i = 1, #allTabSettings do
|
||
|
|
local tabSettings = allTabSettings[i]
|
||
|
|
local lastLabel = nil
|
||
|
|
for k, setting in pairs(tabSettings) do
|
||
|
|
if (type(setting) == "table") then
|
||
|
|
if (setting.type == "label") then
|
||
|
|
lastLabel = setting
|
||
|
|
end
|
||
|
|
if (setting.name) then
|
||
|
|
allOptions[#allOptions+1] = {setting = setting, label = lastLabel, header = allTabHeaders[i] }
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
searchBox:SetHook("OnEnterPressed", function(self)
|
||
|
|
local options = {}
|
||
|
|
|
||
|
|
local searchingText = string.lower(searchBox.text)
|
||
|
|
searchBox:SetFocus(false)
|
||
|
|
|
||
|
|
local lastTab = nil
|
||
|
|
local lastLabel = nil
|
||
|
|
if searchingText and searchingText ~= "" then
|
||
|
|
for i = 1, #allOptions do
|
||
|
|
local optionData = allOptions[i]
|
||
|
|
local optionName = string.lower(optionData.setting.name)
|
||
|
|
if (optionName:find(searchingText)) then
|
||
|
|
if optionData.header ~= lastTab then
|
||
|
|
if lastTab ~= nil then
|
||
|
|
options[#options+1] = {type = "label", get = function() return "" end, text_template = DF:GetTemplate("font", "OPTIONS_FONT_TEMPLATE")} -- blank
|
||
|
|
end
|
||
|
|
options[#options+1] = {type = "label", get = function() return optionData.header end, text_template = {color = "gold", size = 14, font = DF:GetBestFontForLanguage()}}
|
||
|
|
lastTab = optionData.header
|
||
|
|
lastLabel = nil
|
||
|
|
end
|
||
|
|
if optionData.label ~= lastLabel then
|
||
|
|
options[#options+1] = optionData.label
|
||
|
|
lastLabel = optionData.label
|
||
|
|
end
|
||
|
|
options[#options+1] = optionData.setting
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
options.always_boxfirst = true
|
||
|
|
options.language_addonId = addonId
|
||
|
|
options.Name = "Plater Search Options"
|
||
|
|
DF:BuildMenuVolatile(searchFrame, options, startX, startY-30, heightSize+40, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template, platerInternal.OptionsGlobalCallback)
|
||
|
|
end)
|
||
|
|
|
||
|
|
mainSearchBox:SetHook("OnEnterPressed", function(self)
|
||
|
|
local searchText = mainSearchBox.text
|
||
|
|
searchBox:SetText(searchText)
|
||
|
|
searchBox:RunHooksForWidget("OnEnterPressed")
|
||
|
|
_G["PlaterOptionsPanelContainer"]:SelectTabByIndex(TAB_INDEX_SEARCH)
|
||
|
|
end)
|
||
|
|
|
||
|
|
platerInternal.LoadOnDemand_IsLoaded.SearchOptions = true
|
||
|
|
end
|