Mercurial > wow > reaction
comparison State.lua @ 103:890e4c4ab143
- added alpha settings (base and stateful)
- added scale settings (stateful only)
- updated overlay to work with stateful anchor/scale (though when in a state with scale, the button size/spacing can't be manipulated)
author | Flick <flickerstreak@gmail.com> |
---|---|
date | Thu, 06 Nov 2008 01:28:07 +0000 |
parents | 3699d7dad312 |
children |
comparison
equal
deleted
inserted
replaced
102:ad49739d110d | 103:890e4c4ab143 |
---|---|
74 | 74 |
75 -- PRIVATE -- | 75 -- PRIVATE -- |
76 do | 76 do |
77 | 77 |
78 -- the field names must match the field names of the options table, below | 78 -- the field names must match the field names of the options table, below |
79 -- the field values are secure snippets | 79 -- the field values are secure snippets or 'true' to skip the snippet for that property. |
80 local properties = { | 80 local properties = { |
81 hide = | 81 hide = |
82 [[ | 82 [[ |
83 local h = hide and hide[state] and not showAll | 83 local h = hide and hide[state] and not showAll |
84 if h ~= hidden then | 84 if h ~= hidden then |
88 self:Show() | 88 self:Show() |
89 end | 89 end |
90 hidden = h | 90 hidden = h |
91 end | 91 end |
92 if showAll then | 92 if showAll then |
93 control:CallMethod("UpdateHiddenLabel",hide[state]) | 93 control:CallMethod("UpdateHiddenLabel", hide and hide[state]) |
94 end | 94 end |
95 ]], | 95 ]], |
96 | 96 |
97 --keybindState TODO: broken | 97 --keybindState TODO: broken |
98 | 98 |
120 anchorFrame = true, | 120 anchorFrame = true, |
121 anchorPoint = true, | 121 anchorPoint = true, |
122 anchorRelPoint = true, | 122 anchorRelPoint = true, |
123 anchorX = true, | 123 anchorX = true, |
124 anchorY = true, | 124 anchorY = true, |
125 enableScale = true, | 125 |
126 | |
127 enableScale = | |
128 [[ | |
129 local old_scale = scalestate | |
130 scalestate = (enableScale and enableScale[state]) and state | |
131 if old_scale ~= scalestate or not set_state then | |
132 if scalestate and scale then | |
133 if scale[state] then | |
134 self:SetScale(scale[state]) | |
135 end | |
136 else | |
137 self:SetScale(1.0) | |
138 end | |
139 end | |
140 ]], | |
141 -- enableScale handles scale | |
126 scale = true, | 142 scale = true, |
143 | |
144 enableAlpha = | |
145 [[ | |
146 local old_alpha = alphastate | |
147 alphastate = (enableAlpha and enableAlpha[state]) and state | |
148 if old_alpha ~= alphastate or not set_state then | |
149 control:CallMethod("UpdateAlpha", alphastate and alpha[state] or defaultAlpha) | |
150 end | |
151 ]], | |
152 -- enableAlpha handles alpha | |
153 alpha = true, | |
127 } | 154 } |
128 | 155 |
129 local weak = { __mode = "k" } | 156 local weak = { __mode = "k" } |
130 local statedrivers = setmetatable( { }, weak ) | 157 local statedrivers = setmetatable( { }, weak ) |
131 local keybinds = setmetatable( { }, weak ) | 158 local keybinds = setmetatable( { }, weak ) |
154 for i = 1, #propfuncs do | 181 for i = 1, #propfuncs do |
155 control:RunAttribute("func-"..propfuncs[i]) | 182 control:RunAttribute("func-"..propfuncs[i]) |
156 end | 183 end |
157 | 184 |
158 control:ChildUpdate() | 185 control:ChildUpdate() |
186 | |
187 if oldState ~= state then | |
188 control:CallMethod("StateRefresh", state) | |
189 end | |
159 ]] | 190 ]] |
160 | 191 |
161 local onClickHandler = | 192 local onClickHandler = |
162 -- function OnClick( self, button, down ) | 193 -- function OnClick( self, button, down ) |
163 [[ | 194 [[ |
165 state_override = nil -- toggle | 196 state_override = nil -- toggle |
166 else | 197 else |
167 state_override = button | 198 state_override = button |
168 end | 199 end |
169 ]] .. onStateHandler | 200 ]] .. onStateHandler |
201 | |
202 local function UpdateAlpha( frame, alpha ) | |
203 if alpha then | |
204 frame:SetAlpha(alpha) | |
205 end | |
206 end | |
170 | 207 |
171 -- Construct a lua assignment as a code string and execute it within the header | 208 -- Construct a lua assignment as a code string and execute it within the header |
172 -- frame's sandbox. 'value' must be a string, boolean, number, or nil. If called | 209 -- frame's sandbox. 'value' must be a string, boolean, number, or nil. If called |
173 -- with four arguments, then it treats 'varname' as an existing global table and | 210 -- with four arguments, then it treats 'varname' as an existing global table and |
174 -- sets a key-value pair. For a slight efficiency boost, pass the values in as | 211 -- sets a key-value pair. For a slight efficiency boost, pass the values in as |
201 local point, frame, relPoint, x, y = bar:GetAnchor() | 238 local point, frame, relPoint, x, y = bar:GetAnchor() |
202 SetHandlerData(bar, "defaultAnchor", point, "point") | 239 SetHandlerData(bar, "defaultAnchor", point, "point") |
203 SetHandlerData(bar, "defaultAnchor", relPoint, "relPoint") | 240 SetHandlerData(bar, "defaultAnchor", relPoint, "relPoint") |
204 SetHandlerData(bar, "defaultAnchor", x, "x") | 241 SetHandlerData(bar, "defaultAnchor", x, "x") |
205 SetHandlerData(bar, "defaultAnchor", y, "y") | 242 SetHandlerData(bar, "defaultAnchor", y, "y") |
243 SetHandlerData(bar, "defaultAlpha", bar:GetAlpha()) | |
206 | 244 |
207 local f = bar:GetFrame() | 245 local f = bar:GetFrame() |
246 f.UpdateAlpha = UpdateAlpha | |
208 SetFrameRef(f, "defaultAnchor", _G[frame or "UIParent"]) | 247 SetFrameRef(f, "defaultAnchor", _G[frame or "UIParent"]) |
209 f:Execute( | 248 f:Execute( |
210 [[ | 249 [[ |
211 defaultAnchor.frame = self:GetAttribute("frameref-defaultAnchor") | 250 defaultAnchor.frame = self:GetAttribute("frameref-defaultAnchor") |
212 ]]) | 251 ]]) |
227 | 266 |
228 if not f.UpdateHiddenLabel then | 267 if not f.UpdateHiddenLabel then |
229 function f:UpdateHiddenLabel(hide) | 268 function f:UpdateHiddenLabel(hide) |
230 bar:SetLabelSubtext( hide and L["Hidden"] ) | 269 bar:SetLabelSubtext( hide and L["Hidden"] ) |
231 end | 270 end |
271 end | |
272 | |
273 function f:StateRefresh( state ) | |
274 bar:RefreshControls() | |
232 end | 275 end |
233 | 276 |
234 local props = { } | 277 local props = { } |
235 for p, h in pairs(properties) do | 278 for p, h in pairs(properties) do |
236 if type(h) == "string" then | 279 if type(h) == "string" then |
735 }, | 778 }, |
736 scale = { | 779 scale = { |
737 name = L["Scale"], | 780 name = L["Scale"], |
738 order = 2, | 781 order = 2, |
739 type = "range", | 782 type = "range", |
740 min = 0.1, | 783 min = 0.25, |
741 max = 2.5, | 784 max = 2.5, |
742 step = 0.05, | 785 step = 0.05, |
743 isPercent = true, | 786 isPercent = true, |
744 set = "SetProp", | 787 set = "SetProp", |
745 get = "GetProp", | 788 get = "GetScale", |
746 disabled = "GetScaleDisabled", | 789 disabled = "GetScaleDisabled", |
747 hidden = "GetScaleDisabled", | 790 hidden = "GetScaleDisabled", |
791 }, | |
792 }, | |
793 }, | |
794 alpha = { | |
795 name = L["Transparency"], | |
796 order = 94, | |
797 type = "group", | |
798 inline = true, | |
799 args = { | |
800 enableAlpha = { | |
801 name = L["Set Transparency"], | |
802 order = 1, | |
803 type = "toggle", | |
804 set = "SetProp", | |
805 get = "GetProp", | |
806 }, | |
807 alpha = { | |
808 name = L["Transparency"], | |
809 order = 2, | |
810 type = "range", | |
811 min = 0, | |
812 max = 1, | |
813 step = 0.01, | |
814 bigStep = 0.05, | |
815 isPercent = true, | |
816 set = "SetProp", | |
817 get = "GetAlpha", | |
818 disabled = "GetAlphaDisabled", | |
819 hidden = "GetAlphaDisabled", | |
748 }, | 820 }, |
749 }, | 821 }, |
750 }, | 822 }, |
751 }, | 823 }, |
752 plugins = { } | 824 plugins = { } |
1051 | 1123 |
1052 function StateHandler:GetAnchorPointProp(info) | 1124 function StateHandler:GetAnchorPointProp(info) |
1053 return self:GetProp(info) or "NONE" | 1125 return self:GetProp(info) or "NONE" |
1054 end | 1126 end |
1055 | 1127 |
1128 function StateHandler:GetScale(info) | |
1129 return self:GetProp(info) or 1.0 | |
1130 end | |
1131 | |
1056 function StateHandler:GetScaleDisabled() | 1132 function StateHandler:GetScaleDisabled() |
1057 return not GetProperty(self.bar, self:GetName(), "enableScale") | 1133 return not GetProperty(self.bar, self:GetName(), "enableScale") |
1134 end | |
1135 | |
1136 function StateHandler:GetAlpha(info) | |
1137 return self:GetProp(info) or 1.0 | |
1138 end | |
1139 | |
1140 function StateHandler:GetAlphaDisabled() | |
1141 return not GetProperty(self.bar, self:GetName(), "enableAlpha") | |
1058 end | 1142 end |
1059 | 1143 |
1060 function StateHandler:SetType(info, value) | 1144 function StateHandler:SetType(info, value) |
1061 self:SetRuleField("type", value) | 1145 self:SetRuleField("type", value) |
1062 self:FixAll() | 1146 self:FixAll() |
1240 | 1324 |
1241 function module:UnregisterStateProperty( field ) | 1325 function module:UnregisterStateProperty( field ) |
1242 UnregisterProperty(field) | 1326 UnregisterProperty(field) |
1243 UnregisterPropertyOptions(field) | 1327 UnregisterPropertyOptions(field) |
1244 end | 1328 end |
1329 | |
1330 | |
1331 -- Export methods to Bar class -- | |
1332 | |
1333 function ReAction.Bar:GetState() | |
1334 return GetManagedEnvironment(self:GetFrame()).state | |
1335 end | |
1336 | |
1337 ReAction.Bar.GetStateProperty = GetProperty | |
1338 ReAction.Bar.SetStateProperty = SetProperty |