Cleanups and Created a new frame class "Frame Container"

This commit is contained in:
Tercio Jose
2023-04-17 21:59:17 -03:00
parent d2524bb4a6
commit ca91c10ff8
6 changed files with 265 additions and 183 deletions
+2 -1
View File
@@ -133,7 +133,8 @@
---@field CreateFontString fun(self: frame, name: string|nil, layer: "background"|"border"|"artwork"|"overlay"|"highlight", inherits: string|nil, subLayer: number|nil) : fontstring
---@field EnableMouse fun(self: frame, enable: boolean)
---@field SetResizable fun(self: frame, enable: boolean)
---@field SetResizeBounds fun(minWidth: number, minHeight: number, maxWidth: number, maxHeight: number)
---@field EnableMouseWheel fun(self: frame, enable: boolean)
---@field SetResizeBounds fun(self: frame, minWidth: number, minHeight: number, maxWidth: number, maxHeight: number)
---@class button : frame
---@field SetNormalTexture fun(self: button, texture: texture)
+221
View File
@@ -0,0 +1,221 @@
local detailsFramework = _G ["DetailsFramework"]
if (not detailsFramework or not DetailsFrameworkCanLoad) then
return
end
local _
local DF = detailsFramework
local CreateFrame = CreateFrame
---@class framecontainer : frame
---@field bIsSizing boolean
---@field options table
---@field leftResizer button
---@field rightResizer button
---@field OnSizeChanged fun(frameContainer: framecontainer)
---@field OnResizerMouseDown fun(resizerButton: button, mouseButton: string)
---@field OnResizerMouseUp fun(resizerButton: button, mouseButton: string)
---@field HideResizer fun(frameContainer: framecontainer)
---@field ShowResizer fun(frameContainer: framecontainer)
---@field OnInitialize fun(frameContainer: framecontainer)
---@field SetLocked fun(frameContainer: framecontainer, isLocked: boolean)
---@field CheckLockedState fun(frameContainer: framecontainer)
detailsFramework.frameContainerMixin = {
--methods
---run when the container has its size changed
---@param frameContainer framecontainer
OnSizeChanged = function(frameContainer)
---@type frame[]
local children = {frameContainer:GetChildren()}
---@type number
local childrenAmount = #children
--get the width of each children and sum the values, do the same thing for height
---@type number
local childrenWidth = 0
---@type number
local childrenHeight = 0
for i = 1, childrenAmount do
childrenWidth = childrenWidth + children[i]:GetWidth()
childrenHeight = childrenHeight + children[i]:GetHeight()
end
print("running...")
--if the children width is bigger than the container width, then need to resize the width of the children to porportionally fit the container
--this resize is done by getting the width of each child and reduce the width of the child by the percentage of the difference between the container width and the children width
if childrenWidth > frameContainer:GetWidth() then
---@type number
local widthDifference = childrenWidth - frameContainer:GetWidth()
for i = 1, childrenAmount do
children[i]:SetWidth(children[i]:GetWidth() - (children[i]:GetWidth() * (widthDifference / childrenWidth)))
end
end
end,
---run when the user click on the resizer
---@param resizerButton button
---@param mouseButton string
OnResizerMouseDown = function(resizerButton, mouseButton)
if (mouseButton ~= "LeftButton") then
return
end
print(1)
---@type framecontainer
local frameContainer = resizerButton:GetParent() --Cannot assign `frame` to `framecontainer`. .. but framecontainer is inherited from frame
if (frameContainer.bIsSizing) then
return
end
frameContainer.bIsSizing = true
frameContainer:StartSizing("bottomright")
end,
---run when the user click on the resizer
---@param resizerButton button
---@param mouseButton string
OnResizerMouseUp = function(resizerButton, mouseButton)
---@type framecontainer
local frameContainer = resizerButton:GetParent() --Cannot assign `frame` to `framecontainer`. .. but framecontainer is inherited from frame
print(2)
if (not frameContainer.bIsSizing) then
print("fuck")
return
end
frameContainer:StopMovingOrSizing()
frameContainer.bIsSizing = false
end,
---hide resizer
---@param frameContainer framecontainer
HideResizer = function(frameContainer)
frameContainer.leftResizer:Hide()
frameContainer.rightResizer:Hide()
end,
---show resizer
---@param frameContainer framecontainer
ShowResizer = function(frameContainer)
if (frameContainer.options.use_left_resizer) then
frameContainer.leftResizer:Show()
end
if (frameContainer.options.use_right_resizer) then
frameContainer.rightResizer:Show()
end
end,
---check the lock state and show or hide the resizer, set the frame as movable or not, resizeable or not
---@param frameContainer framecontainer
CheckLockedState = function(frameContainer)
if (frameContainer.options.is_locked) then
frameContainer:HideResizer()
frameContainer:EnableMouse(false)
frameContainer:SetResizable(false)
else
frameContainer:ShowResizer()
frameContainer:EnableMouse(true)
frameContainer:SetResizable(true)
end
end,
---set the lock state
---@param frameContainer framecontainer
---@param isLocked boolean
SetLocked = function(frameContainer, isLocked)
frameContainer.options.is_locked = isLocked
frameContainer:CheckLockedState()
end,
---run when the container is created
---@param frameContainer framecontainer
OnInitialize = function(frameContainer)
frameContainer.leftResizer:SetScript("OnMouseDown", frameContainer.OnResizerMouseDown)
frameContainer.leftResizer:SetScript("OnMouseUp", frameContainer.OnResizerMouseUp)
frameContainer.rightResizer:SetScript("OnMouseDown", frameContainer.OnResizerMouseDown)
frameContainer.rightResizer:SetScript("OnMouseUp", frameContainer.OnResizerMouseUp)
if (frameContainer.options.is_locked) then
frameContainer:HideResizer()
else
frameContainer:ShowResizer()
end
frameContainer:CheckLockedState()
frameContainer:SetResizeBounds(50, 50, 1000, 1000)
end,
}
local frameContainerOptions = {
--default settings
width = 300,
height = 150,
is_locked = false,
use_left_resizer = false,
use_right_resizer = true,
}
---create a frame container, which is a frame that envelops another frame, and can be moved, resized, etc.
---@param parent frame
---@param options table|nil
---@param frameName string|nil
---@return framecontainer
function DF:CreateFrameContainer(parent, options, frameName)
---@type framecontainer
local container = CreateFrame("frame", frameName or ("$parentFrameContainer" .. math.random(10000, 99999)), parent, "BackdropTemplate")
detailsFramework:Mixin(container, detailsFramework.frameContainerMixin)
detailsFramework:Mixin(container, detailsFramework.OptionsFunctions)
detailsFramework:CreateResizeGrips(container)
container:BuildOptionsTable(frameContainerOptions, options)
container:SetScript("OnSizeChanged", container.OnSizeChanged)
container.bIsSizing = false
container:OnInitialize()
return container
end
function DF:CreateFrameContainerTest(parent, options, frameName)
local container = DF:CreateFrameContainer(parent, options, frameName)
container:SetSize(400, 400)
container:SetPoint("center", UIParent, "center", 0, 0)
detailsFramework:ApplyStandardBackdrop(container)
for i = 1, 3 do
for o = 1, 3 do
local frame = CreateFrame("frame", "$parentFrame" .. math.random(10000, 99999), container, "BackdropTemplate")
frame:SetBackdrop({bgFile = "Interface\\AddOns\\Details\\images\\background", tile = true, tileSize = 16, edgeFile = "Interface\\AddOns\\Details\\images\\border_2", edgeSize = 16, insets = {left = 4, right = 4, top = 4, bottom = 4}})
frame:SetBackdropColor(0, 0, 0, 0.5)
frame:SetBackdropBorderColor(1, 1, 1, 0.5)
frame:SetSize(100, 100)
frame:SetPoint("TOPLEFT", container, "TOPLEFT", 10 + (i - 1) * 110, -10 - (o - 1) * 110)
end
end
end
C_Timer.After(2, function()
--DetailsFramework:CreateFrameContainerTest(UIParent)
end)
--[=[
/run DetailsFramework:CreateFrameContainerTest(UIParent)
C_Timer.After(2, function()
DetailsFramework:CreateFrameContainerTest(UIParent)
end)
--]=]
+1
View File
@@ -4,6 +4,7 @@
<Script file="fw.lua"/>
<Script file="mixins.lua"/>
<Script file="util.lua"/>
<Script file="containers.lua"/>
<Script file="iteminfo.lua"/>
<Script file="addon.lua"/>
<Script file="colors.lua"/>
+1 -1
View File
@@ -267,7 +267,7 @@ detailsFramework.SetPointMixin = {
end,
}
--mixin for options functions
---mixin for options
detailsFramework.OptionsFunctions = {
SetOption = function(self, optionName, optionValue)
if (self.options) then
+40 -16
View File
@@ -3907,28 +3907,52 @@ end
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- ~resizers
function detailsFramework:CreateResizeGrips (parent)
--these options are copied to the object with object:BuildOptionsTable()
local rezieGripOptions = {
width = 32,
height = 32,
should_mirror_left_texture = true,
normal_texture = [[Interface\CHATFRAME\UI-ChatIM-SizeGrabber-Up]],
highlight_texture = [[Interface\CHATFRAME\UI-ChatIM-SizeGrabber-Highlight]],
pushed_texture = [[Interface\CHATFRAME\UI-ChatIM-SizeGrabber-Down]],
}
---create the two resize grips for a frame, one in the bottom left and another in the bottom right
---@param parent frame
---@return frame, frame
function detailsFramework:CreateResizeGrips(parent, options, frameName)
if (parent) then
local parentName = parent:GetName()
local leftResizer = CreateFrame("button", parentName and parentName .. "LeftResizer" or nil, parent, "BackdropTemplate")
local rightResizer = CreateFrame("button", parentName and parentName .. "RightResizer" or nil, parent, "BackdropTemplate")
local leftResizer = CreateFrame("button", frameName or (parentName and "$parentLeftResizer"), parent, "BackdropTemplate")
local rightResizer = CreateFrame("button", frameName or (parentName and "$parentRightResizer"), parent, "BackdropTemplate")
leftResizer:SetPoint("bottomleft", parent, "bottomleft")
rightResizer:SetPoint("bottomright", parent, "bottomright")
leftResizer:SetSize(16, 16)
rightResizer:SetSize(16, 16)
parent.leftResizer = leftResizer
parent.rightResizer = rightResizer
rightResizer:SetNormalTexture([[Interface\CHATFRAME\UI-ChatIM-SizeGrabber-Up]])
rightResizer:SetHighlightTexture([[Interface\CHATFRAME\UI-ChatIM-SizeGrabber-Highlight]])
rightResizer:SetPushedTexture([[Interface\CHATFRAME\UI-ChatIM-SizeGrabber-Down]])
leftResizer:SetNormalTexture([[Interface\CHATFRAME\UI-ChatIM-SizeGrabber-Up]])
leftResizer:SetHighlightTexture([[Interface\CHATFRAME\UI-ChatIM-SizeGrabber-Highlight]])
leftResizer:SetPushedTexture([[Interface\CHATFRAME\UI-ChatIM-SizeGrabber-Down]])
detailsFramework:Mixin(leftResizer, detailsFramework.OptionsFunctions)
detailsFramework:Mixin(rightResizer, detailsFramework.OptionsFunctions)
leftResizer:BuildOptionsTable(rezieGripOptions, options)
rightResizer:BuildOptionsTable(rezieGripOptions, options)
leftResizer:GetNormalTexture():SetTexCoord(1, 0, 0, 1)
leftResizer:GetHighlightTexture():SetTexCoord(1, 0, 0, 1)
leftResizer:GetPushedTexture():SetTexCoord(1, 0, 0, 1)
leftResizer:SetPoint("bottomleft", parent, "bottomleft", 0, 0)
rightResizer:SetPoint("bottomright", parent, "bottomright", 0, 0)
leftResizer:SetSize(leftResizer.options.width, leftResizer.options.height)
rightResizer:SetSize(leftResizer.options.width, leftResizer.options.height)
rightResizer:SetNormalTexture(rightResizer.options.normal_texture)
rightResizer:SetHighlightTexture(rightResizer.options.highlight_texture)
rightResizer:SetPushedTexture(rightResizer.options.pushed_texture)
leftResizer:SetNormalTexture(leftResizer.options.normal_texture)
leftResizer:SetHighlightTexture(leftResizer.options.highlight_texture)
leftResizer:SetPushedTexture(leftResizer.options.pushed_texture)
if (leftResizer.options.should_mirror_left_texture) then
leftResizer:GetNormalTexture():SetTexCoord(1, 0, 0, 1)
leftResizer:GetHighlightTexture():SetTexCoord(1, 0, 0, 1)
leftResizer:GetPushedTexture():SetTexCoord(1, 0, 0, 1)
end
return leftResizer, rightResizer
end
-165
View File
@@ -331,9 +331,6 @@ function spellsTab.OnCreateTabCallback(tabButton, tabFrame)
--create the targets container
spellsTab.CreateTargetContainer(tabFrame)
--craete special backgrounds (still needed?)
spellsTab.CreateSpecialBackgrounds(tabFrame)
--create the report buttons for each container
spellsTab.CreateReportButtons(tabFrame)
@@ -357,152 +354,6 @@ function spellsTab.OnCreateTabCallback(tabButton, tabFrame)
--]=]
end
function spellsTab.TrocaBackgroundInfo(tabFrame) --> spells tab | to be refactored | called fom OpenJanelaInfo function
tabFrame.bg3_sec_texture:Hide()
tabFrame.bg2_sec_texture:Hide()
tabFrame.report_direita:Hide()
if (breakdownWindow.atributo == 1) then --damage
if (breakdownWindow.sub_atributo == 1 or breakdownWindow.sub_atributo == 2) then --damage done / dps
tabFrame.bg1_sec_texture:SetTexture("")
tabFrame.tipo = 1
if (breakdownWindow.sub_atributo == 2) then
tabFrame.targets:SetText(Loc ["STRING_TARGETS"] .. " " .. Loc ["STRING_ATTRIBUTE_DAMAGE_DPS"] .. ":")
tabFrame.target_persecond = true
else
tabFrame.targets:SetText(Loc ["STRING_TARGETS"] .. ":")
end
elseif (breakdownWindow.sub_atributo == 3) then --damage taken
tabFrame.bg1_sec_texture:SetColorTexture(.05, .05, .05, .4)
tabFrame.bg3_sec_texture:Show()
tabFrame.bg2_sec_texture:Show()
tabFrame.tipo = 2
for i = 1, spellBlockContainerSettings.amount do
tabFrame["right_background" .. i]:Hide()
end
tabFrame.targets:SetText(Loc ["STRING_TARGETS"] .. ":")
tabFrame.no_targets:Show()
tabFrame.no_targets.text:Show()
tabFrame.report_direita:Show()
elseif (breakdownWindow.sub_atributo == 4) then --friendly fire
tabFrame.bg1_sec_texture:SetColorTexture(.05, .05, .05, .4)
tabFrame.bg3_sec_texture:Show()
tabFrame.bg2_sec_texture:Show()
tabFrame.tipo = 3
for i = 1, spellBlockContainerSettings.amount do
tabFrame["right_background" .. i]:Hide()
end
tabFrame.targets:SetText(Loc ["STRING_SPELLS"] .. ":")
tabFrame.report_direita:Show()
elseif (breakdownWindow.sub_atributo == 6) then --enemies
tabFrame.bg1_sec_texture:SetColorTexture(.05, .05, .05, .4)
tabFrame.bg3_sec_texture:Show()
tabFrame.bg2_sec_texture:Show()
tabFrame.tipo = 3
for i = 1, spellBlockContainerSettings.amount do
tabFrame["right_background" .. i]:Hide()
end
tabFrame.targets:SetText(Loc ["STRING_DAMAGE_TAKEN_FROM"])
end
elseif (breakdownWindow.atributo == 2) then --healing
if (breakdownWindow.sub_atributo == 1 or breakdownWindow.sub_atributo == 2 or breakdownWindow.sub_atributo == 3) then --damage done / dps
tabFrame.bg1_sec_texture:SetTexture("")
tabFrame.tipo = 1
if (breakdownWindow.sub_atributo == 3) then
tabFrame.targets:SetText(Loc ["STRING_OVERHEALED"] .. ":")
tabFrame.target_member = "overheal"
tabFrame.target_text = Loc ["STRING_OVERHEALED"] .. ":"
elseif (breakdownWindow.sub_atributo == 2) then
tabFrame.targets:SetText(Loc ["STRING_TARGETS"] .. " " .. Loc ["STRING_ATTRIBUTE_HEAL_HPS"] .. ":")
tabFrame.target_persecond = true
else
tabFrame.targets:SetText(Loc ["STRING_TARGETS"] .. ":")
end
elseif (breakdownWindow.sub_atributo == 4) then --Healing taken
tabFrame.bg1_sec_texture:SetColorTexture(.05, .05, .05, .4)
tabFrame.bg3_sec_texture:Show()
tabFrame.bg2_sec_texture:Show()
tabFrame.tipo = 2
for i = 1, spellBlockContainerSettings.amount do
tabFrame ["right_background" .. i]:Hide()
end
tabFrame.targets:SetText(Loc ["STRING_TARGETS"] .. ":")
tabFrame.no_targets:Show()
tabFrame.no_targets.text:Show()
tabFrame.report_direita:Show()
end
elseif (breakdownWindow.atributo == 3) then --energy
tabFrame.bg1_sec_texture:SetTexture("")
tabFrame.tipo = 2
tabFrame.targets:SetText("Vindo de:")
elseif (breakdownWindow.atributo == 4) then --utility
tabFrame.bg1_sec_texture:SetTexture("")
tabFrame.tipo = 2
tabFrame.targets:SetText(Loc ["STRING_TARGETS"] .. ":")
end
end
do --hide bars functions - to be refactored
--hide all the bars of the skills in the window info
function spellsTab.HidaAllBarrasInfo()
local allBars = _detalhes.playerDetailWindow.barras1
for index = 1, #allBars, 1 do
allBars[index]:Hide()
allBars[index].textura:SetStatusBarColor(1, 1, 1, 1)
end
end
--hide the 5 bars on the right side of the window
function spellsTab.HidaAllDetalheInfo() --there's a call from the breakdown file yet
for i = 1, spellBlockContainerSettings.amount do
spellsTab.HidaDetalheInfo(i)
end
--breakdownWindow.barras3 will not exists anymore soon
--for _, thisBar in ipairs(breakdownWindow.barras3) do
-- thisBar:Hide()
--end
--_detalhes.playerDetailWindow.spell_icone:SetTexture("")
end
function spellsTab.ResetBars()
spellsTab.HidaAllBarrasInfo()
spellsTab.HidaAllBarrasAlvo()
spellsTab.HidaAllDetalheInfo()
end
function spellsTab.HidaDetalheInfo(index) --> spells tab this is getting called from class damage and heal
local info = _detalhes.playerDetailWindow.grupos_detalhes[index]
info.nome:SetText("")
info.nome2:SetText("")
info.dano:SetText("")
info.dano_porcento:SetText("")
info.dano_media:SetText("")
info.dano_dps:SetText("")
info.bg:Hide()
end
end
function spellsTab.CreateReportButtons(tabFrame)
--spell list report button
tabFrame.report_esquerda = Details.gump:NewDetailsButton(tabFrame, tabFrame, nil, _detalhes.Reportar, tabFrame, 1, 16, 16, "Interface\\COMMON\\VOICECHAT-ON", "Interface\\COMMON\\VOICECHAT-ON", "Interface\\COMMON\\VOICECHAT-ON", "Interface\\COMMON\\VOICECHAT-ON", nil, "DetailsJanelaInfoReport2")
@@ -1488,22 +1339,6 @@ function spellsTab.CreateSpellScrollContainer(tabFrame)
return scrollFrame
end
--special backgrounds -- fundos especiais de friendly fire e outros
function spellsTab.CreateSpecialBackgrounds(tabFrame)
tabFrame.no_targets = tabFrame:CreateTexture("DetailsBreakdownWindow_no_targets", "overlay")
tabFrame.no_targets:SetPoint("bottomleft", tabFrame, "bottomleft", 20, 6)
tabFrame.no_targets:SetSize(301, 100)
tabFrame.no_targets:SetTexture([[Interface\QUESTFRAME\UI-QUESTLOG-EMPTY-TOPLEFT]])
tabFrame.no_targets:SetTexCoord(0.015625, 1, 0.01171875, 0.390625)
tabFrame.no_targets:SetDesaturated(true)
tabFrame.no_targets:SetAlpha(.7)
tabFrame.no_targets.text = tabFrame:CreateFontString(nil, "overlay", "GameFontNormal")
tabFrame.no_targets.text:SetPoint("center", tabFrame.no_targets, "center")
tabFrame.no_targets.text:SetText(Loc ["STRING_NO_TARGET_BOX"])
tabFrame.no_targets.text:SetTextColor(1, 1, 1, .4)
tabFrame.no_targets:Hide()
end
---on enter function for the spell target frame
---@param targetFrame breakdowntargetframe
local onEnterSpellTarget = function(targetFrame)