This is how Elvui does actionbar page swapping. The Childupdate is pretty cool. It updates all children to the same state.
Lua Code:
AB["barDefaults"] = {
["bar1"] = {
['visibility'] = "[petbattle] hide; show", --[petbattle][overridebar][vehicleui] hide; show
['page'] = 1,
['conditions'] = string.format("[vehicleui] %d; [possessbar] %d; [overridebar] %d; [bar:2] 2; [bar:3] 3; [bar:4] 4; [bar:5] 5; [bar:6] 6;", GetVehicleBarIndex(), GetVehicleBarIndex(), GetOverrideBarIndex()),
},
}
--GetPage() just concatenates condition and default page
--basically returns this: [vehicleui] GetVehicleBarIndex(); [possessbar] GetVehicleBarIndex(); [overridebar] GetOverrideBarIndex(); [bar:2] 2; [bar:3] 3; [bar:4] 4; [bar:5] 5; [bar:6] 6; 1"
RegisterStateDriver(bar, "page", self:GetPage(barName, self['barDefaults'][barName].page, self['barDefaults'][barName].conditions));
RegisterStateDriver(bar, "visibility", self['barDefaults'][barName].visibility)
bar:SetAttribute("_onstate-page", [[
self:SetAttribute("state", newstate)
control:ChildUpdate("state", newstate)
]])