Mercurial > wow > reaction
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 27:f1e838841ce1 | 28:21bcaf8215ff |
|---|---|
| 1 local ReAction = ReAction | |
| 2 local L = ReAction.L | |
| 3 local _G = _G | |
| 4 local CreateFrame = CreateFrame | |
| 5 | |
| 6 -- update ReAction revision if this file is newer | |
| 7 local revision = tonumber(("$Revision: 1 $"):match("%d+")) | |
| 8 if revision > ReAction.revision then | |
| 9 Reaction.revision = revision | |
| 10 end | |
| 11 | |
| 12 ------ BAR CLASS ------ | |
| 13 local Bar = { _classID = {} } | |
| 14 | |
| 15 local function Constructor( self, name, config ) | |
| 16 self.name, self.config = name, config | |
| 17 | |
| 18 if type(config) ~= "table" then | |
| 19 error("ReAction.Bar: config table required") | |
| 20 end | |
| 21 | |
| 22 local f = CreateFrame("Frame",nil,config.parent or UIParent,"SecureStateDriverTemplate") | |
| 23 f:SetFrameStrata("MEDIUM") | |
| 24 config.width = config.width or 400 | |
| 25 config.height = config.height or 80 | |
| 26 f:SetWidth(config.width) | |
| 27 f:SetWidth(config.height) | |
| 28 | |
| 29 self.frame = f | |
| 30 self:RefreshLayout() | |
| 31 self:ApplyAnchor() | |
| 32 f:Show() | |
| 33 end | |
| 34 | |
| 35 function Bar:Destroy() | |
| 36 local f = self.frame | |
| 37 f:UnregisterAllEvents() | |
| 38 f:Hide() | |
| 39 f:SetParent(UIParent) | |
| 40 f:ClearAllPoints() | |
| 41 self.labelString = nil | |
| 42 self.controlFrame = nil | |
| 43 self.frame = nil | |
| 44 self.config = nil | |
| 45 end | |
| 46 | |
| 47 function Bar:RefreshLayout() | |
| 48 ReAction:CallMethodOnAllModules("RefreshBar", self) | |
| 49 end | |
| 50 | |
| 51 function Bar:ApplyAnchor() | |
| 52 local f, config = self.frame, self.config | |
| 53 f:SetWidth(config.width) | |
| 54 f:SetHeight(config.height) | |
| 55 local anchor = config.anchor | |
| 56 if anchor then | |
| 57 local anchorTo | |
| 58 if config.anchorTo then | |
| 59 anchorTo = ReAction:GetBar(config.anchorTo) or _G[config.anchorTo] | |
| 60 end | |
| 61 f:SetPoint(anchor, anchorTo, config.relativePoint, config.x or 0, config.y or 0) | |
| 62 else | |
| 63 f:SetPoint("CENTER") | |
| 64 end | |
| 65 end | |
| 66 | |
| 67 function Bar:GetFrame() | |
| 68 return self.frame | |
| 69 end | |
| 70 | |
| 71 function Bar:GetSize() | |
| 72 return self.frame:GetWidth() or 200, self.frame:GetHeight() or 200 | |
| 73 end | |
| 74 | |
| 75 function Bar:SetSize(w,h) | |
| 76 self.config.width = w | |
| 77 self.config.height = h | |
| 78 end | |
| 79 | |
| 80 function Bar:GetButtonSize() | |
| 81 local w = self.config.btnWidth or 32 | |
| 82 local h = self.config.btnHeight or 32 | |
| 83 -- TODO: get from modules? | |
| 84 return w,h | |
| 85 end | |
| 86 | |
| 87 function Bar:SetButtonSize(w,h) | |
| 88 if w > 0 and h > 0 then | |
| 89 self.config.btnWidth = w | |
| 90 self.config.btnHeight = h | |
| 91 end | |
| 92 end | |
| 93 | |
| 94 function Bar:GetButtonGrid() | |
| 95 local cfg = self.config | |
| 96 local r = cfg.btnRows or 1 | |
| 97 local c = cfg.btnColumns or 1 | |
| 98 local s = cfg.spacing or 4 | |
| 99 return r,c,s | |
| 100 end | |
| 101 | |
| 102 function Bar:SetButtonGrid(r,c,s) | |
| 103 if r > 0 and c > 0 and s > 0 then | |
| 104 local cfg = self.config | |
| 105 cfg.btnRows = r | |
| 106 cfg.btnColumns = c | |
| 107 cfg.spacing = s | |
| 108 end | |
| 109 end | |
| 110 | |
| 111 function Bar:GetName() | |
| 112 return self.name | |
| 113 end | |
| 114 | |
| 115 function Bar:PlaceButton(f, idx, baseW, baseH) | |
| 116 local r, c, s = self:GetButtonGrid() | |
| 117 local bh, bw = self:GetButtonSize() | |
| 118 local row, col = floor((idx-1)/c), mod((idx-1),c) -- zero-based | |
| 119 local x, y = col*bw + (col+0.5)*s, row*bh + (row+0.5)*s | |
| 120 local scale = bw/baseW | |
| 121 | |
| 122 f:ClearAllPoints() | |
| 123 f:SetPoint("TOPLEFT",x/scale,-y/scale) | |
| 124 f:SetScale(scale) | |
| 125 -- f:Show() | |
| 126 end | |
| 127 | |
| 128 | |
| 129 | |
| 130 ------ Export as a class-factory ------ | |
| 131 ReAction.Bar = { | |
| 132 prototype = Bar, | |
| 133 | |
| 134 IsInstance = function(self, x) | |
| 135 return type(x) == "table" and x._classID == Bar._classID | |
| 136 end, | |
| 137 | |
| 138 new = function(self, ...) | |
| 139 local x = { } | |
| 140 for k,v in pairs(Bar) do | |
| 141 x[k] = v | |
| 142 end | |
| 143 Constructor(x, ...) | |
| 144 return x | |
| 145 end | |
| 146 } |
