annotate modules/Action.lua @ 220:a4e7475633b3

un-namespace action button config
author Flick <flickerstreak@gmail.com>
date Sun, 21 Nov 2010 10:40:54 -0800
parents e63aefb8a555
children c4b134512c50
rev   line source
flickerstreak@175 1 local addonName, addonTable = ...
flickerstreak@175 2 local ReAction = addonTable.ReAction
flickerstreak@24 3 local L = ReAction.L
flickerstreak@24 4 local _G = _G
flickerstreak@24 5 local CreateFrame = CreateFrame
flickerstreak@88 6 local format = string.format
flickerstreak@92 7 local wipe = wipe
flickerstreak@24 8
flickerstreak@116 9 local weak = { __mode="k" }
flickerstreak@116 10
flickerstreak@24 11 -- module declaration
flickerstreak@24 12 local moduleID = "Action"
flickerstreak@28 13 local module = ReAction:NewModule( moduleID )
flickerstreak@24 14
flickerstreak@90 15 -- Class declarations
flickerstreak@128 16 local Button = ReAction.Button.Action -- see /classes/ActionButton.lua
flickerstreak@90 17 local Handle = { }
flickerstreak@90 18 local PropHandler = { }
flickerstreak@87 19
flickerstreak@77 20 -- Event handlers
flickerstreak@24 21 function module:OnInitialize()
flickerstreak@90 22 self.handles = setmetatable({ }, weak)
flickerstreak@49 23
flickerstreak@63 24 ReAction:RegisterBarOptionGenerator(self, "GetBarOptions")
flickerstreak@63 25
flickerstreak@90 26 ReAction.RegisterCallback(self, "OnCreateBar")
flickerstreak@90 27 ReAction.RegisterCallback(self, "OnRefreshBar")
flickerstreak@63 28 ReAction.RegisterCallback(self, "OnDestroyBar")
flickerstreak@24 29 end
flickerstreak@24 30
flickerstreak@24 31 function module:OnEnable()
flickerstreak@218 32 ReAction:RegisterBarType(Button, true)
flickerstreak@90 33 ReAction:GetModule("State"):RegisterStateProperty("page", nil, PropHandler.GetOptions(), PropHandler)
flickerstreak@24 34 end
flickerstreak@24 35
flickerstreak@24 36 function module:OnDisable()
flickerstreak@218 37 ReAction:UnregisterBarType(Button)
flickerstreak@90 38 ReAction:GetModule("State"):UnregisterStateProperty("page")
flickerstreak@90 39 end
flickerstreak@90 40
flickerstreak@90 41 function module:OnCreateBar(event, bar, name)
flickerstreak@90 42 if bar.config.type == moduleID then
flickerstreak@90 43 if self.handles[bar] == nil then
flickerstreak@220 44 self.handles[bar] = Handle:New(bar)
flickerstreak@90 45 end
flickerstreak@90 46 end
flickerstreak@24 47 end
flickerstreak@24 48
flickerstreak@63 49 function module:OnRefreshBar(event, bar, name)
flickerstreak@90 50 if self.handles[bar] then
flickerstreak@90 51 self.handles[bar]:Refresh()
flickerstreak@24 52 end
flickerstreak@24 53 end
flickerstreak@24 54
flickerstreak@63 55 function module:OnDestroyBar(event, bar, name)
flickerstreak@90 56 if self.handles[bar] then
flickerstreak@90 57 self.handles[bar]:Destroy()
flickerstreak@90 58 self.handles[bar] = nil
flickerstreak@24 59 end
flickerstreak@24 60 end
flickerstreak@24 61
flickerstreak@48 62
flickerstreak@90 63 ---- Interface ----
flickerstreak@90 64 function module:GetBarOptions(bar)
flickerstreak@90 65 local h = self.handles[bar]
flickerstreak@90 66 if h then
flickerstreak@90 67 return h:GetOptions()
flickerstreak@90 68 end
flickerstreak@90 69 end
flickerstreak@90 70
flickerstreak@90 71
flickerstreak@90 72 ---- Bar Handle ----
flickerstreak@90 73
flickerstreak@87 74 do
flickerstreak@87 75 local options = {
flickerstreak@87 76 hideEmpty = {
flickerstreak@87 77 name = L["Hide Empty Buttons"],
flickerstreak@87 78 order = 1,
flickerstreak@87 79 type = "toggle",
flickerstreak@87 80 width = "double",
flickerstreak@87 81 get = "GetHideEmpty",
flickerstreak@87 82 set = "SetHideEmpty",
flickerstreak@87 83 },
flickerstreak@102 84 lockButtons = {
flickerstreak@102 85 name = L["Lock Buttons"],
flickerstreak@147 86 desc = L["Prevents picking up/dragging actions (use SHIFT to override this behavior)"],
flickerstreak@102 87 order = 2,
flickerstreak@102 88 type = "toggle",
flickerstreak@102 89 get = "GetLockButtons",
flickerstreak@102 90 set = "SetLockButtons",
flickerstreak@102 91 },
flickerstreak@102 92 lockOnlyCombat = {
flickerstreak@102 93 name = L["Only in Combat"],
flickerstreak@102 94 desc = L["Only lock the buttons when in combat"],
flickerstreak@102 95 order = 3,
flickerstreak@102 96 type = "toggle",
flickerstreak@102 97 disabled = "LockButtonsCombatDisabled",
flickerstreak@102 98 get = "GetLockButtonsCombat",
flickerstreak@102 99 set = "SetLockButtonsCombat",
flickerstreak@102 100 },
flickerstreak@87 101 pages = {
flickerstreak@87 102 name = L["# Pages"],
flickerstreak@87 103 desc = L["Use the Dynamic State tab to specify page transitions"],
flickerstreak@102 104 order = 4,
flickerstreak@87 105 type = "range",
flickerstreak@87 106 min = 1,
flickerstreak@87 107 max = 10,
flickerstreak@87 108 step = 1,
flickerstreak@87 109 get = "GetNumPages",
flickerstreak@87 110 set = "SetNumPages",
flickerstreak@87 111 },
flickerstreak@90 112 mindcontrol = {
flickerstreak@90 113 name = L["Mind Control Support"],
flickerstreak@90 114 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."],
flickerstreak@102 115 order = 5,
flickerstreak@90 116 type = "toggle",
flickerstreak@90 117 width = "double",
flickerstreak@90 118 set = "SetMindControl",
flickerstreak@90 119 get = "GetMindControl",
flickerstreak@90 120 },
flickerstreak@121 121 vehicle = {
flickerstreak@121 122 name = L["Vehicle Support"],
flickerstreak@121 123 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."],
flickerstreak@121 124 order = 6,
flickerstreak@121 125 type = "toggle",
flickerstreak@121 126 width = "double",
flickerstreak@121 127 get = "GetVehicle",
flickerstreak@121 128 set = "SetVehicle",
flickerstreak@121 129 },
flickerstreak@87 130 actions = {
flickerstreak@87 131 name = L["Edit Action IDs"],
flickerstreak@121 132 order = 7,
flickerstreak@87 133 type = "group",
flickerstreak@87 134 inline = true,
flickerstreak@87 135 args = {
flickerstreak@87 136 method = {
flickerstreak@87 137 name = L["Assign"],
flickerstreak@87 138 order = 1,
flickerstreak@87 139 type = "select",
flickerstreak@87 140 width = "double",
flickerstreak@87 141 values = { [0] = L["Choose Method..."],
flickerstreak@87 142 [1] = L["Individually"],
flickerstreak@87 143 [2] = L["All at Once"], },
flickerstreak@87 144 get = "GetActionEditMethod",
flickerstreak@87 145 set = "SetActionEditMethod",
flickerstreak@87 146 },
flickerstreak@87 147 rowSelect = {
flickerstreak@87 148 name = L["Row"],
flickerstreak@87 149 desc = L["Rows are numbered top to bottom"],
flickerstreak@87 150 order = 2,
flickerstreak@87 151 type = "select",
flickerstreak@87 152 width = "half",
flickerstreak@87 153 hidden = "IsButtonSelectHidden",
flickerstreak@87 154 values = "GetRowList",
flickerstreak@87 155 get = "GetSelectedRow",
flickerstreak@87 156 set = "SetSelectedRow",
flickerstreak@87 157 },
flickerstreak@87 158 colSelect = {
flickerstreak@87 159 name = L["Col"],
flickerstreak@87 160 desc = L["Columns are numbered left to right"],
flickerstreak@87 161 order = 3,
flickerstreak@87 162 type = "select",
flickerstreak@87 163 width = "half",
flickerstreak@87 164 hidden = "IsButtonSelectHidden",
flickerstreak@87 165 values = "GetColumnList",
flickerstreak@87 166 get = "GetSelectedColumn",
flickerstreak@87 167 set = "SetSelectedColumn",
flickerstreak@87 168 },
flickerstreak@87 169 pageSelect = {
flickerstreak@87 170 name = L["Page"],
flickerstreak@87 171 order = 4,
flickerstreak@87 172 type = "select",
flickerstreak@87 173 width = "half",
flickerstreak@87 174 hidden = "IsPageSelectHidden",
flickerstreak@87 175 values = "GetPageList",
flickerstreak@87 176 get = "GetSelectedPage",
flickerstreak@87 177 set = "SetSelectedPage",
flickerstreak@87 178 },
flickerstreak@87 179 single = {
flickerstreak@87 180 name = L["Action ID"],
flickerstreak@87 181 usage = L["Specify ID 1-120"],
flickerstreak@87 182 order = 5,
flickerstreak@87 183 type = "input",
flickerstreak@87 184 width = "half",
flickerstreak@87 185 hidden = "IsButtonSelectHidden",
flickerstreak@87 186 get = "GetActionID",
flickerstreak@87 187 set = "SetActionID",
flickerstreak@87 188 validate = "ValidateActionID",
flickerstreak@87 189 },
flickerstreak@87 190 multi = {
flickerstreak@87 191 name = L["ID List"],
flickerstreak@87 192 usage = L["Specify a comma-separated list of IDs for each button in the bar (in order). Separate multiple pages with semicolons (;)"],
flickerstreak@87 193 order = 6,
flickerstreak@87 194 type = "input",
flickerstreak@87 195 multiline = true,
flickerstreak@87 196 width = "double",
flickerstreak@87 197 hidden = "IsMultiIDHidden",
flickerstreak@87 198 get = "GetMultiID",
flickerstreak@87 199 set = "SetMultiID",
flickerstreak@87 200 validate = "ValidateMultiID",
flickerstreak@90 201 },
flickerstreak@90 202 },
flickerstreak@87 203 },
flickerstreak@87 204 }
flickerstreak@77 205
flickerstreak@90 206 local meta = { __index = Handle }
flickerstreak@90 207
flickerstreak@220 208 function Handle:New( bar )
flickerstreak@220 209 local config = bar:GetConfig()
flickerstreak@90 210 local self = setmetatable(
flickerstreak@90 211 {
flickerstreak@90 212 bar = bar,
flickerstreak@90 213 config = config,
flickerstreak@90 214 btns = { }
flickerstreak@90 215 },
flickerstreak@90 216 meta)
flickerstreak@90 217
flickerstreak@90 218 if self.config.buttons == nil then
flickerstreak@90 219 self.config.buttons = { }
flickerstreak@90 220 end
flickerstreak@90 221 self:Refresh()
flickerstreak@90 222 return self
flickerstreak@90 223 end
flickerstreak@90 224
flickerstreak@90 225 function Handle:Refresh()
flickerstreak@90 226 local r, c = self.bar:GetButtonGrid()
flickerstreak@90 227 local n = r*c
flickerstreak@90 228 local btnCfg = self.config.buttons
flickerstreak@90 229 if n ~= #self.btns then
flickerstreak@90 230 for i = 1, n do
flickerstreak@90 231 if btnCfg[i] == nil then
flickerstreak@90 232 btnCfg[i] = {}
flickerstreak@90 233 end
flickerstreak@90 234 if self.btns[i] == nil then
flickerstreak@128 235 local lastButton = self:GetLastButton()
flickerstreak@128 236 local hint = lastButton and lastButton.config.actionID
flickerstreak@128 237 local b = Button:New(i, self.config, self.bar, hint)
flickerstreak@90 238 self.btns[i] = b
flickerstreak@90 239 self.bar:AddButton(i,b)
flickerstreak@90 240 end
flickerstreak@90 241 end
flickerstreak@90 242 for i = n+1, #self.btns do
flickerstreak@90 243 if self.btns[i] then
flickerstreak@90 244 self.bar:RemoveButton(self.btns[i])
flickerstreak@90 245 self.btns[i]:Destroy()
flickerstreak@90 246 self.btns[i] = nil
flickerstreak@90 247 btnCfg[i] = nil
flickerstreak@90 248 end
flickerstreak@90 249 end
flickerstreak@90 250 end
flickerstreak@90 251 for _, b in ipairs(self.btns) do
flickerstreak@90 252 b:Refresh()
flickerstreak@90 253 end
flickerstreak@128 254 Button.SetupBarHeader(self.bar,self.config)
flickerstreak@102 255 self:UpdateButtonLock()
flickerstreak@90 256 end
flickerstreak@90 257
flickerstreak@90 258 function Handle:Destroy()
flickerstreak@90 259 for _,b in pairs(self.btns) do
flickerstreak@90 260 if b then
flickerstreak@90 261 b:Destroy()
flickerstreak@90 262 end
flickerstreak@90 263 end
flickerstreak@90 264 end
flickerstreak@90 265
flickerstreak@102 266 function Handle:UpdateButtonLock()
flickerstreak@128 267 Button.SetButtonLock(self.bar, self.config.lockButtons, self.config.lockButtonsCombat)
flickerstreak@102 268 end
flickerstreak@102 269
flickerstreak@90 270 function Handle:GetLastButton()
flickerstreak@90 271 return self.btns[#self.btns]
flickerstreak@90 272 end
flickerstreak@90 273
flickerstreak@90 274 -- options handlers
flickerstreak@90 275 function Handle:GetOptions()
flickerstreak@87 276 return {
flickerstreak@87 277 type = "group",
flickerstreak@87 278 name = L["Action Buttons"],
flickerstreak@90 279 handler = self,
flickerstreak@87 280 args = options
flickerstreak@87 281 }
flickerstreak@77 282 end
flickerstreak@77 283
flickerstreak@90 284 function Handle:SetHideEmpty(info, value)
flickerstreak@90 285 if value ~= self.config.hideEmpty then
flickerstreak@90 286 self.config.hideEmpty = value
flickerstreak@128 287 for _, b in pairs(self.btns) do
flickerstreak@128 288 b:ShowGrid(not value)
flickerstreak@128 289 end
flickerstreak@77 290 end
flickerstreak@77 291 end
flickerstreak@77 292
flickerstreak@90 293 function Handle:GetHideEmpty()
flickerstreak@90 294 return self.config.hideEmpty
flickerstreak@77 295 end
flickerstreak@87 296
flickerstreak@102 297 function Handle:GetLockButtons()
flickerstreak@128 298 return self.config.lockButtons
flickerstreak@102 299 end
flickerstreak@102 300
flickerstreak@102 301 function Handle:SetLockButtons(info, value)
flickerstreak@102 302 self.config.lockButtons = value
flickerstreak@102 303 self:UpdateButtonLock()
flickerstreak@102 304 end
flickerstreak@102 305
flickerstreak@102 306 function Handle:GetLockButtonsCombat()
flickerstreak@102 307 return self.config.lockButtonsCombat
flickerstreak@102 308 end
flickerstreak@102 309
flickerstreak@102 310 function Handle:SetLockButtonsCombat(info, value)
flickerstreak@102 311 self.config.lockButtonsCombat = value
flickerstreak@102 312 self:UpdateButtonLock()
flickerstreak@102 313 end
flickerstreak@102 314
flickerstreak@102 315 function Handle:LockButtonsCombatDisabled()
flickerstreak@128 316 return not self.config.lockButtons
flickerstreak@102 317 end
flickerstreak@102 318
flickerstreak@90 319 function Handle:GetNumPages()
flickerstreak@90 320 return self.config.nPages
flickerstreak@87 321 end
flickerstreak@87 322
flickerstreak@90 323 function Handle:SetNumPages(info, value)
flickerstreak@90 324 self.config.nPages = value
flickerstreak@90 325 self:Refresh()
flickerstreak@87 326 end
flickerstreak@87 327
flickerstreak@90 328 function Handle:GetMindControl()
flickerstreak@90 329 return self.config.mindcontrol
flickerstreak@90 330 end
flickerstreak@90 331
flickerstreak@90 332 function Handle:SetMindControl(info, value)
flickerstreak@90 333 self.config.mindcontrol = value
flickerstreak@90 334 self:Refresh()
flickerstreak@90 335 end
flickerstreak@90 336
flickerstreak@121 337 function Handle:GetVehicle()
flickerstreak@121 338 return self.config.vehicle
flickerstreak@121 339 end
flickerstreak@121 340
flickerstreak@121 341 function Handle:SetVehicle(info, value)
flickerstreak@121 342 self.config.vehicle = value
flickerstreak@121 343 self:Refresh()
flickerstreak@121 344 end
flickerstreak@121 345
flickerstreak@90 346 function Handle:GetActionEditMethod()
flickerstreak@87 347 return self.editMethod or 0
flickerstreak@87 348 end
flickerstreak@87 349
flickerstreak@90 350 function Handle:SetActionEditMethod(info, value)
flickerstreak@87 351 self.editMethod = value
flickerstreak@87 352 end
flickerstreak@87 353
flickerstreak@90 354 function Handle:IsButtonSelectHidden()
flickerstreak@87 355 return self.editMethod ~= 1
flickerstreak@87 356 end
flickerstreak@87 357
flickerstreak@90 358 function Handle:GetRowList()
flickerstreak@87 359 local r,c = self.bar:GetButtonGrid()
flickerstreak@87 360 if self.rowList == nil or #self.rowList ~= r then
flickerstreak@87 361 local list = { }
flickerstreak@87 362 for i = 1, r do
flickerstreak@87 363 table.insert(list,i)
flickerstreak@87 364 end
flickerstreak@87 365 self.rowList = list
flickerstreak@87 366 end
flickerstreak@87 367 return self.rowList
flickerstreak@87 368 end
flickerstreak@87 369
flickerstreak@90 370 function Handle:GetSelectedRow()
flickerstreak@87 371 local r, c = self.bar:GetButtonGrid()
flickerstreak@87 372 local row = self.selectedRow or 1
flickerstreak@87 373 if row > r then
flickerstreak@87 374 row = 1
flickerstreak@87 375 end
flickerstreak@87 376 self.selectedRow = row
flickerstreak@87 377 return row
flickerstreak@87 378 end
flickerstreak@87 379
flickerstreak@90 380 function Handle:SetSelectedRow(info, value)
flickerstreak@87 381 self.selectedRow = value
flickerstreak@87 382 end
flickerstreak@87 383
flickerstreak@90 384 function Handle:GetColumnList()
flickerstreak@87 385 local r,c = self.bar:GetButtonGrid()
flickerstreak@87 386 if self.columnList == nil or #self.columnList ~= c then
flickerstreak@87 387 local list = { }
flickerstreak@87 388 for i = 1, c do
flickerstreak@87 389 table.insert(list,i)
flickerstreak@87 390 end
flickerstreak@87 391 self.columnList = list
flickerstreak@87 392 end
flickerstreak@87 393 return self.columnList
flickerstreak@87 394 end
flickerstreak@87 395
flickerstreak@90 396 function Handle:GetSelectedColumn()
flickerstreak@87 397 local r, c = self.bar:GetButtonGrid()
flickerstreak@87 398 local col = self.selectedColumn or 1
flickerstreak@87 399 if col > c then
flickerstreak@87 400 col = 1
flickerstreak@87 401 end
flickerstreak@87 402 self.selectedColumn = col
flickerstreak@87 403 return col
flickerstreak@87 404 end
flickerstreak@87 405
flickerstreak@90 406 function Handle:SetSelectedColumn(info, value)
flickerstreak@87 407 self.selectedColumn = value
flickerstreak@87 408 end
flickerstreak@87 409
flickerstreak@90 410 function Handle:IsPageSelectHidden()
flickerstreak@90 411 return self.editMethod ~= 1 or (self.config.nPages or 1) < 2
flickerstreak@87 412 end
flickerstreak@87 413
flickerstreak@90 414 function Handle:GetPageList()
flickerstreak@90 415 local n = self.config.nPages or 1
flickerstreak@87 416 if self.pageList == nil or #self.pageList ~= n then
flickerstreak@87 417 local p = { }
flickerstreak@87 418 for i = 1, n do
flickerstreak@87 419 table.insert(p,i)
flickerstreak@87 420 end
flickerstreak@87 421 self.pageList = p
flickerstreak@87 422 end
flickerstreak@87 423 return self.pageList
flickerstreak@87 424 end
flickerstreak@87 425
flickerstreak@90 426 function Handle:GetSelectedPage()
flickerstreak@87 427 local p = self.selectedPage or 1
flickerstreak@90 428 if p > (self.config.nPages or 1) then
flickerstreak@87 429 p = 1
flickerstreak@87 430 end
flickerstreak@87 431 self.selectedPage = p
flickerstreak@87 432 return p
flickerstreak@87 433 end
flickerstreak@87 434
flickerstreak@90 435 function Handle:SetSelectedPage(info, value)
flickerstreak@87 436 self.selectedPage = value
flickerstreak@87 437 end
flickerstreak@87 438
flickerstreak@90 439 function Handle:GetActionID()
flickerstreak@87 440 local row = self.selectedRow or 1
flickerstreak@87 441 local col = self.selectedColumn or 1
flickerstreak@87 442 local r, c = self.bar:GetButtonGrid()
flickerstreak@87 443 local n = (row-1) * c + col
flickerstreak@90 444 local btn = self.btns[n]
flickerstreak@87 445 if btn then
flickerstreak@87 446 return tostring(btn:GetActionID(self.selectedPage or 1))
flickerstreak@87 447 end
flickerstreak@87 448 end
flickerstreak@87 449
flickerstreak@90 450 function Handle:SetActionID(info, value)
flickerstreak@87 451 local row = self.selectedRow or 1
flickerstreak@87 452 local col = self.selectedColumn or 1
flickerstreak@87 453 local r, c = self.bar:GetButtonGrid()
flickerstreak@87 454 local n = (row-1) * c + col
flickerstreak@90 455 local btn = self.btns[n]
flickerstreak@87 456 if btn then
flickerstreak@87 457 btn:SetActionID(tonumber(value), self.selectedPage or 1)
flickerstreak@87 458 end
flickerstreak@87 459 end
flickerstreak@87 460
flickerstreak@90 461 function Handle:ValidateActionID(info, value)
flickerstreak@87 462 value = tonumber(value)
flickerstreak@87 463 if value == nil or value < 1 or value > 120 then
flickerstreak@87 464 return L["Specify ID 1-120"]
flickerstreak@87 465 end
flickerstreak@87 466 return true
flickerstreak@87 467 end
flickerstreak@87 468
flickerstreak@90 469 function Handle:IsMultiIDHidden()
flickerstreak@87 470 return self.editMethod ~= 2
flickerstreak@87 471 end
flickerstreak@87 472
flickerstreak@90 473 function Handle:GetMultiID()
flickerstreak@87 474 local p = { }
flickerstreak@90 475 for i = 1, self.config.nPages or 1 do
flickerstreak@87 476 local b = { }
flickerstreak@90 477 for _, btn in ipairs(self.btns) do
flickerstreak@87 478 table.insert(b, btn:GetActionID(i))
flickerstreak@87 479 end
flickerstreak@87 480 table.insert(p, table.concat(b,","))
flickerstreak@87 481 end
flickerstreak@87 482 return table.concat(p,";\n")
flickerstreak@87 483 end
flickerstreak@87 484
flickerstreak@87 485
flickerstreak@87 486 local function ParseMultiID(nBtns, nPages, s)
flickerstreak@87 487 if s:match("[^%d%s,;]") then
flickerstreak@87 488 return nil
flickerstreak@87 489 end
flickerstreak@87 490 local p = { }
flickerstreak@87 491 for list in s:gmatch("[^;]+") do
flickerstreak@87 492 local pattern = ("^%s?$"):format(("%s*(%d+)%s*,"):rep(nBtns))
flickerstreak@87 493 local ids = { list:match(pattern) }
flickerstreak@87 494 if #ids ~= nBtns then
flickerstreak@87 495 return nil
flickerstreak@87 496 end
flickerstreak@87 497 table.insert(p,ids)
flickerstreak@87 498 end
flickerstreak@87 499 if #p ~= nPages then
flickerstreak@87 500 return nil
flickerstreak@87 501 end
flickerstreak@87 502 return p
flickerstreak@87 503 end
flickerstreak@87 504
flickerstreak@90 505 function Handle:SetMultiID(info, value)
flickerstreak@91 506 local p = ParseMultiID(#self.btns, self.config.nPages or 1, value)
flickerstreak@87 507 for page, b in ipairs(p) do
flickerstreak@87 508 for button, id in ipairs(b) do
flickerstreak@90 509 self.btns[button]:SetActionID(id, page)
flickerstreak@87 510 end
flickerstreak@87 511 end
flickerstreak@87 512 end
flickerstreak@87 513
flickerstreak@90 514 function Handle:ValidateMultiID(info, value)
flickerstreak@87 515 local bad = L["Invalid action ID list string"]
flickerstreak@90 516 if value == nil or ParseMultiID(#self.btns, self.config.nPages or 1, value) == nil then
flickerstreak@87 517 return bad
flickerstreak@87 518 end
flickerstreak@87 519 return true
flickerstreak@87 520 end
flickerstreak@77 521 end
flickerstreak@77 522
flickerstreak@77 523
flickerstreak@87 524 ------ State property options ------
flickerstreak@87 525 do
flickerstreak@87 526 local pageOptions = {
flickerstreak@87 527 page = {
flickerstreak@92 528 name = L["Show Page #"],
flickerstreak@92 529 order = 11,
flickerstreak@92 530 type = "select",
flickerstreak@92 531 width = "half",
flickerstreak@87 532 disabled = "IsPageDisabled",
flickerstreak@87 533 hidden = "IsPageHidden",
flickerstreak@87 534 values = "GetPageValues",
flickerstreak@87 535 set = "SetProp",
flickerstreak@87 536 get = "GetPage",
flickerstreak@87 537 },
flickerstreak@87 538 }
flickerstreak@50 539
flickerstreak@90 540 function PropHandler.GetOptions()
flickerstreak@90 541 return pageOptions
flickerstreak@87 542 end
flickerstreak@87 543
flickerstreak@90 544 function PropHandler:IsPageDisabled()
flickerstreak@220 545 local c = self.bar:GetConfig()
flickerstreak@90 546 local n = c and c.nPages or 1
flickerstreak@90 547 return not (n > 1)
flickerstreak@87 548 end
flickerstreak@87 549
flickerstreak@90 550 function PropHandler:IsPageHidden()
flickerstreak@220 551 return not self.bar:GetConfig()
flickerstreak@87 552 end
flickerstreak@87 553
flickerstreak@90 554 function PropHandler:GetPageValues()
flickerstreak@92 555 if not self._pagevalues then
flickerstreak@92 556 self._pagevalues = { }
flickerstreak@92 557 end
flickerstreak@220 558 local c = self.bar:GetConfig()
flickerstreak@87 559 if c then
flickerstreak@87 560 local n = c.nPages
flickerstreak@92 561 -- cache the results
flickerstreak@87 562 if self._npages ~= n then
flickerstreak@87 563 self._npages = n
flickerstreak@92 564 wipe(self._pagevalues)
flickerstreak@87 565 for i = 1, n do
flickerstreak@90 566 self._pagevalues["page"..i] = i
flickerstreak@87 567 end
flickerstreak@87 568 end
flickerstreak@87 569 end
flickerstreak@92 570 return self._pagevalues
flickerstreak@87 571 end
flickerstreak@87 572
flickerstreak@90 573 function PropHandler:GetPage(info)
flickerstreak@87 574 return self:GetProp(info) or 1
flickerstreak@87 575 end
flickerstreak@90 576
flickerstreak@87 577 end
flickerstreak@87 578