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.
194 lines
5.8 KiB
194 lines
5.8 KiB
|
5 years ago
|
-- ========================================================================= --
|
||
|
|
-- SylingTracker --
|
||
|
|
-- https://www.curseforge.com/wow/addons/sylingtracker --
|
||
|
|
-- --
|
||
|
|
-- Repository: --
|
||
|
|
-- https://github.com/Skamer/SylingTracker --
|
||
|
|
-- --
|
||
|
|
-- ========================================================================= --
|
||
|
|
Syling "SylingTracker.Tasks.ContentView" ""
|
||
|
|
-- ========================================================================= --
|
||
|
|
namespace "SLT"
|
||
|
|
-- ========================================================================= --
|
||
|
|
export {
|
||
|
|
ValidateFlags = System.Toolset.validateflags,
|
||
|
|
ResetStyles = Utils.ResetStyles
|
||
|
|
}
|
||
|
|
-- ========================================================================= --
|
||
|
|
__Recyclable__ "SylingTracker_TasksContentView%d"
|
||
|
|
class "TasksContentView" (function(_ENV)
|
||
|
|
inherit "ContentView"
|
||
|
|
|
||
|
|
__Flags__()
|
||
|
|
enum "Flags" {
|
||
|
|
NONE = 0,
|
||
|
|
HAS_TASKS = 1
|
||
|
|
}
|
||
|
|
-----------------------------------------------------------------------------
|
||
|
|
-- Methods --
|
||
|
|
-----------------------------------------------------------------------------
|
||
|
|
function OnViewUpdate(self, data)
|
||
|
|
local questsData = data.quests
|
||
|
|
|
||
|
|
-- Determines the flags
|
||
|
|
local flags = Flags.NONE
|
||
|
|
if questsData then
|
||
|
|
flags = Flags.HAS_TASKS
|
||
|
|
end
|
||
|
|
|
||
|
|
if flags ~= self.Flags then
|
||
|
|
ResetStyles(self)
|
||
|
|
|
||
|
|
-- are there world quests
|
||
|
|
if ValidateFlags(Flags.HAS_TASKS, flags) then
|
||
|
|
self:AcquireTasks()
|
||
|
|
else
|
||
|
|
self:ReleaseTasks()
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Styling stuff
|
||
|
|
if flags ~= Flags.NONE then
|
||
|
|
local styles = self.FlagsStyles and self.FlagsStyles[flags]
|
||
|
|
if styles then
|
||
|
|
Style[self] = styles
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Update
|
||
|
|
if questsData then
|
||
|
|
local tasksView = self:AcquireTasks()
|
||
|
|
tasksView:UpdateView(questsData)
|
||
|
|
end
|
||
|
|
|
||
|
|
self.Flags = flags
|
||
|
|
end
|
||
|
|
|
||
|
|
function AcquireTasks(self)
|
||
|
|
local content = self:GetChild("Content")
|
||
|
|
local tasks = content:GetChild("Tasks")
|
||
|
|
if not tasks then
|
||
|
|
tasks = TaskListView.Acquire()
|
||
|
|
|
||
|
|
-- We need to keep the old name when we'll release it
|
||
|
|
self.__PreviousTasksName = tasks:GetName()
|
||
|
|
|
||
|
|
tasks:SetParent(content)
|
||
|
|
tasks:SetName("Tasks")
|
||
|
|
tasks:InstantApplyStyle()
|
||
|
|
|
||
|
|
-- Register the vents
|
||
|
|
tasks.OnSizeChanged = tasks.OnSizeChanged + self.OnTasksSizeChanged
|
||
|
|
|
||
|
|
self:AdjustHeight(true)
|
||
|
|
end
|
||
|
|
|
||
|
|
return tasks
|
||
|
|
end
|
||
|
|
|
||
|
|
function ReleaseTasks(self)
|
||
|
|
local content = self:GetChild("Content")
|
||
|
|
local tasks = content:GetChild("Tasks")
|
||
|
|
if tasks then
|
||
|
|
-- Give its old name (generated by the recycle system)
|
||
|
|
tasks:SetName(self.__PreviousTasksName)
|
||
|
|
self.__PreviousTasksName = nil
|
||
|
|
|
||
|
|
-- Unregister the events
|
||
|
|
tasks.OnSizeChanged = tasks.OnSizeChanged - self.OnTasksSizeChanged
|
||
|
|
|
||
|
|
-- It's better to release it after the event has been unregistered for avoiding
|
||
|
|
-- useless call
|
||
|
|
tasks:Release()
|
||
|
|
|
||
|
|
self:AdjustHeight(true)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function OnRelease(self)
|
||
|
|
self:ReleaseTasks()
|
||
|
|
|
||
|
|
-- We call the "Parent" onRelease (see, ContentView)
|
||
|
|
super.OnRelease(self)
|
||
|
|
|
||
|
|
-- Reset property
|
||
|
|
self.Flags = nil
|
||
|
|
end
|
||
|
|
-----------------------------------------------------------------------------
|
||
|
|
-- Properties --
|
||
|
|
-----------------------------------------------------------------------------
|
||
|
|
property "FlagsStyles" {
|
||
|
|
type = Table
|
||
|
|
}
|
||
|
|
|
||
|
|
property "Flags" {
|
||
|
|
type = TasksContentView.Flags,
|
||
|
|
default = TasksContentView.Flags.NONE
|
||
|
|
}
|
||
|
|
-----------------------------------------------------------------------------
|
||
|
|
-- Constructors --
|
||
|
|
-----------------------------------------------------------------------------
|
||
|
|
__Template__{}
|
||
|
|
function __ctor(self)
|
||
|
|
self.OnTasksSizeChanged = function() self:AdjustHeight(true) end
|
||
|
|
end
|
||
|
|
end)
|
||
|
|
-- ========================================================================= --
|
||
|
|
-- Create the same thing for bonus tasks (also known as bonus objectives)
|
||
|
|
__Recyclable__ "SylingTracker_BonusTasksContentView%d"
|
||
|
|
class "BonusTasksContentView" { TasksContentView }
|
||
|
|
-------------------------------------------------------------------------------
|
||
|
|
-- Styles --
|
||
|
|
-------------------------------------------------------------------------------
|
||
|
|
Style.UpdateSkin("Default", {
|
||
|
|
[TasksContentView] = {
|
||
|
|
Header = {
|
||
|
|
height = 32,
|
||
|
|
location = {
|
||
|
|
Anchor("TOPLEFT"),
|
||
|
|
Anchor("TOPRIGHT")
|
||
|
|
},
|
||
|
|
IconBadge = {
|
||
|
|
backdropColor = { r = 0, g = 0, b = 0, a = 0},
|
||
|
|
Icon = {
|
||
|
|
atlas = AtlasType("QuestBonusObjective")
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
Label = {
|
||
|
|
text = TRACKER_HEADER_OBJECTIVE
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
Content = {
|
||
|
|
location = {
|
||
|
|
Anchor("TOP", 0, -5, "Header", "BOTTOM"),
|
||
|
|
Anchor("LEFT", 5, 0),
|
||
|
|
Anchor("RIGHT", -5, 0)
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
FlagsStyles = {
|
||
|
|
[TasksContentView.Flags.HAS_TASKS] = {
|
||
|
|
Content = {
|
||
|
|
Tasks = {
|
||
|
|
location = {
|
||
|
|
Anchor("TOP"),
|
||
|
|
Anchor("LEFT"),
|
||
|
|
Anchor("RIGHT")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
[BonusTasksContentView] = {
|
||
|
|
Header = {
|
||
|
|
Label = {
|
||
|
|
text = TRACKER_HEADER_BONUS_OBJECTIVES
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
})
|