df02e7a5e5
This PR adds channel groups (also known as fcurve groups or action groups) to layered actions. For layered actions, these groups belong to the `ChannelBag`s and can vary by bag. From a user perspective, the goal is for these to function just like channel groups from legacy actions. However, internally they are implemented a little differently: legacy actions store both channel groups and fcurves in a listbase, and groups indicate what fcurves are in them with a listbase that points directly into the larger fcurve listbase. Layered actions, on the other hand, store both fcurves and channel groups in an array, and groups indicate what fcurves are in them by indexing into the fcurve array. Despite taking this different approach, we still reuse the `bActionGroup` struct for the new channel groups, just adding the necessary fields for index-based fcurve membership as described above. This PR does not implement all of the functionality needed to reach feature parity with legacy action channel groups, but implements the main core and gets them basically working. It's easier to list the things that *haven't* been implemented yet: - Operators for letting the user manually create/remove/move channel groups. - Keyframe selection in the action/dopesheet editor on channel group rows themselves are not yet working correctly. - Handling channel groups in legacy/layered action conversion operators. - Making the legacy `action.groups` property work on single-layer-single-strip layered actions. Those are left for future PRs. Other than that, in theory everything should be working now. Pull Request: https://projects.blender.org/blender/blender/pulls/125774