annotate Templates.lua @ 137:dee5dd232bcb

Added tag v8.0.1-20180718 for changeset 414e37af1b1b
author Nenue
date Wed, 18 Jul 2018 15:31:46 -0400
parents 414e37af1b1b
children
rev   line source
Nenue@90 1 -- Veneer
Nenue@90 2 -- Templates.lua
Nenue@90 3 -- Created: 10/24/2016 9:16 AM
Nenue@90 4 -- %file-revision%
Nenue@90 5 --
Nenue@90 6 -- Mover Widget base
Nenue@125 7 local ADDON, addon = ...
Nenue@125 8 local print = DEVIAN_WORKSPACE and function(...) _G.print('VnTpl', ...) end or nop
Nick@109 9 local PlaySoundKitID = DEVIAN_WORKSPACE and PlaySoundKitID or nop
Nick@109 10 local ipairs, pairs = ipairs, pairs
Nick@109 11 local pack, unpack = pack, unpack
Nenue@90 12
Nick@109 13 local Handler, ConfigLayer, Animation = {}, {}, {}
Nenue@90 14
Nick@109 15 VeneerConfigLayerMixin = ConfigLayer
Nick@109 16 VeneerAnimationMixin = Animation
Nick@109 17 VeneerHandlerMixin = Handler
Nick@109 18 Handler.anchorPoint = 'CENTER'
Nick@109 19 Handler.anchorPriority = 4
Nick@109 20 Handler.data = {}
Nenue@125 21 addon.HandlerBase = Handler
Nenue@125 22 addon.ConfigLayerBase = ConfigLayer
Nenue@125 23 addon.AnimationBase = Animation
Nick@109 24
Nenue@121 25 local ANCHOR_BUTTON_TYPES = {
Nenue@121 26 'TOPLEFT', 'TOP', 'TOPRIGHT', 'RIGHT', 'LEFT', 'CENTER', 'BOTTOMLEFT', 'BOTTOM', 'BOTTOMRIGHT'
Nenue@121 27 }
Nick@109 28
Nick@109 29 function ConfigLayer:OnLoad()
Nenue@90 30 local handler = self:GetParent()
Nenue@125 31 print(handler:GetName(), '-> ConfigLayer loaded', addon.ConfigMode)
Nenue@90 32 handler.ConfigLayers = handler.ConfigLayers or {}
Nenue@90 33 for i, region in ipairs(handler.ConfigLayers) do
Nenue@125 34 region:SetShown(addon.ConfigMode)
Nenue@90 35 end
Nenue@121 36 self.handler = handler
Nenue@121 37 end
Nenue@121 38
Nenue@121 39 function ConfigLayer:OnShow()
Nenue@121 40 self:Update()
Nenue@121 41 end
Nenue@121 42
Nenue@122 43 local AnchorButton_OnClick = function(self)
Nenue@122 44
Nenue@122 45 local module = self:GetParent().handler
Nenue@122 46 module.anchorPoint = self.anchorPoint
Nenue@122 47 module:Print('Anchor set to '.. self.anchorPoint)
Nenue@122 48 self:GetParent():Update()
Nenue@122 49 end
Nenue@122 50
Nenue@122 51 local RelativeButton_OnClick = function(self)
Nenue@122 52 end
Nenue@122 53
Nenue@122 54 local RelativeButton_OnDragStart = function(self) end
Nenue@122 55 local RelativeButton_OnDragStop = function(self) end
Nenue@122 56
Nenue@122 57
Nenue@121 58 function ConfigLayer:Update()
Nenue@121 59 if not self.anchorButtons then
Nenue@121 60 self.anchorButtons = {}
Nenue@121 61 for _, anchorPoint in ipairs(ANCHOR_BUTTON_TYPES) do
Nenue@121 62 local button = CreateFrame('Button', nil, self, 'VeneerAnchorButtonTemplate')
Nenue@121 63 button.anchorPoint = anchorPoint
Nenue@122 64 button:RegisterForClicks('AnyUp')
Nenue@122 65 button:SetScript('OnClick', AnchorButton_OnClick)
Nenue@121 66 button:SetPoint(anchorPoint)
Nenue@121 67 button:SetSize(16,16)
Nenue@121 68
Nenue@121 69 self.anchorButtons[anchorPoint] = button
Nenue@121 70 end
Nenue@121 71 end
Nenue@121 72
Nenue@121 73 for anchorPoint, button in pairs(self.anchorButtons) do
Nenue@121 74 if anchorPoint == self.handler.anchorPoint then
Nenue@121 75 button:GetNormalTexture():SetColorTexture(0,1,0,1)
Nenue@121 76 else
Nenue@121 77 button:GetNormalTexture():SetColorTexture(0.5,0.5,0.5,1)
Nenue@121 78 end
Nenue@121 79 end
Nenue@121 80
Nenue@122 81 if self.handler.anchorFrom and self.handler.anchorFrame then
Nenue@122 82 local rb = self.relativeButton
Nenue@122 83 if not rb then
Nenue@122 84 rb = CreateFrame('Button', nil, self, 'VeneerAnchorButtonTemplate')
Nenue@122 85 self.relativeButton = rb
Nenue@122 86 rb:RegisterForClicks('AnyUp')
Nenue@122 87 rb:RegisterForDrag('AnyDown')
Nenue@122 88 rb:SetScript('OnClick', RelativeButton_OnClick)
Nenue@122 89 rb:SetScript('OnDragStart', RelativeButton_OnDragStart)
Nenue@122 90 rb:SetScript('OnDragStop', RelativeButton_OnDragStop)
Nenue@122 91 end
Nenue@122 92
Nenue@122 93 print('|cFF00FF88Config|r',self.handler.anchorFrom, self.handler.anchorFrame)
Nenue@122 94 rb:SetPoint(self.handler.anchorFrom, _G[self.handler.anchorFrame], self.handler.anchorFrom, 0, 0)
Nenue@122 95 print(rb:GetPoint(1))
Nenue@122 96 rb:GetNormalTexture():SetColorTexture(1,1,1,1)
Nenue@122 97 rb:SetSize(16,16)
Nenue@122 98 end
Nenue@122 99
Nenue@122 100
Nenue@121 101 self:RegisterForDrag('LeftButton')
Nenue@121 102 end
Nenue@121 103
Nenue@122 104
Nenue@122 105
Nenue@121 106 function ConfigLayer:OnDragStart()
Nenue@122 107 self.originalX, self.originalY = self:GetCenter()
Nenue@122 108 self.handler:SetMovable(true)
Nenue@122 109 self.handler:StartMoving()
Nenue@121 110 end
Nenue@121 111 function ConfigLayer:OnDragStop()
Nenue@115 112
Nenue@122 113 local newX, newY = self:GetCenter()
Nenue@122 114 local dX = newX - self.originalX
Nenue@122 115 local dY = newY - self.originalY
Nenue@122 116 print('registering new X/Y:', dX, dY)
Nenue@122 117
Nenue@122 118
Nenue@122 119 self.handler:StopMovingOrSizing()
Nenue@90 120 end
Nenue@90 121
Nick@109 122 function ConfigLayer:OnUpdate()
Nenue@90 123 local handler = self:GetParent()
Nenue@90 124 handler.ConfigLayers = handler.ConfigLayers or {}
Nenue@90 125
Nenue@90 126 self.ConfigName:SetText(handler:GetName())
Nenue@90 127 self.ConfigID:SetText(handler:GetID())
Nenue@90 128 end
Nenue@90 129
Nick@109 130 -- Sets a state flag for use in OnUpdate conditionals
Nick@109 131 function Animation:OnPlay()
Nenue@90 132 PlaySoundKitID(229)
Nenue@90 133 self.animating = true
Nenue@90 134 print('|cFF00FF00Anim:OnPlay|r @', unpack(self.sourcePoint))
Nenue@90 135 end
Nick@109 136 function Animation:OnStop()
Nenue@90 137 PlaySoundKitID(229)
Nenue@90 138 self.animating = nil
Nenue@90 139 print('|cFF00FF00Anim:OnFinish|r @', unpack(self.destPoint))
Nenue@90 140 end
Nick@109 141 function Animation:OnFinished()
Nenue@90 142 PlaySoundKitID(229)
Nenue@90 143 self.animating = nil
Nenue@90 144 print('|cFF00FF00Anim:OnFinish|r @', unpack(self.destPoint))
Nenue@93 145 end
Nenue@93 146
Nenue@125 147
Nenue@125 148 function Handler:OnLoad()
Nenue@125 149 print(self:GetName(), 'loaded')
Nenue@125 150 self.debug = DEVIAN_WORKSPACE and function(...) _G.print(self:GetName(), ...) end or nop
Nenue@125 151 self.debug('OnLoad() template')
Nenue@125 152 end
Nenue@125 153
Nick@109 154 -- Replace if module requires anything besides fixing frame anchors
Nenue@125 155
Nenue@136 156 function Handler:OnEvent()
Nenue@136 157 end
Nick@109 158 function Handler:OnShow()
Nenue@93 159 self:Reanchor()
Nenue@125 160 _G.Veneer:DynamicReanchor()
Nenue@93 161 end
Nick@109 162 function Handler:OnHide()
Nenue@122 163 _G.Veneer:DynamicReanchor()
Nenue@93 164 end
Nick@109 165 function Handler:Reanchor (anchorAll)
Nenue@122 166 _G.Veneer:DynamicReanchor()
Nenue@98 167 end
Nick@109 168
Nick@109 169 -- Replace if module needs to do more than reconcile SavedVariables pointers
Nick@109 170 function Handler:Setup()
Nenue@115 171 print(self:GetName(), '|cFF00FF88Setup()')
Nenue@102 172 local configName = self:GetName():gsub('^Veneer', '')
Nenue@107 173 VeneerData[configName] = VeneerData[configName] or self.defaultSettings or {}
Nenue@102 174
Nenue@102 175 for k,v in pairs(self.data) do
Nenue@102 176 if not VeneerData[configName][k] then
Nenue@102 177 print('reconciling pre-data:', k, v)
Nenue@102 178 VeneerData[configName][k] = v
Nenue@102 179 end
Nenue@102 180 end
Nenue@115 181
Nenue@115 182 if self.EventList then
Nenue@115 183 for _, event in ipairs(self.EventList) do
Nenue@115 184 print(self:GetName(), event, 'registered')
Nenue@115 185 self:RegisterEvent(event)
Nenue@115 186 end
Nenue@115 187 end
Nenue@115 188
Nenue@107 189 local guid = UnitGUID('player')
Nenue@102 190 self.data = VeneerData[configName]
Nenue@107 191 self.data[guid] = self.data[guid] or {}
Nenue@107 192 self.profile = self.data[guid]
Nenue@102 193 print('data table loaded:', configName)
Nenue@102 194 self.initialized = true
Nenue@102 195 end
Nenue@98 196
Nick@109 197 -- Replace to stop collated outputs.
Nick@109 198 function Handler:Print(...)
Nenue@98 199 local txt = '|cFFFFFF00'..self:GetName()..'|r:'
Nenue@98 200 for i = 1, select('#', ...) do
Nenue@98 201 txt = txt .. ' '.. tostring(select(i, ...))
Nenue@98 202 end
Nenue@98 203 DEFAULT_CHAT_FRAME:AddMessage(txt)
Nenue@103 204 end
Nenue@103 205
Nick@109 206 -- Replace if not using the ConfigLayer template
Nick@109 207 function Handler:UpdateConfigLayers (configMode)
Nenue@103 208 -- Override to manage config visual elements when a config update is fired from /vn or login
Nenue@103 209 if not self:IsShown() then
Nenue@103 210 self:SetShown(configMode)
Nenue@103 211 self:Reanchor()
Nenue@103 212 end
Nenue@103 213 self.configMode = configMode
Nenue@90 214 end