diff Bar.lua @ 28:21bcaf8215ff

- converted to Ace3 - rearranged file layout - configGUI menus not working right now
author Flick <flickerstreak@gmail.com>
date Mon, 17 Mar 2008 18:24:53 +0000
parents ReAction_Bar.lua@f1e838841ce1
children 0d95ce7a9ec2
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Bar.lua	Mon Mar 17 18:24:53 2008 +0000
@@ -0,0 +1,146 @@
+local ReAction = ReAction
+local L = ReAction.L
+local _G = _G
+local CreateFrame = CreateFrame
+
+-- update ReAction revision if this file is newer
+local revision = tonumber(("$Revision: 1 $"):match("%d+"))
+if revision > ReAction.revision then
+  Reaction.revision = revision
+end
+
+------ BAR CLASS ------
+local Bar = { _classID = {} }
+
+local function Constructor( self, name, config )
+  self.name, self.config = name, config
+
+  if type(config) ~= "table" then
+    error("ReAction.Bar: config table required")
+  end
+
+  local f = CreateFrame("Frame",nil,config.parent or UIParent,"SecureStateDriverTemplate")
+  f:SetFrameStrata("MEDIUM")
+  config.width = config.width or 400
+  config.height = config.height or 80
+  f:SetWidth(config.width)
+  f:SetWidth(config.height)
+
+  self.frame = f
+  self:RefreshLayout()
+  self:ApplyAnchor()
+  f:Show()
+end
+
+function Bar:Destroy()
+  local f = self.frame
+  f:UnregisterAllEvents()
+  f:Hide()
+  f:SetParent(UIParent)
+  f:ClearAllPoints()
+  self.labelString = nil
+  self.controlFrame = nil
+  self.frame = nil
+  self.config = nil
+end
+
+function Bar:RefreshLayout()
+  ReAction:CallMethodOnAllModules("RefreshBar", self)
+end
+
+function Bar:ApplyAnchor()
+  local f, config = self.frame, self.config
+  f:SetWidth(config.width)
+  f:SetHeight(config.height)
+  local anchor = config.anchor
+  if anchor then
+    local anchorTo
+    if config.anchorTo then
+      anchorTo = ReAction:GetBar(config.anchorTo) or _G[config.anchorTo]
+    end
+    f:SetPoint(anchor, anchorTo, config.relativePoint, config.x or 0, config.y or 0)
+  else
+    f:SetPoint("CENTER")
+  end
+end
+
+function Bar:GetFrame()
+  return self.frame
+end
+
+function Bar:GetSize()
+  return self.frame:GetWidth() or 200, self.frame:GetHeight() or 200
+end
+
+function Bar:SetSize(w,h)
+  self.config.width = w
+  self.config.height = h
+end
+
+function Bar:GetButtonSize()
+  local w = self.config.btnWidth or 32
+  local h = self.config.btnHeight or 32
+  -- TODO: get from modules?
+  return w,h
+end
+
+function Bar:SetButtonSize(w,h)
+  if w > 0 and h > 0 then
+    self.config.btnWidth = w
+    self.config.btnHeight = h
+  end
+end
+
+function Bar:GetButtonGrid()
+  local cfg = self.config
+  local r = cfg.btnRows or 1
+  local c = cfg.btnColumns or 1
+  local s = cfg.spacing or 4
+  return r,c,s
+end
+
+function Bar:SetButtonGrid(r,c,s)
+  if r > 0 and c > 0 and s > 0 then
+    local cfg = self.config
+    cfg.btnRows = r
+    cfg.btnColumns = c
+    cfg.spacing = s
+  end
+end
+
+function Bar:GetName()
+  return self.name
+end
+
+function Bar:PlaceButton(f, idx, baseW, baseH)
+  local r, c, s = self:GetButtonGrid()
+  local bh, bw = self:GetButtonSize()
+  local row, col = floor((idx-1)/c), mod((idx-1),c) -- zero-based
+  local x, y = col*bw + (col+0.5)*s, row*bh + (row+0.5)*s
+  local scale = bw/baseW
+
+  f:ClearAllPoints()
+  f:SetPoint("TOPLEFT",x/scale,-y/scale)
+  f:SetScale(scale)
+--  f:Show()
+end
+
+
+
+------ Export as a class-factory ------
+ReAction.Bar = {
+  prototype = Bar,
+
+  IsInstance = function(self, x)
+    return type(x) == "table" and x._classID == Bar._classID
+  end,
+
+  new = function(self, ...)
+    local x = { }
+    for k,v in pairs(Bar) do
+      x[k] = v
+    end
+    Constructor(x, ...)
+    return x
+  end
+}