Mercurial > wow > reaction
comparison Bar.lua @ 71:3d2cef5dc459
Implemented state anchoring and scaling
author | Flick <flickerstreak@gmail.com> |
---|---|
date | Wed, 04 Jun 2008 21:46:51 +0000 |
parents | 2c12e2b1752e |
children | aa88aed52124 |
comparison
equal
deleted
inserted
replaced
70:2c12e2b1752e | 71:3d2cef5dc459 |
---|---|
5 local InCombatLockdown = InCombatLockdown | 5 local InCombatLockdown = InCombatLockdown |
6 local floor = math.floor | 6 local floor = math.floor |
7 local min = math.min | 7 local min = math.min |
8 local format = string.format | 8 local format = string.format |
9 local GameTooltip = GameTooltip | 9 local GameTooltip = GameTooltip |
10 local SecureStateHeader_Refresh = SecureStateHeader_Refresh | |
10 | 11 |
11 | 12 |
12 | 13 |
13 -- update ReAction revision if this file is newer | 14 -- update ReAction revision if this file is newer |
14 local revision = tonumber(("$Revision$"):match("%d+")) | 15 local revision = tonumber(("$Revision$"):match("%d+")) |
167 f:SetPoint("TOPLEFT",x/scale,-y/scale) | 168 f:SetPoint("TOPLEFT",x/scale,-y/scale) |
168 f:SetScale(scale) | 169 f:SetScale(scale) |
169 self.buttons[f] = true | 170 self.buttons[f] = true |
170 end | 171 end |
171 | 172 |
173 | |
174 -- multi-state functions -- | |
172 function Bar:GetNumPages() | 175 function Bar:GetNumPages() |
173 return self.config.nPages or 1 | 176 return self.config.nPages or 1 |
174 end | 177 end |
175 | 178 |
176 function Bar:SetHideStates(s) | 179 function Bar:SetHideStates(s) |
181 end | 184 end |
182 SecureStateHeader_Refresh(self.frame) | 185 SecureStateHeader_Refresh(self.frame) |
183 end | 186 end |
184 | 187 |
185 function Bar:SetStateKeybind(key, state, defaultstate) | 188 function Bar:SetStateKeybind(key, state, defaultstate) |
189 -- set a keybind to toggle transitioning unconditionally to a state | |
186 -- use a tiny offscreen button to get around making the bar itself a clickable button | 190 -- use a tiny offscreen button to get around making the bar itself a clickable button |
187 local f = self.statebuttonframe | 191 local f = self.statebuttonframe |
188 local off = ("%s_off"):format(state) | 192 local off = ("%s_off"):format(state) |
189 if key then | 193 if key then |
190 if not f then | 194 if not f then |
218 | 222 |
219 function Bar:SetStatePageMap(state, map) -- map is a { ["statename"] = pagenumber } table | 223 function Bar:SetStatePageMap(state, map) -- map is a { ["statename"] = pagenumber } table |
220 local f = self.frame | 224 local f = self.frame |
221 local tmp = { } | 225 local tmp = { } |
222 for s, p in pairs(map) do | 226 for s, p in pairs(map) do |
223 table.insert(tmp, ("%s:%d"):format(s,p)) | 227 table.insert(tmp, ("%s:page%d"):format(s,p)) |
224 end | 228 end |
225 local spec = table.concat(tmp,";") | 229 local spec = table.concat(tmp,";") |
226 f:SetAttribute("statebutton",spec) | 230 f:SetAttribute("statebutton",spec) |
231 SecureStateHeader_Refresh(f) | |
227 end | 232 end |
228 | 233 |
229 function Bar:SetStateKeybindOverrideMap(states) -- 'states' is an array of state-names that should have keybind overrides enabled | 234 function Bar:SetStateKeybindOverrideMap(states) -- 'states' is an array of state-names that should have keybind overrides enabled |
230 local f = self.frame | 235 local f = self.frame |
231 for i = 1, #states do | 236 for i = 1, #states do |
232 local s = states[i] | 237 local s = states[i] |
233 states[i] = ("%s:%s"):format(s,s) | 238 states[i] = ("%s:%s"):format(s,s) |
234 end | 239 end |
235 table.insert(states,"_default") | 240 table.insert(states,"_defaultbindings") |
236 f:SetAttribute("statebindings",table.concat(states,";")) | 241 f:SetAttribute("statebindings",table.concat(states,";")) |
242 SecureStateHeader_Refresh(f) | |
237 for b in pairs(self.buttons) do | 243 for b in pairs(self.buttons) do |
238 -- TODO: signal child frames that they should | 244 -- TODO: signal child frames that they should maintain multiple bindings |
239 -- maintain multiple bindings | 245 end |
240 end | 246 end |
241 end | 247 |
248 local _ofskeys = { "point", "relpoint", "x", "y" } | |
249 function Bar:SetStateAnchorMap( map ) -- 'map' is a { ["statename"] = { point=point, relpoint=relpoint, x=x, y=y } } table | |
250 local f = self.frame | |
251 local c = self.config | |
252 local default = { point = c.anchor, relpoint = c.relativePoint, x = c.x, y = c.y } | |
253 for _, key in pairs(_ofskeys) do | |
254 local t = { } | |
255 for state, info in pairs(map) do | |
256 if info[key] then | |
257 table.insert(t, ("%s:%s"):format(state, info[key])) | |
258 end | |
259 end | |
260 if #t > 0 and default[key] then table.insert(t, tostring(default[key])) end | |
261 f:SetAttribute(("headofs%s"):format(key), table.concat(t,";") or "") | |
262 end | |
263 SecureStateHeader_Refresh(f) | |
264 end | |
265 | |
266 function Bar:SetStateScaleMap( map ) -- 'map' is a { ["statename"] = scalevalue } table | |
267 local f = self.frame | |
268 local t = { } | |
269 for state, scale in pairs(map) do | |
270 table.insert( t, ("%s:%s"):format(state,scale) ) | |
271 end | |
272 if #t > 0 then table.insert(t, "1.0") end | |
273 f:SetAttribute("headscale",table.concat(t,";") or "") | |
274 SecureStateHeader_Refresh(f) | |
275 end | |
276 | |
242 | 277 |
243 -- | 278 -- |
244 -- Bar config overlay | 279 -- Bar config overlay |
245 -- | 280 -- |
246 local CreateControls | 281 local CreateControls |
595 si1:Hide() | 630 si1:Hide() |
596 si2:Hide() | 631 si2:Hide() |
597 end | 632 end |
598 end | 633 end |
599 | 634 |
600 CreateControls = function(bar) | 635 function CreateControls(bar) |
601 local f = bar.frame | 636 local f = bar.frame |
602 | 637 |
603 f:SetMovable(true) | 638 f:SetMovable(true) |
604 f:SetResizable(true) | 639 f:SetResizable(true) |
605 f:SetClampedToScreen(true) | 640 f:SetClampedToScreen(true) |
645 label:SetTextColor(1,1,1,1) | 680 label:SetTextColor(1,1,1,1) |
646 label:SetText(bar:GetName()) | 681 label:SetText(bar:GetName()) |
647 label:Show() | 682 label:Show() |
648 bar.controlLabelString = label -- so that bar:SetName() can update it | 683 bar.controlLabelString = label -- so that bar:SetName() can update it |
649 | 684 |
650 local StopResize = function() | 685 local function StopResize() |
651 f:StopMovingOrSizing() | 686 f:StopMovingOrSizing() |
652 f.isMoving = false | 687 f.isMoving = false |
653 f:SetScript("OnUpdate",nil) | 688 f:SetScript("OnUpdate",nil) |
654 StoreSize(bar) | 689 StoreSize(bar) |
655 ClampToButtons(bar) | 690 ClampToButtons(bar) |
713 local tex = corner:CreateTexture(nil,"HIGHLIGHT") | 748 local tex = corner:CreateTexture(nil,"HIGHLIGHT") |
714 tex:SetTexture(1.0,0.82,0,0.7) | 749 tex:SetTexture(1.0,0.82,0,0.7) |
715 tex:SetBlendMode("ADD") | 750 tex:SetBlendMode("ADD") |
716 tex:SetAllPoints() | 751 tex:SetAllPoints() |
717 corner:RegisterForDrag("LeftButton","RightButton") | 752 corner:RegisterForDrag("LeftButton","RightButton") |
718 local updateTooltip = function() | 753 local function updateTooltip() |
719 local size, size2 = bar:GetButtonSize() | 754 local size, size2 = bar:GetButtonSize() |
720 local rows, cols, spacing = bar:GetButtonGrid() | 755 local rows, cols, spacing = bar:GetButtonGrid() |
721 size = (size == size2) and tostring(size) or format("%dx%d",size,size2) | 756 size = (size == size2) and tostring(size) or format("%dx%d",size,size2) |
722 GameTooltipTextRight4:SetText(size) | 757 GameTooltipTextRight4:SetText(size) |
723 GameTooltipTextRight5:SetText(tostring(spacing)) | 758 GameTooltipTextRight5:SetText(tostring(spacing)) |
861 -- Looking for a lightweight AceConfig3-struct-compatible | 896 -- Looking for a lightweight AceConfig3-struct-compatible |
862 -- replacement for Dewdrop, encapsulate here | 897 -- replacement for Dewdrop, encapsulate here |
863 -- Considering Blizzard's EasyMenu/UIDropDownMenu, but that's | 898 -- Considering Blizzard's EasyMenu/UIDropDownMenu, but that's |
864 -- a bit tricky to convert from AceConfig3-struct | 899 -- a bit tricky to convert from AceConfig3-struct |
865 local Dewdrop = AceLibrary("Dewdrop-2.0") | 900 local Dewdrop = AceLibrary("Dewdrop-2.0") |
866 OpenMenu = function(frame, opts) | 901 function OpenMenu (frame, opts) |
867 Dewdrop:Open(frame, "children", opts, "cursorX", true, "cursorY", true) | 902 Dewdrop:Open(frame, "children", opts, "cursorX", true, "cursorY", true) |
868 end | 903 end |
869 CloseMenu = function(frame) | 904 function CloseMenu(frame) |
870 if Dewdrop:GetOpenedParent() == frame then | 905 if Dewdrop:GetOpenedParent() == frame then |
871 Dewdrop:Close() | 906 Dewdrop:Close() |
872 end | 907 end |
873 end | 908 end |
874 end | 909 end |