Version Bump and Framework Update
This commit is contained in:
@@ -424,6 +424,7 @@
|
||||
---@field grupo boolean
|
||||
---@field fight_component boolean
|
||||
---@field boss_fight_component boolean
|
||||
---@field pvp_component boolean
|
||||
---@field boss boolean
|
||||
---@field last_event unixtime
|
||||
---@field total_without_pet number
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
|
||||
|
||||
local dversion = 429
|
||||
local dversion = 430
|
||||
local major, minor = "DetailsFramework-1.0", dversion
|
||||
local DF, oldminor = LibStub:NewLibrary(major, minor)
|
||||
|
||||
|
||||
+40
-8
@@ -11,13 +11,16 @@ local geterrorhandler = geterrorhandler
|
||||
local wipe = wipe
|
||||
|
||||
--definitions
|
||||
|
||||
---@class df_headercolumndata : {key: string, name: string, icon: string, texcoord: table, text: string, canSort: boolean, selected: boolean, width: number, height: number, align: string, offset: number}
|
||||
|
||||
---@class df_headerchild : uiobject
|
||||
---@field FramesToAlign table
|
||||
|
||||
---@class df_headerframe : frame, df_headermixin, df_optionsmixin
|
||||
---@field columnHeadersCreated df_headercolumnframe[]
|
||||
---@field options table
|
||||
---@field HeaderTable table
|
||||
---@field HeaderTable df_headercolumndata[]
|
||||
---@field columnSelected number
|
||||
|
||||
---@class df_headermixin : table
|
||||
@@ -25,8 +28,8 @@ local wipe = wipe
|
||||
---@field HeaderWidth number
|
||||
---@field HeaderHeight number
|
||||
---@field OnColumnSettingChangeCallback function
|
||||
---@field GetColumnWidth fun(self: df_headerframe, columnId: number)
|
||||
---@field SetHeaderTable fun(self: df_headerframe, newTable)
|
||||
---@field GetColumnWidth fun(self: df_headerframe, columnId: number) : number
|
||||
---@field SetHeaderTable fun(self: df_headerframe, table)
|
||||
---@field GetSelectedColumn fun(self: df_headerframe) : number, string, string, string
|
||||
---@field Refresh fun(self: df_headerframe)
|
||||
---@field UpdateSortArrow fun(self: df_headerframe, columnHeader: df_headercolumnframe, defaultShown: boolean|nil, defaultOrder: string|nil)
|
||||
@@ -127,8 +130,8 @@ detailsFramework.HeaderFunctions = {
|
||||
---@param buttonClicked string
|
||||
OnClick = function(columnHeader, buttonClicked)
|
||||
--get the header main frame
|
||||
---@type df_headerframe
|
||||
local headerFrame = columnHeader:GetParent()
|
||||
---@cast headerFrame df_headerframe
|
||||
|
||||
--if this header does not have a clickable header, just ignore
|
||||
if (not headerFrame.columnSelected) then
|
||||
@@ -352,7 +355,6 @@ detailsFramework.HeaderMixin = {
|
||||
UpdateColumnHeader = function(self, columnHeader, headerIndex)
|
||||
--this is the data to update the columnHeader
|
||||
local columnData = self.HeaderTable[headerIndex]
|
||||
|
||||
columnHeader.key = columnData.key or "total"
|
||||
|
||||
if (columnData.icon) then
|
||||
@@ -417,7 +419,7 @@ detailsFramework.HeaderMixin = {
|
||||
|
||||
columnHeader.XPosition = self.HeaderWidth -- + self.options.padding
|
||||
columnHeader.YPosition = self.HeaderHeight -- + self.options.padding
|
||||
|
||||
|
||||
columnHeader.columnAlign = columnData.align or "left"
|
||||
columnHeader.columnOffset = columnData.offset or 0
|
||||
|
||||
@@ -589,6 +591,7 @@ detailsFramework.HeaderMixin = {
|
||||
HeaderHeight = 0,
|
||||
}
|
||||
|
||||
--default options
|
||||
local default_header_options = {
|
||||
backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true},
|
||||
backdrop_color = {0, 0, 0, 0.2},
|
||||
@@ -629,13 +632,17 @@ local default_header_options = {
|
||||
line_separator_gap_align = false,
|
||||
}
|
||||
|
||||
---create a header frame
|
||||
---create a df_headerframe, alias 'header'.
|
||||
---a header is a frame that can hold multiple columns which are also frames, each column is a df_headercolumnframe, these columns are arranged in horizontal form.
|
||||
---a header is used to organize columns giving them a name/title, a way to sort and align them.
|
||||
---each column is placed on the right side of the previous column.
|
||||
---@param parent frame
|
||||
---@param headerTable table
|
||||
---@param options table|nil
|
||||
---@param frameName string|nil
|
||||
---@return df_headerframe
|
||||
function detailsFramework:CreateHeader(parent, headerTable, options, frameName)
|
||||
---create the header frame which is returned by this function
|
||||
---@type df_headerframe
|
||||
local newHeader = CreateFrame("frame", frameName or "$parentHeaderLine", parent, "BackdropTemplate")
|
||||
|
||||
@@ -644,6 +651,7 @@ function detailsFramework:CreateHeader(parent, headerTable, options, frameName)
|
||||
|
||||
newHeader:BuildOptionsTable(default_header_options, options)
|
||||
|
||||
--set the backdrop and backdrop color following the values in the options table
|
||||
newHeader:SetBackdrop(newHeader.options.backdrop)
|
||||
newHeader:SetBackdropColor(unpack(newHeader.options.backdrop_color))
|
||||
newHeader:SetBackdropBorderColor(unpack(newHeader.options.backdrop_border_color))
|
||||
@@ -651,4 +659,28 @@ function detailsFramework:CreateHeader(parent, headerTable, options, frameName)
|
||||
newHeader:SetHeaderTable(headerTable)
|
||||
|
||||
return newHeader
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--[=[example:
|
||||
C_Timer.After(1, function()
|
||||
|
||||
|
||||
local parent = UIParent
|
||||
|
||||
--declare the columns the headerFrame will have
|
||||
---@type df_headercolumndata[]
|
||||
local headerTable = {
|
||||
{name = "playername", text = "Player Name", width = 120, align = "left", canSort = true},
|
||||
{name = "damage", text = "Damage Done", width = 80, align = "right", canSort = true},
|
||||
{name = "points", text = "Total Points", width = 80, align = "right", canSort = false},
|
||||
}
|
||||
local frameName = "MyAddOnOptionsFrame"
|
||||
local options = {}
|
||||
|
||||
local headerFrame = DetailsFramework:CreateHeader(parent, headerTable, options, frameName)
|
||||
headerFrame:SetPoint("center", parent, "center", 10, -10)
|
||||
|
||||
|
||||
end)
|
||||
--]=]
|
||||
@@ -34,4 +34,5 @@
|
||||
|
||||
<Script file="pictureedit.lua"/>
|
||||
<Script file="auras.lua"/>
|
||||
<Script file="tabcontainer.lua"/>
|
||||
</Ui>
|
||||
|
||||
+24
-237
@@ -1976,37 +1976,50 @@ local no_options = {}
|
||||
---UseStatusBar = false, --if true, creates a status bar at the bottom of the frame (frame.StatusBar)
|
||||
---NoCloseButton = false, --if true, won't show the close button
|
||||
---NoTitleBar = false, --if true, don't create the title bar
|
||||
---@param parent table
|
||||
---@param width number|nil
|
||||
---@param height number|nil
|
||||
---@param title string|nil
|
||||
---@param frameName string|nil
|
||||
---@param panelOptions table|nil
|
||||
---@param savedVariableTable table|nil
|
||||
---@return table
|
||||
---@class simplepanel
|
||||
---@field TitleBar frame
|
||||
---@field Title fontstring
|
||||
---@field Close button
|
||||
---@field SetTitle fun(self: simplepanel, title: string)
|
||||
---@param parent frame the parent frame
|
||||
---@param width number|nil the width of the panel
|
||||
---@param height number|nil the height of the panel
|
||||
---@param title string|nil a string to show in the title bar
|
||||
---@param frameName string|nil the name of the frame
|
||||
---@param panelOptions table|nil a table with options described above
|
||||
---@param savedVariableTable table|nil a table to save the scale of the panel
|
||||
---@return frame
|
||||
function detailsFramework:CreateSimplePanel(parent, width, height, title, frameName, panelOptions, savedVariableTable)
|
||||
--create a saved variable table if the savedVariableTable has been not passed within the function call
|
||||
if (savedVariableTable and frameName and not savedVariableTable[frameName]) then
|
||||
savedVariableTable[frameName] = {
|
||||
scale = 1
|
||||
}
|
||||
end
|
||||
|
||||
--create a frame name if the frameName has been not passed within the function call
|
||||
if (not frameName) then
|
||||
frameName = "DetailsFrameworkSimplePanel" .. detailsFramework.SimplePanelCounter
|
||||
detailsFramework.SimplePanelCounter = detailsFramework.SimplePanelCounter + 1
|
||||
end
|
||||
|
||||
--default parent is UIParent
|
||||
if (not parent) then
|
||||
parent = UIParent
|
||||
parent = _G["UIParent"]
|
||||
end
|
||||
|
||||
--default options
|
||||
panelOptions = panelOptions or no_options
|
||||
|
||||
local simplePanel = CreateFrame("frame", frameName, UIParent,"BackdropTemplate")
|
||||
--create the frame
|
||||
local simplePanel = CreateFrame("frame", frameName, _G["UIParent"],"BackdropTemplate")
|
||||
simplePanel:SetSize(width or 400, height or 250)
|
||||
simplePanel:SetPoint("center", UIParent, "center", 0, 0)
|
||||
simplePanel:SetPoint("center", _G["UIParent"], "center", 0, 0)
|
||||
simplePanel:SetFrameStrata("FULLSCREEN")
|
||||
simplePanel:EnableMouse()
|
||||
simplePanel:SetMovable(true)
|
||||
|
||||
--set the backdrop
|
||||
simplePanel:SetBackdrop(SimplePanel_frame_backdrop)
|
||||
simplePanel:SetBackdropColor(unpack(SimplePanel_frame_backdrop_color))
|
||||
simplePanel:SetBackdropBorderColor(unpack(SimplePanel_frame_backdrop_border_color))
|
||||
@@ -3418,232 +3431,6 @@ function detailsFramework:FindHighestParent(self)
|
||||
return highestParent
|
||||
end
|
||||
|
||||
detailsFramework.TabContainerFunctions = {}
|
||||
|
||||
local button_tab_template = detailsFramework.table.copy({}, detailsFramework:GetTemplate("button", "OPTIONS_BUTTON_TEMPLATE"))
|
||||
button_tab_template.backdropbordercolor = nil
|
||||
|
||||
detailsFramework.TabContainerFunctions.CreateUnderlineGlow = function(button)
|
||||
local selectedGlow = button:CreateTexture(nil, "background", nil, -4)
|
||||
selectedGlow:SetPoint("topleft", button.widget, "bottomleft", -7, 0)
|
||||
selectedGlow:SetPoint("topright", button.widget, "bottomright", 7, 0)
|
||||
selectedGlow:SetTexture([[Interface\BUTTONS\UI-Panel-Button-Glow]])
|
||||
selectedGlow:SetTexCoord(0, 95/128, 30/64, 38/64)
|
||||
selectedGlow:SetBlendMode("ADD")
|
||||
selectedGlow:SetHeight(8)
|
||||
selectedGlow:SetAlpha(.75)
|
||||
selectedGlow:Hide()
|
||||
button.selectedUnderlineGlow = selectedGlow
|
||||
end
|
||||
|
||||
detailsFramework.TabContainerFunctions.OnMouseDown = function(self, button)
|
||||
--search for UIParent
|
||||
local f = detailsFramework:FindHighestParent (self)
|
||||
local container = self:GetParent()
|
||||
|
||||
if (button == "LeftButton") then
|
||||
if (not f.IsMoving and f:IsMovable()) then
|
||||
f:StartMoving()
|
||||
f.IsMoving = true
|
||||
end
|
||||
elseif (button == "RightButton") then
|
||||
if (not f.IsMoving and container.IsContainer) then
|
||||
if (self.IsFrontPage) then
|
||||
if (container.CanCloseWithRightClick) then
|
||||
if (f.CloseFunction) then
|
||||
f:CloseFunction()
|
||||
else
|
||||
f:Hide()
|
||||
end
|
||||
end
|
||||
else
|
||||
--goes back to front page
|
||||
detailsFramework.TabContainerFunctions.SelectIndex (self, _, 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
detailsFramework.TabContainerFunctions.OnMouseUp = function(self, button)
|
||||
local f = detailsFramework:FindHighestParent (self)
|
||||
if (f.IsMoving) then
|
||||
f:StopMovingOrSizing()
|
||||
f.IsMoving = false
|
||||
end
|
||||
end
|
||||
|
||||
detailsFramework.TabContainerFunctions.SelectIndex = function(self, fixedParam, menuIndex)
|
||||
local mainFrame = self.AllFrames and self or self.mainFrame or self:GetParent()
|
||||
|
||||
for i = 1, #mainFrame.AllFrames do
|
||||
mainFrame.AllFrames[i]:Hide()
|
||||
if (mainFrame.ButtonNotSelectedBorderColor) then
|
||||
mainFrame.AllButtons[i]:SetBackdropBorderColor(unpack(mainFrame.ButtonNotSelectedBorderColor))
|
||||
end
|
||||
if (mainFrame.AllButtons[i].selectedUnderlineGlow) then
|
||||
mainFrame.AllButtons[i].selectedUnderlineGlow:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
mainFrame.AllFrames[menuIndex]:Show()
|
||||
if mainFrame.AllFrames[menuIndex].RefreshOptions then
|
||||
mainFrame.AllFrames[menuIndex]:RefreshOptions()
|
||||
end
|
||||
if (mainFrame.ButtonSelectedBorderColor) then
|
||||
mainFrame.AllButtons[menuIndex]:SetBackdropBorderColor(unpack(mainFrame.ButtonSelectedBorderColor))
|
||||
end
|
||||
if (mainFrame.AllButtons[menuIndex].selectedUnderlineGlow) then
|
||||
mainFrame.AllButtons[menuIndex].selectedUnderlineGlow:Show()
|
||||
end
|
||||
mainFrame.CurrentIndex = menuIndex
|
||||
|
||||
if (mainFrame.hookList.OnSelectIndex) then
|
||||
detailsFramework:QuickDispatch(mainFrame.hookList.OnSelectIndex, mainFrame, mainFrame.AllButtons[menuIndex])
|
||||
end
|
||||
end
|
||||
|
||||
detailsFramework.TabContainerFunctions.SetIndex = function(self, index)
|
||||
self.CurrentIndex = index
|
||||
end
|
||||
|
||||
local tab_container_on_show = function(self)
|
||||
local index = self.CurrentIndex
|
||||
self.SelectIndex (self.AllButtons[index], nil, index)
|
||||
end
|
||||
|
||||
function detailsFramework:CreateTabContainer (parent, title, frameName, frameList, optionsTable, hookList, languageInfo)
|
||||
local options_text_template = detailsFramework:GetTemplate("font", "OPTIONS_FONT_TEMPLATE")
|
||||
local options_dropdown_template = detailsFramework:GetTemplate("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")
|
||||
local options_switch_template = detailsFramework:GetTemplate("switch", "OPTIONS_CHECKBOX_TEMPLATE")
|
||||
local options_slider_template = detailsFramework:GetTemplate("slider", "OPTIONS_SLIDER_TEMPLATE")
|
||||
local options_button_template = detailsFramework:GetTemplate("button", "OPTIONS_BUTTON_TEMPLATE")
|
||||
|
||||
optionsTable = optionsTable or {}
|
||||
local parentFrameWidth = parent:GetWidth()
|
||||
local y_offset = optionsTable.y_offset or 0
|
||||
local buttonWidth = optionsTable.button_width or 160
|
||||
local buttonHeight = optionsTable.button_height or 20
|
||||
local buttonAnchorX = optionsTable.button_x or 230
|
||||
local buttonAnchorY = optionsTable.button_y or -32
|
||||
local button_text_size = optionsTable.button_text_size or 10
|
||||
local containerWidthOffset = optionsTable.container_width_offset or 0
|
||||
|
||||
local mainFrame = CreateFrame("frame", frameName, parent.widget or parent, "BackdropTemplate")
|
||||
mainFrame:SetAllPoints()
|
||||
detailsFramework:Mixin(mainFrame, detailsFramework.TabContainerFunctions)
|
||||
mainFrame.hookList = hookList or {}
|
||||
|
||||
local mainTitle = detailsFramework:CreateLabel(mainFrame, title, 24, "white")
|
||||
mainTitle:SetPoint("topleft", mainFrame, "topleft", 10, -30 + y_offset)
|
||||
|
||||
mainFrame:SetFrameLevel(200)
|
||||
|
||||
mainFrame.AllFrames = {}
|
||||
mainFrame.AllButtons = {}
|
||||
mainFrame.CurrentIndex = 1
|
||||
mainFrame.IsContainer = true
|
||||
mainFrame.ButtonSelectedBorderColor = optionsTable.button_selected_border_color or {1, 1, 0, 1}
|
||||
mainFrame.ButtonNotSelectedBorderColor = optionsTable.button_border_color or {0, 0, 0, 0}
|
||||
|
||||
if (optionsTable.right_click_interact ~= nil) then
|
||||
mainFrame.CanCloseWithRightClick = optionsTable.right_click_interact
|
||||
else
|
||||
mainFrame.CanCloseWithRightClick = true
|
||||
end
|
||||
|
||||
--languageInfo
|
||||
local addonId = languageInfo and languageInfo.language_addonId or "none"
|
||||
|
||||
for i, frameInfo in ipairs(frameList) do
|
||||
local f = CreateFrame("frame", "$parent" .. frameInfo.name, mainFrame, "BackdropTemplate")
|
||||
f:SetAllPoints()
|
||||
f:SetFrameLevel(210)
|
||||
f:Hide()
|
||||
|
||||
--attempt to get the localized text from the language system using the addonId and the frameInfo.title
|
||||
local phraseId = frameInfo.title
|
||||
local bIsLanguagePrahseID = detailsFramework.Language.DoesPhraseIDExistsInDefaultLanguage(addonId, phraseId)
|
||||
|
||||
local title = detailsFramework:CreateLabel(f, "", 16, "silver")
|
||||
if (bIsLanguagePrahseID) then
|
||||
DetailsFramework.Language.RegisterObjectWithDefault(addonId, title.widget, frameInfo.title, frameInfo.title)
|
||||
else
|
||||
title:SetText(frameInfo.title)
|
||||
end
|
||||
|
||||
title:SetPoint("topleft", mainTitle, "bottomleft", 0, 0)
|
||||
f.titleText = title
|
||||
|
||||
local tabButton = detailsFramework:CreateButton(mainFrame, detailsFramework.TabContainerFunctions.SelectIndex, buttonWidth, buttonHeight, frameInfo.title, i, nil, nil, nil, "$parentTabButton" .. frameInfo.name, false, button_tab_template)
|
||||
|
||||
if (bIsLanguagePrahseID) then
|
||||
DetailsFramework.Language.RegisterObjectWithDefault(addonId, tabButton.widget, frameInfo.title, frameInfo.title)
|
||||
end
|
||||
|
||||
PixelUtil.SetSize(tabButton, buttonWidth, buttonHeight)
|
||||
tabButton:SetFrameLevel(220)
|
||||
tabButton.textsize = button_text_size
|
||||
tabButton.mainFrame = mainFrame
|
||||
detailsFramework.TabContainerFunctions.CreateUnderlineGlow(tabButton)
|
||||
|
||||
local rightClickToBack
|
||||
if (i == 1 or optionsTable.rightbutton_always_close) then
|
||||
rightClickToBack = detailsFramework:CreateLabel(f, "right click to close", 10, "gray")
|
||||
rightClickToBack:SetPoint("bottomright", f, "bottomright", -1, optionsTable.right_click_y or 0)
|
||||
if (optionsTable.close_text_alpha) then
|
||||
rightClickToBack:SetAlpha(optionsTable.close_text_alpha)
|
||||
end
|
||||
f.IsFrontPage = true
|
||||
else
|
||||
rightClickToBack = detailsFramework:CreateLabel(f, "right click to go back to main menu", 10, "gray")
|
||||
rightClickToBack:SetPoint("bottomright", f, "bottomright", -1, optionsTable.right_click_y or 0)
|
||||
if (optionsTable.close_text_alpha) then
|
||||
rightClickToBack:SetAlpha(optionsTable.close_text_alpha)
|
||||
end
|
||||
end
|
||||
|
||||
if (optionsTable.hide_click_label) then
|
||||
rightClickToBack:Hide()
|
||||
end
|
||||
|
||||
f:SetScript("OnMouseDown", detailsFramework.TabContainerFunctions.OnMouseDown)
|
||||
f:SetScript("OnMouseUp", detailsFramework.TabContainerFunctions.OnMouseUp)
|
||||
|
||||
tinsert(mainFrame.AllFrames, f)
|
||||
tinsert(mainFrame.AllButtons, tabButton)
|
||||
end
|
||||
|
||||
--order buttons
|
||||
local x = buttonAnchorX
|
||||
local y = buttonAnchorY
|
||||
local spaceBetweenButtons = 3
|
||||
|
||||
local allocatedSpaceForButtons = parentFrameWidth - ((#frameList - 2) * spaceBetweenButtons) - buttonAnchorX + containerWidthOffset
|
||||
local amountButtonsPerRow = floor(allocatedSpaceForButtons / buttonWidth)
|
||||
|
||||
mainFrame.AllButtons[1]:SetPoint("topleft", mainTitle, "topleft", x, y)
|
||||
x = x + buttonWidth + 2
|
||||
|
||||
for i = 2, #mainFrame.AllButtons do
|
||||
local button = mainFrame.AllButtons[i]
|
||||
PixelUtil.SetPoint(button, "topleft", mainTitle, "topleft", x, y)
|
||||
x = x + buttonWidth + 2
|
||||
|
||||
if (i % amountButtonsPerRow == 0) then
|
||||
x = buttonAnchorX
|
||||
y = y - buttonHeight - 1
|
||||
end
|
||||
end
|
||||
|
||||
--when show the frame, reset to the current internal index
|
||||
mainFrame:SetScript("OnShow", tab_container_on_show)
|
||||
--select the first frame
|
||||
mainFrame.SelectIndex (mainFrame.AllButtons[1], nil, 1)
|
||||
|
||||
print()
|
||||
return mainFrame
|
||||
end
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- ~right ~click to ~close
|
||||
|
||||
|
||||
@@ -0,0 +1,422 @@
|
||||
|
||||
local detailsFramework = DetailsFramework
|
||||
|
||||
if (not detailsFramework or not DetailsFrameworkCanLoad) then
|
||||
return
|
||||
end
|
||||
|
||||
local unpack = unpack
|
||||
local CreateFrame = CreateFrame
|
||||
local PixelUtil = PixelUtil
|
||||
|
||||
---@class df_tabinfotable : {name: string, text: string}
|
||||
|
||||
---@class df_tabcontainer : frame
|
||||
---@field AllFrames df_tabcontainerframe[]
|
||||
---@field AllButtons df_tabcontainerbutton[]
|
||||
---@field AllFramesByName table<string, df_tabcontainerframe>
|
||||
---@field AllButtonsByName table<string, df_tabcontainerbutton>
|
||||
---@field hookList table
|
||||
---@field CurrentIndex number
|
||||
---@field IsContainer boolean
|
||||
---@field ButtonSelectedBorderColor table
|
||||
---@field ButtonNotSelectedBorderColor table
|
||||
---@field CanCloseWithRightClick boolean
|
||||
---@field SetIndex fun(self: df_tabcontainer, index: number)
|
||||
---@field SelectTabByIndex fun(self: df_tabcontainer, menuIndex: number)
|
||||
---@field SelectTabByName fun(self: df_tabcontainer, name: string)
|
||||
---@field CreateUnderlineGlow fun(button: button)
|
||||
---@field OnShow fun(self: df_tabcontainer)
|
||||
---@field GetTabFrameByName fun(self: df_tabcontainer, name: string): df_tabcontainerframe
|
||||
---@field GetTabFrameByIndex fun(self: df_tabcontainer, index: number): df_tabcontainerframe
|
||||
---@field GetTabButtonByName fun(self: df_tabcontainer, name: string): df_tabcontainerbutton
|
||||
---@field GetTabButtonByIndex fun(self: df_tabcontainer, index: number): df_tabcontainerbutton
|
||||
|
||||
---@class df_tabcontainerframe : frame
|
||||
---@field bIsFrontPage boolean
|
||||
---@field titleText fontstring
|
||||
---@field tabIndex number
|
||||
---@field OnMouseDown fun(self: df_tabcontainerframe, button: string)
|
||||
---@field OnMouseUp fun(self: df_tabcontainerframe, button: string)
|
||||
---@field RefreshOptions fun(self: df_tabcontainerframe)|nil
|
||||
|
||||
---@class df_tabcontainerbutton : button
|
||||
---@field selectedUnderlineGlow texture
|
||||
---@field textsize number
|
||||
---@field mainFrame df_tabcontainer
|
||||
---@field leftSelectionIndicator texture
|
||||
|
||||
--create a template for the tab buttons
|
||||
local tabTemplate = detailsFramework.table.copy({}, detailsFramework:GetTemplate("button", "OPTIONS_BUTTON_TEMPLATE"))
|
||||
tabTemplate.backdropbordercolor = nil
|
||||
|
||||
detailsFramework.TabContainerMixin = {
|
||||
---@param self df_tabcontainer
|
||||
---@param tabIndex number
|
||||
---@return df_tabcontainerframe
|
||||
GetTabFrameByIndex = function(self, tabIndex)
|
||||
return self.AllFrames[tabIndex]
|
||||
end,
|
||||
|
||||
---@param self df_tabcontainer
|
||||
---@param name string
|
||||
---@return df_tabcontainerframe
|
||||
GetTabFrameByName = function(self, name)
|
||||
return self.AllFramesByName[name]
|
||||
end,
|
||||
|
||||
---@param self df_tabcontainer
|
||||
---@param tabIndex number
|
||||
---@return df_tabcontainerbutton
|
||||
GetTabButtonByIndex = function(self, tabIndex)
|
||||
return self.AllButtons[tabIndex]
|
||||
end,
|
||||
|
||||
---@param self df_tabcontainer
|
||||
---@param name string
|
||||
---@return df_tabcontainerbutton
|
||||
GetTabButtonByName = function(self, name)
|
||||
return self.AllButtonsByName[name]
|
||||
end,
|
||||
|
||||
---@param self df_tabcontainer
|
||||
---@param backdropTable backdrop|nil
|
||||
---@param backdropColorTable table|string|nil
|
||||
---@param backdropBorderColorTable table|string|nil
|
||||
SetTabFramesBackdrop = function(self, backdropTable, backdropColorTable, backdropBorderColorTable)
|
||||
for tabIndex, tabFrame in ipairs(self.AllFrames) do
|
||||
if (backdropTable) then
|
||||
tabFrame:SetBackdrop(backdropTable)
|
||||
end
|
||||
if (backdropColorTable) then
|
||||
local r, g, b, a = detailsFramework:ParseColors(backdropColorTable)
|
||||
tabFrame:SetBackdropColor(r, g, b, a)
|
||||
end
|
||||
if (backdropBorderColorTable) then
|
||||
local r, g, b, a = detailsFramework:ParseColors(backdropColorTable)
|
||||
tabFrame:SetBackdropBorderColor(r, g, b, a)
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
---create a underglow texture for the selected tab, this texture is a small yellow bright gradient below the button
|
||||
---@param self df_tabcontainerbutton
|
||||
CreateUnderlineGlow = function(self)
|
||||
local selectedGlow = self:CreateTexture(nil, "background", nil, -4)
|
||||
selectedGlow:SetPoint("topleft", self["widget"], "bottomleft", -7, 0)
|
||||
selectedGlow:SetPoint("topright", self["widget"], "bottomright", 7, 0)
|
||||
selectedGlow:SetTexture([[Interface\BUTTONS\UI-Panel-Button-Glow]])
|
||||
selectedGlow:SetTexCoord(0, 95/128, 30/64, 38/64)
|
||||
selectedGlow:SetBlendMode("ADD")
|
||||
selectedGlow:SetHeight(8)
|
||||
selectedGlow:SetAlpha(.75)
|
||||
selectedGlow:Hide()
|
||||
self.selectedUnderlineGlow = selectedGlow
|
||||
end,
|
||||
|
||||
---@param tabContainer df_tabcontainer
|
||||
---@param menuIndex number
|
||||
SelectTabByIndex = function(tabContainer, menuIndex)
|
||||
---@type df_tabcontainerbutton
|
||||
local tabButton = tabContainer.AllButtons[menuIndex]
|
||||
---@type df_tabcontainerframe
|
||||
local tabFrame = tabContainer.AllFrames[menuIndex]
|
||||
|
||||
--hide all tab frame and hide the selection glow from tab buttons
|
||||
for i = 1, #tabContainer.AllFrames do
|
||||
---@type df_tabcontainerframe
|
||||
local thisTabFrame = tabContainer.AllFrames[i]
|
||||
thisTabFrame:Hide()
|
||||
|
||||
---@type df_tabcontainerbutton
|
||||
local thisTabButton = tabContainer.AllButtons[i]
|
||||
if (tabContainer.ButtonNotSelectedBorderColor) then
|
||||
thisTabButton:SetBackdropBorderColor(unpack(tabContainer.ButtonNotSelectedBorderColor))
|
||||
end
|
||||
if (thisTabButton.selectedUnderlineGlow) then
|
||||
thisTabButton.selectedUnderlineGlow:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
tabFrame:Show()
|
||||
if (tabFrame.RefreshOptions) then
|
||||
tabFrame:RefreshOptions()
|
||||
end
|
||||
|
||||
if (tabContainer.ButtonSelectedBorderColor) then
|
||||
tabButton:SetBackdropBorderColor(unpack(tabContainer.ButtonSelectedBorderColor))
|
||||
end
|
||||
|
||||
if (tabButton.selectedUnderlineGlow) then
|
||||
tabButton.selectedUnderlineGlow:Show()
|
||||
end
|
||||
|
||||
tabContainer.CurrentIndex = menuIndex
|
||||
|
||||
if (tabContainer.hookList.OnSelectIndex) then
|
||||
detailsFramework:QuickDispatch(tabContainer.hookList.OnSelectIndex, tabContainer, tabButton)
|
||||
end
|
||||
end,
|
||||
|
||||
---@param tabContainer df_tabcontainer
|
||||
---@param name string
|
||||
SelectTabByName = function(tabContainer, name)
|
||||
---@type df_tabcontainerframe
|
||||
local tabFrame = tabContainer.AllFramesByName[name]
|
||||
if (tabFrame) then
|
||||
local tabIndex = tabFrame.tabIndex
|
||||
tabContainer:SelectTabByIndex(tabIndex)
|
||||
else
|
||||
error("df_tabcontainer:SelectTabByName(name): param #2 'name' not found within 'tabContainer.AllFramesByName'.")
|
||||
end
|
||||
end,
|
||||
|
||||
---@param self df_tabcontainer
|
||||
---@param index number
|
||||
SetIndex = function(self, index)
|
||||
self.CurrentIndex = index
|
||||
end,
|
||||
|
||||
---@param self df_tabcontainer
|
||||
OnShow = function(self)
|
||||
local index = self.CurrentIndex
|
||||
self:SelectTabByIndex(index)
|
||||
end
|
||||
}
|
||||
|
||||
detailsFramework.TabContainerFrameMixin = {
|
||||
---@param self df_tabcontainerframe
|
||||
---@param button string
|
||||
OnMouseDown = function(self, button)
|
||||
--search for UIParent
|
||||
---@type frame
|
||||
local highestParent = detailsFramework:FindHighestParent(self)
|
||||
local tabContainer = self:GetParent()
|
||||
---@cast tabContainer df_tabcontainer
|
||||
|
||||
if (button == "LeftButton") then
|
||||
if (not highestParent.IsMoving and highestParent:IsMovable()) then
|
||||
highestParent:StartMoving()
|
||||
highestParent.IsMoving = true
|
||||
end
|
||||
|
||||
elseif (button == "RightButton") then
|
||||
if (not highestParent.IsMoving and tabContainer.IsContainer) then
|
||||
if (self.bIsFrontPage) then
|
||||
if (tabContainer.CanCloseWithRightClick) then
|
||||
if (highestParent["CloseFunction"]) then
|
||||
highestParent["CloseFunction"](highestParent)
|
||||
else
|
||||
highestParent:Hide()
|
||||
end
|
||||
end
|
||||
else
|
||||
--goes back to front page
|
||||
tabContainer:SelectTabByIndex(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
---@param self df_tabcontainerframe
|
||||
---@param button string
|
||||
OnMouseUp = function(self, button)
|
||||
local frame = detailsFramework:FindHighestParent(self)
|
||||
if (frame.IsMoving) then
|
||||
frame:StopMovingOrSizing()
|
||||
frame.IsMoving = false
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
---creates a frame called tabContainer which is used as base for the tab container object
|
||||
---the function receives a table called tabList which contains sub tables with two keys 'name' and 'text', name is the frame name and text is the text displayed on the button
|
||||
---then the function iterate amongst the tabList and create a frame and a button for each entry using the value of the 'text' key as the text for the button and 'name' for the name of the frame
|
||||
---when the user click on a button, the tabContainer hide all frames and show the frame which was created together with that button
|
||||
---@param parent frame the parent frame
|
||||
---@param title string a string to use as the title of the tab container, the title is always shown
|
||||
---@param frameName string the frame name to pass into the CreateFrame function
|
||||
---@param tabList df_tabinfotable[] the list of tabs to create, each entry has a 'name' and 'text' keys
|
||||
---@param optionsTable {button_border_color: table, button_selected_border_color: table, right_click_y: number, hide_click_label: boolean, close_text_alpha: number, rightbutton_always_close: boolean, right_click_interact: boolean, y_offset: number, button_width: number, button_height: number, button_x: number, button_y: number, button_text_size: number, container_width_offset: number}|nil
|
||||
---@param hookList table<string, function>|nil
|
||||
---@param languageInfo any
|
||||
---@return df_tabcontainer
|
||||
function detailsFramework:CreateTabContainer(parent, title, frameName, tabList, optionsTable, hookList, languageInfo)
|
||||
optionsTable = optionsTable or {}
|
||||
|
||||
local parentFrameWidth = parent:GetWidth()
|
||||
local yOffset = optionsTable.y_offset or 0
|
||||
local buttonWidth = optionsTable.button_width or 160
|
||||
local buttonHeight = optionsTable.button_height or 20
|
||||
local buttonAnchorX = optionsTable.button_x or 230
|
||||
local buttonAnchorY = optionsTable.button_y or 0
|
||||
local buttonTextSize = optionsTable.button_text_size or 10
|
||||
local containerWidthOffset = optionsTable.container_width_offset or 0
|
||||
|
||||
--create the base frame
|
||||
---@type df_tabcontainer
|
||||
local tabContainer = CreateFrame("frame", frameName, parent["widget"] or parent, "BackdropTemplate")
|
||||
tabContainer.hookList = hookList or {}
|
||||
|
||||
detailsFramework:Mixin(tabContainer, detailsFramework.TabContainerMixin)
|
||||
|
||||
--create the fontstring which show the title
|
||||
---@type fontstring
|
||||
local mainTitle = detailsFramework:CreateLabel(tabContainer, title, 24, "white")
|
||||
mainTitle:SetPoint("topleft", tabContainer, "topleft", 10, -30 + yOffset)
|
||||
|
||||
tabContainer.AllFrames = {}
|
||||
tabContainer.AllButtons = {}
|
||||
tabContainer.AllFramesByName = {}
|
||||
tabContainer.AllButtonsByName = {}
|
||||
tabContainer.CurrentIndex = 1
|
||||
tabContainer.IsContainer = true
|
||||
tabContainer.ButtonSelectedBorderColor = optionsTable.button_selected_border_color or {1, 1, 0, 1}
|
||||
tabContainer.ButtonNotSelectedBorderColor = optionsTable.button_border_color or {0, 0, 0, 0}
|
||||
|
||||
if (optionsTable.right_click_interact ~= nil) then
|
||||
tabContainer.CanCloseWithRightClick = optionsTable.right_click_interact
|
||||
else
|
||||
tabContainer.CanCloseWithRightClick = true
|
||||
end
|
||||
|
||||
--languageInfo
|
||||
local addonId = languageInfo and languageInfo.language_addonId or "none"
|
||||
|
||||
for tabIndex, tabInfo in ipairs(tabList) do
|
||||
--create a frame which will be shown when the tabButton is clicked
|
||||
--when this tab isn't selected, this frame is hidden
|
||||
---@type df_tabcontainerframe
|
||||
local tabFrame = CreateFrame("frame", "$parent" .. tabInfo.name, tabContainer, "BackdropTemplate")
|
||||
detailsFramework:Mixin(tabFrame, detailsFramework.TabContainerFrameMixin)
|
||||
tabFrame:SetAllPoints()
|
||||
tabFrame:SetFrameLevel(210)
|
||||
tabFrame:SetScript("OnMouseDown", tabFrame.OnMouseDown)
|
||||
tabFrame:SetScript("OnMouseUp", tabFrame.OnMouseUp)
|
||||
tabFrame.tabIndex = tabIndex
|
||||
tabFrame:Hide()
|
||||
|
||||
--attempt to get the localized text from the language system using the addonId and the frameInfo.text
|
||||
local phraseId = tabInfo.text
|
||||
local bIsLanguagePrahseID = detailsFramework.Language.DoesPhraseIDExistsInDefaultLanguage(addonId, phraseId)
|
||||
|
||||
--create the fontstring which show this tab text, this text is only shown when the tab is shown
|
||||
local titleLabel = detailsFramework:CreateLabel(tabFrame, "", 16, "silver")
|
||||
if (bIsLanguagePrahseID) then
|
||||
DetailsFramework.Language.RegisterObjectWithDefault(addonId, titleLabel, tabInfo.text, tabInfo.text)
|
||||
else
|
||||
titleLabel:SetText(tabInfo.text)
|
||||
end
|
||||
titleLabel:SetPoint("topleft", mainTitle, "bottomleft", 0, 0)
|
||||
tabFrame.titleText = titleLabel
|
||||
|
||||
---@type df_tabcontainerbutton
|
||||
local tabButton = detailsFramework:CreateButton(tabContainer, function() tabContainer:SelectTabByIndex(tabIndex) end, buttonWidth, buttonHeight, tabInfo.text, tabIndex, nil, nil, nil, "$parentTabButton" .. tabInfo.name, false, tabTemplate)
|
||||
PixelUtil.SetSize(tabButton, buttonWidth, buttonHeight)
|
||||
tabButton:SetFrameLevel(220)
|
||||
tabButton.textsize = buttonTextSize
|
||||
tabButton.mainFrame = tabContainer
|
||||
tabContainer.CreateUnderlineGlow(tabButton)
|
||||
|
||||
--register the fontstring with the language system
|
||||
if (bIsLanguagePrahseID) then
|
||||
DetailsFramework.Language.RegisterObjectWithDefault(addonId, tabButton["widget"], tabInfo.text, tabInfo.text)
|
||||
end
|
||||
|
||||
local rightClickToBack
|
||||
if (tabIndex == 1 or optionsTable.rightbutton_always_close) then
|
||||
rightClickToBack = detailsFramework:CreateLabel(tabFrame, "right click to close", 10, "gray")
|
||||
rightClickToBack:SetPoint("bottomright", tabFrame, "bottomright", -1, optionsTable.right_click_y or 0)
|
||||
if (optionsTable.close_text_alpha) then
|
||||
rightClickToBack:SetAlpha(optionsTable.close_text_alpha)
|
||||
end
|
||||
tabFrame.bIsFrontPage = true
|
||||
else
|
||||
rightClickToBack = detailsFramework:CreateLabel(tabFrame, "right click to go back to main menu", 10, "gray")
|
||||
rightClickToBack:SetPoint("bottomright", tabFrame, "bottomright", -1, optionsTable.right_click_y or 0)
|
||||
if (optionsTable.close_text_alpha) then
|
||||
rightClickToBack:SetAlpha(optionsTable.close_text_alpha)
|
||||
end
|
||||
end
|
||||
|
||||
if (optionsTable.hide_click_label) then
|
||||
rightClickToBack:Hide()
|
||||
end
|
||||
|
||||
table.insert(tabContainer.AllFrames, tabFrame)
|
||||
table.insert(tabContainer.AllButtons, tabButton)
|
||||
tabContainer.AllFramesByName[tabInfo.name] = tabFrame
|
||||
tabContainer.AllFramesByName[tabInfo.text] = tabFrame
|
||||
tabContainer.AllButtonsByName[tabInfo.name] = tabButton
|
||||
tabContainer.AllButtonsByName[tabInfo.text] = tabButton
|
||||
end
|
||||
|
||||
--order buttons
|
||||
local x = buttonAnchorX
|
||||
local y = buttonAnchorY
|
||||
local spaceBetweenButtons = 3
|
||||
|
||||
local allocatedSpaceForButtons = parentFrameWidth - ((#tabList - 2) * spaceBetweenButtons) - buttonAnchorX + containerWidthOffset
|
||||
local amountButtonsPerRow = math.floor(allocatedSpaceForButtons / buttonWidth)
|
||||
|
||||
tabContainer.AllButtons[1]:SetPoint("topleft", mainTitle, "topleft", x, y)
|
||||
x = x + buttonWidth + 2
|
||||
|
||||
for i = 2, #tabContainer.AllButtons do
|
||||
local button = tabContainer.AllButtons[i]
|
||||
PixelUtil.SetPoint(button, "topleft", mainTitle, "topleft", x, y)
|
||||
x = x + buttonWidth + 2
|
||||
|
||||
if (i % amountButtonsPerRow == 0) then
|
||||
x = buttonAnchorX
|
||||
y = y - buttonHeight - 1
|
||||
end
|
||||
end
|
||||
|
||||
--when show the frame, reset to the current internal index
|
||||
tabContainer:SetScript("OnShow", tabContainer.OnShow)
|
||||
--select the first frame
|
||||
local defaultTab = 1
|
||||
tabContainer:SelectTabByIndex(defaultTab)
|
||||
|
||||
return tabContainer
|
||||
end
|
||||
|
||||
|
||||
--[=[example:
|
||||
|
||||
local parent = UIParent
|
||||
local title = "My AddOn Options"
|
||||
local frameName = "MyAddOnOptionsFrame"
|
||||
local tabList = {
|
||||
{name = "GeneralSettings", text = "General Settings"},
|
||||
{name = "AdvancedSettings", text = "Advanced Settings"},
|
||||
{name = "AboutTheAddon", text = "Addon Info"},
|
||||
}
|
||||
local optionsTable = {}
|
||||
local hookList = {}
|
||||
local languageInfo = {language_addonId = "MyAddOnTocName"}
|
||||
|
||||
local tabContainer = DetailsFramework:CreateTabContainer(parent, title, frameName, tabList, optionsTable, hookList, languageInfo)
|
||||
tabContainer:SetPoint("center", UIParent, "center", 0, 0)
|
||||
tabContainer:SetSize(750, 450)
|
||||
tabContainer:Show()
|
||||
|
||||
--ways for getting a tab frame and start to create widgets inside it
|
||||
local tabIndex = 1
|
||||
local generalSettingsTabFrame = tabContainer:GetTabFrameByIndex(tabIndex) --using a tabIndex
|
||||
local advancedSettingsTabFrame = tabContainer:GetTabFrameByName("Advanced Settings") --using the tab text
|
||||
local aboutTabFrame = tabContainer:GetTabFrameByName("AboutTheAddon") --using the tab name
|
||||
|
||||
--clicking on tab buttons will automatically show the tab frame, to select a tab frame without clicking on the button, use:
|
||||
tabContainer:SelectTabByIndex(tabIndex) --using a tabIndex
|
||||
tabContainer:SelectTabByName("Advanced Settings") --using the tab text
|
||||
tabContainer:SelectTabByName("AdvancedSettings") --using the tab name
|
||||
|
||||
--modify the background color by applying a backdrop
|
||||
local backdropTable = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}
|
||||
local backdropColor = {DetailsFramework:GetDefaultBackdropColor()}
|
||||
local backdropBorderColor = {0, 0, 0, 1}
|
||||
tabContainer:SetTabFramesBackdrop(backdropTable, backdropColor, backdropBorderColor)
|
||||
|
||||
--]=]
|
||||
@@ -15,8 +15,8 @@
|
||||
local addonName, Details222 = ...
|
||||
local version, build, date, tocversion = GetBuildInfo()
|
||||
|
||||
Details.build_counter = 11011
|
||||
Details.alpha_build_counter = 11011 --if this is higher than the regular counter, use it instead
|
||||
Details.build_counter = 11022
|
||||
Details.alpha_build_counter = 11022 --if this is higher than the regular counter, use it instead
|
||||
Details.dont_open_news = true
|
||||
Details.game_version = version
|
||||
Details.userversion = version .. " " .. Details.build_counter
|
||||
@@ -108,6 +108,17 @@ do
|
||||
--]=]
|
||||
|
||||
local news = {
|
||||
{"v10.1.0.11022.151", "May 20th, 2023"},
|
||||
"Breakdown pet options has changed to: 'Group Pets by Their Names' or 'Group Pets by Their Spells'.",
|
||||
"Evoker empowered level now ocupies less space on the rectangle showing the damage by empower level.",
|
||||
"Another Framework update.",
|
||||
"Fixed an issue where some pet bars still showing the owner name.",
|
||||
"Fixed an issue with the player selector on Breakdown window causing an error when selecting some players.",
|
||||
"Fixed an issue caused by opening the breakdown window while seeing healing overall.",
|
||||
"Fixed an issue with the min and max damage of a spell when viewing the 'merged' damage of two or more spells.",
|
||||
"Fixed an issue with the Raid Check plugin throwing an error on Shuffle Arenas.",
|
||||
"Fixed shields for Classic versions (Flamanis).",
|
||||
|
||||
{"v10.1.0.11011.151", "May 13th, 2023"},
|
||||
"Added options: 'Group Player Spells With Same Name' and 'Group Pets By Spell' on the breakdown options.",
|
||||
"Added combat log options for 'Calculate Shield Wasted Amount' and 'Calculate Energy Wasted Amount' under the options > Combat Log.",
|
||||
@@ -1202,16 +1213,4 @@ end
|
||||
---@param value number
|
||||
function Details222.PlayerStats:SetStat(statName, value)
|
||||
Details.player_stats[statName] = value
|
||||
end
|
||||
|
||||
---destroy a table and remove it from the object, if the key isn't passed, the object itself is destroyed
|
||||
---@param object any
|
||||
---@param key string|nil
|
||||
function Details:Destroy(object, key)
|
||||
if (key) then
|
||||
table.wipe(object[key])
|
||||
object[key] = nil
|
||||
else
|
||||
table.wipe(object)
|
||||
end
|
||||
end
|
||||
@@ -653,6 +653,7 @@
|
||||
combatObject[4].need_refresh = true
|
||||
combatObject[5].need_refresh = true
|
||||
|
||||
--isn't shadow deprecated?
|
||||
if (overallCombatObject) then --link � a tabela de combate do overall
|
||||
combatObject[1].shadow = overallCombatObject[1]
|
||||
combatObject[2].shadow = overallCombatObject[2]
|
||||
|
||||
@@ -459,7 +459,9 @@ end
|
||||
funcao_de_criacao = actorContainer:FuncaoDeCriacao(containerType),
|
||||
tipo = containerType,
|
||||
combatId = combatId,
|
||||
---@type actor[]
|
||||
_ActorTable = {},
|
||||
---@type table<string, number>
|
||||
_NameIndexTable = {}
|
||||
}
|
||||
|
||||
|
||||
@@ -1708,9 +1708,8 @@ function spellsTab.CreatePhasesContainer(tabFrame) --~phase ~createphasecontaine
|
||||
|
||||
---@type breakdowntargetscrollframe not sure is this is correct
|
||||
local phaseScrollFrame = DF:CreateScrollBox(container, "$parentPhaseScroll", refreshPhaseFunc, {}, width, height, defaultAmountOfLines, CONST_SPELLSCROLL_LINEHEIGHT)
|
||||
dededebug = 1
|
||||
DF:ReskinSlider(phaseScrollFrame)
|
||||
dededebug = nil
|
||||
|
||||
phaseScrollFrame:SetBackdrop({})
|
||||
phaseScrollFrame:SetAllPoints()
|
||||
|
||||
|
||||
@@ -438,7 +438,6 @@ function Details:StartMeUp()
|
||||
--Details:OpenCustomDisplayWindow()
|
||||
--Details:OpenWelcomeWindow()
|
||||
end
|
||||
|
||||
Details.Schedules.NewTimer(2, Details.OpenOptionsWindowAtStart, Details)
|
||||
--Details:OpenCustomDisplayWindow()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user