Mercurial > wow > reaction
comparison modules/Action.lua @ 237:704f4a05a1d7
Demodulificate all bar options (except state options)
| author | Flick |
|---|---|
| date | Thu, 24 Mar 2011 13:11:30 -0700 |
| parents | 0e20f65375d5 |
| children |
comparison
equal
deleted
inserted
replaced
| 236:dcdc0235d489 | 237:704f4a05a1d7 |
|---|---|
| 10 -- module declaration | 10 -- module declaration |
| 11 local moduleID = "Action" | 11 local moduleID = "Action" |
| 12 local module = ReAction:NewModule( moduleID ) | 12 local module = ReAction:NewModule( moduleID ) |
| 13 | 13 |
| 14 -- Class declarations | 14 -- Class declarations |
| 15 local Button = ReAction.Button.Action -- see /classes/ActionButton.lua | |
| 16 local Handle = { } | |
| 17 local PropHandler = { } | 15 local PropHandler = { } |
| 18 | 16 |
| 19 -- Event handlers | 17 -- Event handlers |
| 20 function module:OnInitialize() | 18 function module:OnInitialize() |
| 21 self.handles = setmetatable({ }, weak) | 19 self.handles = setmetatable({ }, weak) |
| 22 | |
| 23 ReAction:RegisterBarOptionGenerator(self, "GetBarOptions") | |
| 24 end | 20 end |
| 25 | 21 |
| 26 function module:OnEnable() | 22 function module:OnEnable() |
| 27 ReAction:GetModule("State"):RegisterStateProperty("page", nil, PropHandler.GetOptions(), PropHandler) | 23 ReAction:GetModule("State"):RegisterStateProperty("page", nil, PropHandler.GetOptions(), PropHandler) |
| 28 end | 24 end |
| 29 | 25 |
| 30 function module:OnDisable() | 26 function module:OnDisable() |
| 31 ReAction:GetModule("State"):UnregisterStateProperty("page") | 27 ReAction:GetModule("State"):UnregisterStateProperty("page") |
| 32 end | 28 end |
| 33 | |
| 34 | |
| 35 | |
| 36 ---- Interface ---- | |
| 37 function module:GetBarOptions(bar) | |
| 38 self.handles[bar] = self.handles[bar] or Handle:New(bar) | |
| 39 return self.handles[bar]:GetOptions() | |
| 40 end | |
| 41 | |
| 42 | |
| 43 ---- Bar Handle ---- | |
| 44 | |
| 45 do | |
| 46 local options = { | |
| 47 hideEmpty = { | |
| 48 name = L["Hide Empty Buttons"], | |
| 49 order = 1, | |
| 50 type = "toggle", | |
| 51 width = "double", | |
| 52 get = "GetHideEmpty", | |
| 53 set = "SetHideEmpty", | |
| 54 }, | |
| 55 lockButtons = { | |
| 56 name = L["Lock Buttons"], | |
| 57 desc = L["Prevents picking up/dragging actions (use SHIFT to override this behavior)"], | |
| 58 order = 2, | |
| 59 type = "toggle", | |
| 60 get = "GetLockButtons", | |
| 61 set = "SetLockButtons", | |
| 62 }, | |
| 63 lockOnlyCombat = { | |
| 64 name = L["Only in Combat"], | |
| 65 desc = L["Only lock the buttons when in combat"], | |
| 66 order = 3, | |
| 67 type = "toggle", | |
| 68 disabled = "LockButtonsCombatDisabled", | |
| 69 get = "GetLockButtonsCombat", | |
| 70 set = "SetLockButtonsCombat", | |
| 71 }, | |
| 72 pages = { | |
| 73 name = L["# Pages"], | |
| 74 desc = L["Use the Dynamic State tab to specify page transitions"], | |
| 75 order = 4, | |
| 76 type = "range", | |
| 77 min = 1, | |
| 78 max = 10, | |
| 79 step = 1, | |
| 80 get = "GetNumPages", | |
| 81 set = "SetNumPages", | |
| 82 }, | |
| 83 mindcontrol = { | |
| 84 name = L["Mind Control Support"], | |
| 85 desc = L["When possessing a target (e.g. via Mind Control), map the first 12 buttons of this bar to the possessed target's actions."], | |
| 86 order = 5, | |
| 87 type = "toggle", | |
| 88 width = "double", | |
| 89 set = "SetMindControl", | |
| 90 get = "GetMindControl", | |
| 91 }, | |
| 92 vehicle = { | |
| 93 name = L["Vehicle Support"], | |
| 94 desc = L["When on a vehicle, map the first 6 buttons of this bar to the vehicle actions. The vehicle-exit button is mapped to the 7th button. Pitch controls are not supported."], | |
| 95 order = 6, | |
| 96 type = "toggle", | |
| 97 width = "double", | |
| 98 get = "GetVehicle", | |
| 99 set = "SetVehicle", | |
| 100 }, | |
| 101 actions = { | |
| 102 name = L["Edit Action IDs"], | |
| 103 order = 7, | |
| 104 type = "group", | |
| 105 inline = true, | |
| 106 args = { | |
| 107 method = { | |
| 108 name = L["Assign"], | |
| 109 order = 1, | |
| 110 type = "select", | |
| 111 width = "double", | |
| 112 values = { [0] = L["Choose Method..."], | |
| 113 [1] = L["Individually"], | |
| 114 [2] = L["All at Once"], }, | |
| 115 get = "GetActionEditMethod", | |
| 116 set = "SetActionEditMethod", | |
| 117 }, | |
| 118 rowSelect = { | |
| 119 name = L["Row"], | |
| 120 desc = L["Rows are numbered top to bottom"], | |
| 121 order = 2, | |
| 122 type = "select", | |
| 123 width = "half", | |
| 124 hidden = "IsButtonSelectHidden", | |
| 125 values = "GetRowList", | |
| 126 get = "GetSelectedRow", | |
| 127 set = "SetSelectedRow", | |
| 128 }, | |
| 129 colSelect = { | |
| 130 name = L["Col"], | |
| 131 desc = L["Columns are numbered left to right"], | |
| 132 order = 3, | |
| 133 type = "select", | |
| 134 width = "half", | |
| 135 hidden = "IsButtonSelectHidden", | |
| 136 values = "GetColumnList", | |
| 137 get = "GetSelectedColumn", | |
| 138 set = "SetSelectedColumn", | |
| 139 }, | |
| 140 pageSelect = { | |
| 141 name = L["Page"], | |
| 142 order = 4, | |
| 143 type = "select", | |
| 144 width = "half", | |
| 145 hidden = "IsPageSelectHidden", | |
| 146 values = "GetPageList", | |
| 147 get = "GetSelectedPage", | |
| 148 set = "SetSelectedPage", | |
| 149 }, | |
| 150 single = { | |
| 151 name = L["Action ID"], | |
| 152 usage = L["Specify ID 1-120"], | |
| 153 order = 5, | |
| 154 type = "input", | |
| 155 width = "half", | |
| 156 hidden = "IsButtonSelectHidden", | |
| 157 get = "GetActionID", | |
| 158 set = "SetActionID", | |
| 159 validate = "ValidateActionID", | |
| 160 }, | |
| 161 multi = { | |
| 162 name = L["ID List"], | |
| 163 usage = L["Specify a comma-separated list of IDs for each button in the bar (in order). Separate multiple pages with semicolons (;)"], | |
| 164 order = 6, | |
| 165 type = "input", | |
| 166 multiline = true, | |
| 167 width = "double", | |
| 168 hidden = "IsMultiIDHidden", | |
| 169 get = "GetMultiID", | |
| 170 set = "SetMultiID", | |
| 171 validate = "ValidateMultiID", | |
| 172 }, | |
| 173 }, | |
| 174 }, | |
| 175 } | |
| 176 | |
| 177 local meta = { __index = Handle } | |
| 178 | |
| 179 function Handle:New( bar ) | |
| 180 return setmetatable( | |
| 181 { | |
| 182 bar = bar, | |
| 183 config = bar:GetConfig(), | |
| 184 }, | |
| 185 meta) | |
| 186 end | |
| 187 | |
| 188 function Handle:Refresh() | |
| 189 Button:SetupBar(bar) | |
| 190 end | |
| 191 | |
| 192 function Handle:UpdateButtonLock() | |
| 193 Button.SetButtonLock(self.bar, self.config.lockButtons, self.config.lockButtonsCombat) | |
| 194 end | |
| 195 | |
| 196 function Handle:GetLastButton() | |
| 197 return self.bar:GetButton(self.bar:GetNumButtons()) | |
| 198 end | |
| 199 | |
| 200 -- options handlers | |
| 201 function Handle:GetOptions() | |
| 202 return { | |
| 203 type = "group", | |
| 204 name = L["Action Buttons"], | |
| 205 handler = self, | |
| 206 args = options | |
| 207 } | |
| 208 end | |
| 209 | |
| 210 function Handle:SetHideEmpty(info, value) | |
| 211 if value ~= self.config.hideEmpty then | |
| 212 self.config.hideEmpty = value | |
| 213 for _, b in self.bar:IterateButtons() do | |
| 214 b:ShowGrid(not value) | |
| 215 end | |
| 216 end | |
| 217 end | |
| 218 | |
| 219 function Handle:GetHideEmpty() | |
| 220 return self.config.hideEmpty | |
| 221 end | |
| 222 | |
| 223 function Handle:GetLockButtons() | |
| 224 return self.config.lockButtons | |
| 225 end | |
| 226 | |
| 227 function Handle:SetLockButtons(info, value) | |
| 228 self.config.lockButtons = value | |
| 229 self:UpdateButtonLock() | |
| 230 end | |
| 231 | |
| 232 function Handle:GetLockButtonsCombat() | |
| 233 return self.config.lockButtonsCombat | |
| 234 end | |
| 235 | |
| 236 function Handle:SetLockButtonsCombat(info, value) | |
| 237 self.config.lockButtonsCombat = value | |
| 238 self:UpdateButtonLock() | |
| 239 end | |
| 240 | |
| 241 function Handle:LockButtonsCombatDisabled() | |
| 242 return not self.config.lockButtons | |
| 243 end | |
| 244 | |
| 245 function Handle:GetNumPages() | |
| 246 return self.config.nPages | |
| 247 end | |
| 248 | |
| 249 function Handle:SetNumPages(info, value) | |
| 250 self.config.nPages = value | |
| 251 self:Refresh() | |
| 252 end | |
| 253 | |
| 254 function Handle:GetMindControl() | |
| 255 return self.config.mindcontrol | |
| 256 end | |
| 257 | |
| 258 function Handle:SetMindControl(info, value) | |
| 259 self.config.mindcontrol = value | |
| 260 self:Refresh() | |
| 261 end | |
| 262 | |
| 263 function Handle:GetVehicle() | |
| 264 return self.config.vehicle | |
| 265 end | |
| 266 | |
| 267 function Handle:SetVehicle(info, value) | |
| 268 self.config.vehicle = value | |
| 269 self:Refresh() | |
| 270 end | |
| 271 | |
| 272 function Handle:GetActionEditMethod() | |
| 273 return self.editMethod or 0 | |
| 274 end | |
| 275 | |
| 276 function Handle:SetActionEditMethod(info, value) | |
| 277 self.editMethod = value | |
| 278 end | |
| 279 | |
| 280 function Handle:IsButtonSelectHidden() | |
| 281 return self.editMethod ~= 1 | |
| 282 end | |
| 283 | |
| 284 function Handle:GetRowList() | |
| 285 local r,c = self.bar:GetButtonGrid() | |
| 286 if self.rowList == nil or #self.rowList ~= r then | |
| 287 local list = { } | |
| 288 for i = 1, r do | |
| 289 table.insert(list,i) | |
| 290 end | |
| 291 self.rowList = list | |
| 292 end | |
| 293 return self.rowList | |
| 294 end | |
| 295 | |
| 296 function Handle:GetSelectedRow() | |
| 297 local r, c = self.bar:GetButtonGrid() | |
| 298 local row = self.selectedRow or 1 | |
| 299 if row > r then | |
| 300 row = 1 | |
| 301 end | |
| 302 self.selectedRow = row | |
| 303 return row | |
| 304 end | |
| 305 | |
| 306 function Handle:SetSelectedRow(info, value) | |
| 307 self.selectedRow = value | |
| 308 end | |
| 309 | |
| 310 function Handle:GetColumnList() | |
| 311 local r,c = self.bar:GetButtonGrid() | |
| 312 if self.columnList == nil or #self.columnList ~= c then | |
| 313 local list = { } | |
| 314 for i = 1, c do | |
| 315 table.insert(list,i) | |
| 316 end | |
| 317 self.columnList = list | |
| 318 end | |
| 319 return self.columnList | |
| 320 end | |
| 321 | |
| 322 function Handle:GetSelectedColumn() | |
| 323 local r, c = self.bar:GetButtonGrid() | |
| 324 local col = self.selectedColumn or 1 | |
| 325 if col > c then | |
| 326 col = 1 | |
| 327 end | |
| 328 self.selectedColumn = col | |
| 329 return col | |
| 330 end | |
| 331 | |
| 332 function Handle:SetSelectedColumn(info, value) | |
| 333 self.selectedColumn = value | |
| 334 end | |
| 335 | |
| 336 function Handle:IsPageSelectHidden() | |
| 337 return self.editMethod ~= 1 or (self.config.nPages or 1) < 2 | |
| 338 end | |
| 339 | |
| 340 function Handle:GetPageList() | |
| 341 local n = self.config.nPages or 1 | |
| 342 if self.pageList == nil or #self.pageList ~= n then | |
| 343 local p = { } | |
| 344 for i = 1, n do | |
| 345 table.insert(p,i) | |
| 346 end | |
| 347 self.pageList = p | |
| 348 end | |
| 349 return self.pageList | |
| 350 end | |
| 351 | |
| 352 function Handle:GetSelectedPage() | |
| 353 local p = self.selectedPage or 1 | |
| 354 if p > (self.config.nPages or 1) then | |
| 355 p = 1 | |
| 356 end | |
| 357 self.selectedPage = p | |
| 358 return p | |
| 359 end | |
| 360 | |
| 361 function Handle:SetSelectedPage(info, value) | |
| 362 self.selectedPage = value | |
| 363 end | |
| 364 | |
| 365 function Handle:GetActionID() | |
| 366 local row = self.selectedRow or 1 | |
| 367 local col = self.selectedColumn or 1 | |
| 368 local r, c = self.bar:GetButtonGrid() | |
| 369 local n = (row-1) * c + col | |
| 370 local btn = self.bar:GetButton(n) | |
| 371 if btn then | |
| 372 return tostring(btn:GetActionID(self.selectedPage or 1)) | |
| 373 end | |
| 374 end | |
| 375 | |
| 376 function Handle:SetActionID(info, value) | |
| 377 local row = self.selectedRow or 1 | |
| 378 local col = self.selectedColumn or 1 | |
| 379 local r, c = self.bar:GetButtonGrid() | |
| 380 local n = (row-1) * c + col | |
| 381 local btn = self.bar:GetButton(n) | |
| 382 if btn then | |
| 383 btn:SetActionID(tonumber(value), self.selectedPage or 1) | |
| 384 end | |
| 385 end | |
| 386 | |
| 387 function Handle:ValidateActionID(info, value) | |
| 388 value = tonumber(value) | |
| 389 if value == nil or value < 1 or value > 120 then | |
| 390 return L["Specify ID 1-120"] | |
| 391 end | |
| 392 return true | |
| 393 end | |
| 394 | |
| 395 function Handle:IsMultiIDHidden() | |
| 396 return self.editMethod ~= 2 | |
| 397 end | |
| 398 | |
| 399 function Handle:GetMultiID() | |
| 400 local p = { } | |
| 401 for i = 1, self.config.nPages or 1 do | |
| 402 local b = { } | |
| 403 for _, btn in self.bar:IterateButtons() do | |
| 404 table.insert(b, btn:GetActionID(i)) | |
| 405 end | |
| 406 table.insert(p, table.concat(b,",")) | |
| 407 end | |
| 408 return table.concat(p,";\n") | |
| 409 end | |
| 410 | |
| 411 | |
| 412 local function ParseMultiID(nBtns, nPages, s) | |
| 413 if s:match("[^%d%s,;]") then | |
| 414 return nil | |
| 415 end | |
| 416 local p = { } | |
| 417 for list in s:gmatch("[^;]+") do | |
| 418 local pattern = ("^%s?$"):format(("%s*(%d+)%s*,"):rep(nBtns)) | |
| 419 local ids = { list:match(pattern) } | |
| 420 if #ids ~= nBtns then | |
| 421 return nil | |
| 422 end | |
| 423 table.insert(p,ids) | |
| 424 end | |
| 425 if #p ~= nPages then | |
| 426 return nil | |
| 427 end | |
| 428 return p | |
| 429 end | |
| 430 | |
| 431 function Handle:SetMultiID(info, value) | |
| 432 local p = ParseMultiID(self.bar:GetNumButtons(), self.config.nPages or 1, value) | |
| 433 for page, b in ipairs(p) do | |
| 434 for button, id in ipairs(b) do | |
| 435 self.bar:GetButton(button):SetActionID(id, page) | |
| 436 end | |
| 437 end | |
| 438 end | |
| 439 | |
| 440 function Handle:ValidateMultiID(info, value) | |
| 441 local bad = L["Invalid action ID list string"] | |
| 442 if value == nil or ParseMultiID(self.bar:GetNumButtons(), self.config.nPages or 1, value) == nil then | |
| 443 return bad | |
| 444 end | |
| 445 return true | |
| 446 end | |
| 447 end | |
| 448 | |
| 449 | 29 |
| 450 ------ State property options ------ | 30 ------ State property options ------ |
| 451 do | 31 do |
| 452 local pageOptions = { | 32 local pageOptions = { |
| 453 page = { | 33 page = { |
