- Joined
- Jul 18, 2010
- Messages
- 2,377
ToggleIconButtonGroup is an addon for ToggleIconButton. It combines multiple ones into a shared entity. The values for Buttons used in a ToggleIconButtonGroup should be unique power2 values.
Changelog:
V1.3
Lua:
--[[
ToggleIconButtonGroup 1.3 by Tasyen
uses ToggleIconButton by Tasyen
ToggleIconButtonGroup is a addon for ToggleIconButton. It combines multiple ones into a shared entity, the values for Buttons used in ToggleIconButtonGroup should be unique power2.
function CreateToggleIconButtonGroup(multiSelection, action, ...)
create a Group with action happening when any button is toggled considering the sharedRules set by the individual buttons.
multiSelection(false) unselect others before setting x, can also be changed later with groupObject.MultiSelection[player] = true/false.
A ToggleIconButton inside a ToggleIconButtonGroup can not have a custom Action, because it is used by the ToggleIconButtonGroup, but the Group also supports an Action.
afer action you can give any amount of ToggleIconButtonTables
The actionfunction provides this args function(groupObject, buttonObject, player, groupValue)
function ToggleIconButtonGroupGetValue(groupObject, player)
function ToggleIconButtonGroupAddButton(groupObject, buttonObject)
function ToggleIconButtonGroupSetModeButton(groupObject[, buttonObject])
define a ToggleIconButton as multiSelection mode toggle, this uses the Buttons ToggleIconButton Action.
function ToggleIconButtonGroupModeButton(groupObject, parent)
Creates a default ModeButton for groupObject
Returns the buttonObject of the new ModeButton
The new Button still has to be placed
function ToggleIconButtonGroupClearButton(groupObject[, parent, iconPath])
When the group does not have a Clear Button, then this creates a BUTTON that clears selection when clicked.
Returns the clear Button-Frame of the group.
The Button has to be placed after it is created.
function ToggleIconButtonGroupClear(groupObject, player)
--]]
ToggleIconButtonGroup = {}
ToggleIconButtonGroup.Action = function(object, player, enabled)
local groupObject = object.Group
if not groupObject.MultiSelection[player] then
local oldValue = ToggleIconButtonGroupGetValue(groupObject, player)
ToggleIconButtonGroupClear(groupObject, player)
if enabled or oldValue ~= 0 then
ToggleIconButtonSetValue(object, player, true)
end
end
groupObject.Action(groupObject, object, player, ToggleIconButtonGroupGetValue(groupObject, player))
end
ToggleIconButtonGroup.ActionMode = function(object, player, enabled)
object.Group.MultiSelection[player] = enabled
end
function ToggleIconButtonGroupClear(groupObject, player)
for index, value in ipairs(groupObject) do
ToggleIconButtonSetValue(value, player, false)
end
end
function ToggleIconButtonGroupGetValue(groupObject, player)
local returnValue = 0
for index, value in ipairs(groupObject) do
returnValue = returnValue + ToggleIconButtonGetValue(value, player)
end
return returnValue
end
function ToggleIconButtonGroupAddButton(groupObject, buttonObject)
table.insert(groupObject, buttonObject)
buttonObject.Action = ToggleIconButtonGroup.Action
buttonObject.Group = groupObject
end
function ToggleIconButtonGroupSetModeButton(groupObject, buttonObject)
groupObject.ModeButton = buttonObject
buttonObject.Action = ToggleIconButtonGroup.ActionMode
buttonObject.Group = groupObject
return buttonObject
end
function ToggleIconButtonGroupModeButton(groupObject, parent)
if groupObject.ModeButton then return groupObject.ModeButton end
if not parent then parent = BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0) end
local buttonObject = ToggleIconButtonGroupSetModeButton(groupObject, CreateToggleIconButton(parent, 1, "MultiSelection", "ui\\widgets\\battlenet\\bnet-mainmenu-customteam-up", nil, "UI\\Widgets\\Glues\\GlueScreen-ROC-EditionButton-up", "SingleSelection"))
-- start with multiselection mode enabled?
for index = 0, bj_MAX_PLAYERS - 1 do ToggleIconButtonSetValue(groupObject.ModeButton, Player(index), groupObject.MultiSelection[Player(index)]) end
return buttonObject
end
function ToggleIconButtonGroupClearButton(groupObject, parent, iconPath)
-- only one clearButton
if not groupObject.ClearButton then
-- default optional values
if not parent then parent = BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0) end
if not iconPath then iconPath = "ReplaceableTextures\\CommandButtons\\BTNCancel" end
local button = BlzCreateFrameByType("BUTTON", "ToggleIconButtonGroupClearButton", parent, "", 0)
local buttonIcon = BlzCreateFrameByType("BACKDROP", "ToggleIconButtonGroupClearButtonIcon", button, "", 0)
BlzFrameSetSize(button, ToggleIconButton.DefaultSizeX, ToggleIconButton.DefaultSizeY)
BlzFrameSetAllPoints(buttonIcon, button)
BlzFrameSetTexture(buttonIcon, "ReplaceableTextures\\CommandButtons\\BTNCancel", 0, false)
ToggleIconButton.CreateTooltip(button, "Clear")
ToggleIconButtonGroup[button] = groupObject
groupObject.ClearButton = button
groupObject.ClearButtonIcon = buttonIcon
if not ToggleIconButtonGroup.ClearTrigger then
ToggleIconButtonGroup.ClearTrigger = CreateTrigger()
ToggleIconButtonGroup.ClearTriggerAction = TriggerAddAction(ToggleIconButtonGroup.ClearTrigger, function()
local button = BlzGetTriggerFrame()
local groupObject = ToggleIconButtonGroup[button]
local player = GetTriggerPlayer()
StartSoundForPlayerBJ(player, ToggleIconButton.Sound)
ToggleIconButtonGroupClear(groupObject, player)
-- remove focus
BlzFrameSetEnable(button, false)
BlzFrameSetEnable(button, true)
groupObject.Action(groupObject, nil, player, ToggleIconButtonGroupGetValue(groupObject, player))
end)
end
BlzTriggerRegisterFrameEvent(ToggleIconButtonGroup.ClearTrigger, button, FRAMEEVENT_CONTROL_CLICK)
return button
else
return groupObject.ClearButton
end
end
function CreateToggleIconButtonGroup(multiSelection, action, ...)
local object = {MultiSelection = __jarray(multiSelection), Action = action}
for index, value in ipairs({...}) do ToggleIconButtonGroupAddButton(object, value) end
return object
end
V1.3
Moved the Trigger Creation out of the Lua Root, into the creator functions.
The Clear Button will execute the GroupAction without an object.
V1.2The Clear Button will execute the GroupAction without an object.
One could not deselect the selected category in singleselection mode
Added default Creators for Clear & ModeButton
MultiSelection Mode is now synced knowlage (array)
V1.1 adjusted ToggleIconButtonGroupGetValue to fit ToggleIconButton1.1Added default Creators for Clear & ModeButton
MultiSelection Mode is now synced knowlage (array)
Last edited: