annotate Veneer.lua @ 76:83b3cdaae6a5

refactor into addons
author Nenue
date Sat, 27 Aug 2016 10:45:05 -0400
parents d9d16e67725c
children 0784b87f9722
rev   line source
Nenue@54 1 -- Veneer
Nenue@71 2 -- Base framework for making things draggable.
Nenue@0 3
Nenue@75 4 local vn, print = LibStub("LibKraken").register(Veneer)
Nenue@54 5
Nenue@0 6
Nenue@59 7 local defaults = {
Nenue@59 8 enableAll = true,
Nenue@59 9 enableModule = {
Nenue@59 10 BuffFrame = true,
Nenue@59 11 },
Nenue@59 12 BuffFrame = {
Nenue@59 13 width = 48,
Nenue@59 14 height = 48,
Nenue@59 15 }
Nenue@59 16 }
Nenue@71 17 local configMode
Nenue@71 18 local veneers = {}
Nenue@71 19
Nenue@71 20 do
Nenue@71 21 local anonID = 0
Nenue@71 22 local AnonymousName = function()
Nenue@71 23 anonID = anonID + 1
Nenue@71 24 return 'VN' .. anonID
Nenue@71 25 end
Nenue@71 26 end
Nenue@71 27
Nenue@72 28 local anchor_coefficients = {
Nenue@72 29 ['TOP'] = function(x, y) return x, y end,
Nenue@72 30 ['BOTTOM'] = function(x, y) return x,y end,
Nenue@72 31 ['LEFT'] = function(x, y) return x,y end,
Nenue@72 32 ['RIGHT'] = function(x,y) return x,y end,
Nenue@72 33 }
Nenue@72 34
Nenue@72 35 local VeneerButton_OnDragStart = function(self)
Nenue@72 36 self.startingLeft = self:GetLeft()
Nenue@72 37 self.startingBottom = self:GetBottom()
Nenue@72 38 self.anchors = self.anchors or {}
Nenue@72 39 table.wipe(self.anchors)
Nenue@72 40
Nenue@72 41 local frame = self:GetParent()
Nenue@72 42 local n = frame:GetNumPoints()
Nenue@72 43 for i = 1, n do
Nenue@72 44 local anchor, parent, relative, x, y = frame:GetPoint(i)
Nenue@72 45 self.anchors[i] = {
Nenue@72 46 anchor = anchor,
Nenue@72 47 parent = parent,
Nenue@72 48 relative = relative,
Nenue@72 49 x = x,
Nenue@72 50 y = y
Nenue@72 51 }
Nenue@72 52 end
Nenue@72 53
Nenue@72 54 print(self:GetName(), 'start moving', self.startingLeft, self.startingBottom)
Nenue@72 55 self:StartMoving()
Nenue@72 56 end
Nenue@72 57
Nenue@72 58 local VeneerButton_OnDragStop = function(self)
Nenue@72 59 self:StopMovingOrSizing()
Nenue@72 60 if self.OnDragStop then
Nenue@72 61 self.OnDragStop(self)
Nenue@72 62 else
Nenue@72 63 local frame = self:GetParent()
Nenue@72 64 local dx = self:GetLeft() - self.startingLeft
Nenue@72 65 local dy = self:GetBottom() - self.startingBottom
Nenue@72 66
Nenue@72 67 frame:ClearAllPoints()
Nenue@72 68 for i, point in ipairs(self.anchors) do
Nenue@72 69 frame:SetPoint(point.anchor, point.parent, point.relative, point.x + dx, point.y + dy)
Nenue@72 70 print('adjusting anchor', point.anchor, point.parent, point.relative, point.x + dx, point.y + dy)
Nenue@72 71 end
Nenue@72 72 end
Nenue@72 73 end
Nenue@72 74
Nenue@72 75 local Veneer_FixMovers = function()
Nenue@72 76 for frame, veneer in pairs(veneers) do
Nenue@72 77 if veneer:IsMoving() then
Nenue@72 78 VeneerButton_OnDragStop(veneer)
Nenue@72 79 end
Nenue@72 80 end
Nenue@72 81 end
Nenue@71 82
Nenue@71 83 local VeneerButton_Update = function(self)
Nenue@71 84 if configMode then
Nenue@72 85 self:SetScript('OnDragStart', VeneerButton_OnDragStart)
Nenue@72 86 self:SetScript('OnDragStop', VeneerButton_OnDragStop)
Nenue@72 87 self:SetMovable(true)
Nenue@72 88 self:EnableMouse(true)
Nenue@71 89 self:RegisterForDrag('LeftButton')
Nenue@71 90
Nenue@71 91 self.bg:SetColorTexture(0,1,0,0.5)
Nenue@72 92 for i, region in ipairs(self.configLayers) do
Nenue@72 93 region:Show()
Nenue@72 94 end
Nenue@72 95 self:Show()
Nenue@71 96 else
Nenue@71 97
Nenue@71 98 self:SetScript('OnDragStart', self.StartMoving)
Nenue@71 99 self:SetScript('OnDragStop', self.StopMovingOrSizing)
Nenue@71 100 self:SetMovable(false)
Nenue@71 101 self:EnableMouse(false)
Nenue@71 102
Nenue@71 103 self.bg:SetColorTexture(0,1,0,0)
Nenue@72 104 for i, region in ipairs(self.configLayers) do
Nenue@72 105 region:Hide()
Nenue@72 106 end
Nenue@72 107 if self.isHidden then
Nenue@72 108 self:Hide()
Nenue@72 109 end
Nenue@72 110
Nenue@71 111 end
Nenue@71 112 end
Nenue@71 113
Nenue@71 114 local ToggleVeneerConfig = function()
Nenue@71 115 if configMode then
Nenue@71 116 configMode = false
Nenue@71 117 vn:print('Config mode off.')
Nenue@71 118 else
Nenue@71 119 configMode = true
Nenue@71 120 vn:print('Config mode on.')
Nenue@71 121 end
Nenue@71 122
Nenue@71 123 for frame, veneer in pairs(veneers) do
Nenue@71 124 VeneerButton_Update(veneer)
Nenue@71 125 end
Nenue@71 126 end
Nenue@71 127
Nenue@71 128 local VeneerButton_OnShow = function(self)
Nenue@71 129 VeneerButton_Update(self)
Nenue@71 130 end
Nenue@71 131
Nenue@73 132 vn.GetVeneer = function(frame, template)
Nenue@71 133 if not frame then
Nenue@71 134 print('|cFFFF4400Unable to acquire frame...|r')
Nenue@71 135 return
Nenue@71 136 end
Nenue@71 137
Nenue@71 138
Nenue@71 139 if veneers[frame] then
Nenue@71 140 return veneers[frame]
Nenue@71 141 end
Nenue@71 142
Nenue@72 143 local name = (frame:GetName() or AnonymousName())..'Veneer'
Nenue@73 144 local veneer = CreateFrame('Frame', name, frame, template or 'VeneerTemplate')
Nenue@72 145 print('+veneer', name)
Nenue@71 146
Nenue@71 147 veneer:SetAllPoints(frame)
Nenue@71 148 veneer:SetParent(frame)
Nenue@72 149 veneer.label:SetText(name)
Nenue@74 150 veneer.bg:SetColorTexture(0,0,0,0)
Nenue@71 151 veneer:Hide()
Nenue@71 152 veneer:EnableMouse(false)
Nenue@71 153
Nenue@71 154 veneer:SetScript('OnShow', VeneerButton_OnShow)
Nenue@71 155
Nenue@71 156 -- find current X/Y
Nenue@71 157 veneer.currentLeft = frame:GetLeft()
Nenue@71 158 veneer.currentTop = frame:GetTop()
Nenue@71 159
Nenue@72 160
Nenue@71 161 veneers[frame] = veneer
Nenue@71 162 return veneers[frame]
Nenue@71 163 end
Nenue@0 164
Nenue@59 165 vn.init = function()
Nenue@59 166 if (not VeneerData) or (not VeneerData.version) then
Nenue@59 167 VeneerData = defaults
Nenue@0 168 end
Nenue@59 169 vn.db = VeneerData
Nenue@71 170 end
Nenue@62 171
Nenue@71 172
Nenue@71 173 SLASH_VENEER1 = "/veneer"
Nenue@71 174 SLASH_VENEER2 = "/vn"
Nenue@71 175
Nenue@75 176 SlashCmdList.VENEER = function(cmd)
Nenue@75 177 for i, module in pairs(vn.modules) do
Nenue@75 178 if module.cmd then
Nenue@75 179 local result = module.cmd(cmd)
Nenue@75 180 if result then
Nenue@75 181 return
Nenue@75 182 end
Nenue@75 183 end
Nenue@75 184 end
Nenue@75 185
Nenue@71 186 ToggleVeneerConfig()
Nenue@59 187 end