view Veneer.lua @ 71:6f8661094643

- obtains veneer objects through a common function and track them as a unified table.
author Nenue
date Tue, 23 Aug 2016 06:35:08 -0400
parents ef4116179e2f
children d80db9a9b7e4
line wrap: on
line source
-- Veneer
-- Base framework for making things draggable.

local vn, print = LibStub("LibKraken").register(VeneerController)


local defaults = {
  enableAll = true,
  enableModule = {
    BuffFrame = true,
  },
  BuffFrame = {
    width = 48,
    height = 48,
  }
}
local configMode
local veneers = {}

do
  local anonID = 0
  local AnonymousName = function()
    anonID = anonID + 1
    return 'VN' .. anonID
  end
end


local VeneerButton_Update = function(self)
  if configMode then
    self:SetScript('OnDragStart', self.StartMoving)
    self:SetScript('OnDragStop', self.StopMovingOrSizing)
    self:SetMovable(false)
    self:EnableMouse(false)
    self:RegisterForDrag('LeftButton')

    self.bg:SetColorTexture(0,1,0,0.5)
  else

    self:SetScript('OnDragStart', self.StartMoving)
    self:SetScript('OnDragStop', self.StopMovingOrSizing)
    self:SetMovable(false)
    self:EnableMouse(false)

    self.bg:SetColorTexture(0,1,0,0)
  end
end

local ToggleVeneerConfig = function()
  if configMode then
    configMode = false
    vn:print('Config mode off.')
  else
    configMode = true
    vn:print('Config mode on.')
  end

  for frame, veneer in pairs(veneers) do
    VeneerButton_Update(veneer)
  end
end

local VeneerButton_OnShow = function(self)
  VeneerButton_Update(self)
end

vn.GetVeneer = function(frame)
  if not frame then
    print('|cFFFF4400Unable to acquire frame...|r')
    return
  end


  if veneers[frame] then
    return veneers[frame]
  end

  local veneer = CreateFrame('Frame', (frame:GetName() or AnonymousName())..'Veneer', UIParent)

  veneer:SetAllPoints(frame)
  veneer:SetParent(frame)
  veneer.bg = veneer:CreateTexture()
  veneer.bg:SetColorTexture(1,1,1,0)
  veneer.bg:SetAllPoints(veneer)
  veneer.bg:Show()
  veneer:Hide()
  veneer:EnableMouse(false)

  veneer:SetScript('OnShow', VeneerButton_OnShow)

  -- find current X/Y
  veneer.currentLeft = frame:GetLeft()
  veneer.currentTop = frame:GetTop()

  veneers[frame] = veneer
  return veneers[frame]
end

vn.init = function()
  if (not VeneerData) or (not VeneerData.version) then
    VeneerData = defaults
  end
  vn.db = VeneerData
end


vn.wrap = function(module)
  vn.modules = vn.modules or {}
  tinsert(vn.modules, module)
end

SLASH_VENEER1 = "/veneer"
SLASH_VENEER2 = "/vn"

SlashCmdList.VENEER = function()
  ToggleVeneerConfig()
end