/// <summary> /// Assigns the track to the specified group track. /// </summary> /// <param name="asset">The track to assign.</param> /// <param name="group">The GroupTrack to assign the track to.</param> /// <remarks> /// Does not support assigning to a group in a different timeline. /// </remarks> public static void SetGroup(this TrackAsset asset, GroupTrack group) { const string undoString = "Reparent"; if (asset == null || asset == group || asset.parent == group) { return; } if (group != null && asset.timelineAsset != group.timelineAsset) { throw new InvalidOperationException("Cannot assign to a group in a different timeline"); } TimelineUndo.PushUndo(asset, undoString); var timeline = asset.timelineAsset; var parentTrack = asset.parent as TrackAsset; var parentTimeline = asset.parent as TimelineAsset; if (parentTrack != null || parentTimeline != null) { TimelineUndo.PushUndo(asset.parent, undoString); if (parentTimeline != null) { parentTimeline.RemoveTrack(asset); } else { parentTrack.RemoveSubTrack(asset); } } if (group == null) { TimelineUndo.PushUndo(timeline, undoString); asset.parent = asset.timelineAsset; timeline.AddTrackInternal(asset); } else { TimelineUndo.PushUndo(group, undoString); group.AddChild(asset); } }
public static void SetGroup(this TrackAsset asset, GroupTrack group) { if (!(asset == null) && !(asset == group) && !(asset.parent == group)) { if (group != null && asset.timelineAsset != group.timelineAsset) { throw new InvalidOperationException("Cannot assign to a group in a different timeline"); } TimelineUndo.PushUndo(asset, "Reparent"); TimelineAsset timelineAsset = asset.timelineAsset; TrackAsset trackAsset = asset.parent as TrackAsset; TimelineAsset timelineAsset2 = asset.parent as TimelineAsset; if (trackAsset != null || timelineAsset2 != null) { TimelineUndo.PushUndo(asset.parent, "Reparent"); if (timelineAsset2 != null) { timelineAsset2.RemoveTrack(asset); } else { trackAsset.RemoveSubTrack(asset); } } if (group == null) { TimelineUndo.PushUndo(timelineAsset, "Reparent"); asset.parent = asset.timelineAsset; timelineAsset.AddTrackInternal(asset); } else { TimelineUndo.PushUndo(group, "Reparent"); group.AddChild(asset); } } }