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.
159 lines
5.3 KiB
159 lines
5.3 KiB
-- ========================================================================= --
|
|
-- SylingTracker --
|
|
-- https://www.curseforge.com/wow/addons/sylingtracker --
|
|
-- --
|
|
-- Repository: --
|
|
-- https://github.com/Skamer/SylingTracker --
|
|
-- --
|
|
-- ========================================================================= --
|
|
Syling "SylingTracker.AutoQuests.ContentView" ""
|
|
-- ========================================================================= --
|
|
namespace "SLT"
|
|
-- ========================================================================= --
|
|
-- Iterator helper for ignoring the children are used for backdrop, and avoiding
|
|
-- they are taken as account for their parent height
|
|
IterateFrameChildren = Utils.IterateFrameChildren
|
|
-- ========================================================================= --
|
|
ResetStyles = Utils.ResetStyles
|
|
-- ========================================================================= --
|
|
-- NOTE: We don't inherit from "ContentView" because we don't need the header
|
|
__Recyclable__ "SylingTracker_AutoQuestsContentView%d"
|
|
class "AutoQuestsContentView" (function(_ENV)
|
|
inherit "Frame" extend "IView"
|
|
function OnViewUpdate(self, data)
|
|
if data.quests then
|
|
local autoQuests = self:AcquireAutoQuests()
|
|
autoQuests:UpdateView(data.quests)
|
|
else
|
|
self:ReleaseAutoQuests()
|
|
end
|
|
end
|
|
|
|
function OnAdjustHeight(self, useAnimation)
|
|
local maxOuterBottom
|
|
|
|
for childName, child in IterateFrameChildren(self) do
|
|
local outerBottom = child:GetBottom()
|
|
if outerBottom then
|
|
if not maxOuterBottom or maxOuterBottom > outerBottom then
|
|
maxOuterBottom = outerBottom
|
|
end
|
|
end
|
|
end
|
|
|
|
if maxOuterBottom then
|
|
local computeHeight = self:GetTop() - maxOuterBottom + self.PaddingBottom
|
|
if useAnimation then
|
|
self:SetAnimatedHeight(computeHeight)
|
|
else
|
|
self:SetHeight(computeHeight)
|
|
end
|
|
end
|
|
end
|
|
|
|
function AcquireAutoQuests(self)
|
|
local autoQuests = self:GetChild("AutoQuests")
|
|
if not autoQuests then
|
|
autoQuests = AutoQuestListView.Acquire()
|
|
|
|
-- We need to keep the old name when we'll release it
|
|
self.__PreviousAutoQuestsName = autoQuests:GetName()
|
|
|
|
autoQuests:SetParent(self)
|
|
autoQuests:SetName("AutoQuests")
|
|
|
|
-- It's important to only style it once we have set its parent and its new
|
|
-- name
|
|
if self.AutoQuests then
|
|
Style[autoQuests] = self.AutoQuests
|
|
end
|
|
|
|
-- Register the events
|
|
autoQuests.OnSizeChanged = autoQuests.OnSizeChanged + self.OnAutoQuestsSizeChanged
|
|
|
|
self:AdjustHeight(true)
|
|
end
|
|
|
|
return autoQuests
|
|
end
|
|
|
|
function ReleaseAutoQuests(self)
|
|
local autoQuests = self:GetChild("AutoQuests")
|
|
if autoQuests then
|
|
-- Give its old name (generated by the recycle system)
|
|
autoQuests:SetName(self.__PreviousAutoQuestsName)
|
|
self.__PreviousAutoQuestsName = nil
|
|
|
|
-- Unregister the events
|
|
autoQuests.OnSizeChanged = autoQuests.OnSizeChanged - self.OnAutoQuestsSizeChanged
|
|
|
|
-- It's better to release it after the event has been unregistered for avoiding
|
|
-- useless call
|
|
autoQuests:Release()
|
|
|
|
self:AdjustHeight()
|
|
end
|
|
end
|
|
|
|
function OnRelease(self)
|
|
self:ReleaseAutoQuests()
|
|
|
|
self:ClearAllPoints()
|
|
self:SetParent()
|
|
self:Hide()
|
|
self:CancelAdjustHeight()
|
|
self:CancelAnimatingHeight()
|
|
|
|
self:SetHeight(1)
|
|
|
|
ResetStyles(self)
|
|
end
|
|
|
|
function OnAcquire(self)
|
|
-- Important ! We need the frame is instantly styled as this may affect
|
|
-- its height.
|
|
self:InstantApplyStyle()
|
|
|
|
self:Show()
|
|
self:AdjustHeight(true)
|
|
end
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- Properties --
|
|
-----------------------------------------------------------------------------
|
|
property "PaddingBottom" {
|
|
type = Number,
|
|
default = 0
|
|
}
|
|
|
|
property "AutoQuests" {
|
|
type = Table
|
|
}
|
|
-----------------------------------------------------------------------------
|
|
-- Constructors --
|
|
-----------------------------------------------------------------------------
|
|
function __ctor(self)
|
|
-- Important! As the frame ajusts its height depending of its children height
|
|
-- we need to set its height when contructed for the event "OnSizechanged" of
|
|
-- its children is triggered.
|
|
self:SetHeight(1) -- !important
|
|
|
|
self:SetClipsChildren(true)
|
|
|
|
self.OnAutoQuestsSizeChanged = function() self:AdjustHeight(true) end
|
|
end
|
|
end)
|
|
-------------------------------------------------------------------------------
|
|
-- Styles --
|
|
-------------------------------------------------------------------------------
|
|
Style.UpdateSkin("Default", {
|
|
[AutoQuestsContentView] = {
|
|
AutoQuests = {
|
|
location = {
|
|
Anchor("TOP"),
|
|
Anchor("LEFT"),
|
|
Anchor("RIGHT")
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|