private Channel MergeChannel(Channel sourceCh, Membership destMembers) { bool found = true; // reset to default Channel destCh = (Channel)destMembers.Find(sourceCh.Name, MemberType.Channel, false); if (destCh == null) { found = false; destCh = seqNew.CreateChannel(sourceCh.Name); destMembers.Add(destCh); destCh.CopyFrom(sourceCh, mergeEffects); } else { if (duplicateNameAction == ACTIONuseSecond) { //destCh = (Channel)destMember; } if (duplicateNameAction == ACTIONkeepBoth) { destCh = seqNew.CreateChannel(sourceCh.Name); destMembers.Add(destCh); } if (duplicateNameAction == ACTIONaddNumber) { destCh = seqNew.CreateChannel(sourceCh.Name + " (2)"); destMembers.Add(destCh); } if (duplicateNameAction != ACTIONkeepFirst) { destCh.CopyFrom(sourceCh, mergeEffects); } } return(destCh); }
public Channel GetChannel(string channelName, Membership parentSubItems) { // Gets existing channel specified by Name if it already exists in the group // Creates it if it does not Channel ret = null; IMember part = null; int gidx = 0; while ((ret == null) && (gidx < parentSubItems.Count)) { part = parentSubItems.Items[gidx]; if (part.MemberType == MemberType.Channel) { if (part.Name == channelName) { ret = (Channel)part; // Clear any existing effects from a previous run if (ret.effects.Count > 0) { ret.effects = new List <Effect>(); } } } gidx++; } if (ret == null) { //int si = Sequence.Members.HighestSavedIndex + 1; ret = Sequence.CreateChannel(channelName); ret.Centiseconds = Sequence.Centiseconds; parentSubItems.Add(ret); } return(ret); }
private void MergeMembers(Membership destMembers, Membership sourceMembers) { bool found = true; // May be called recursively //foreach (IMember sourceMember in sourceMembers) // foreach and enumerable not working, fix! for (int smi = 0; smi < sourceMembers.Count; smi++) { IMember sourceMember = sourceMembers[smi]; if (sourceMember.MemberType == MemberType.Channel) { Channel sourceCh = (Channel)sourceMember; Channel destCh = MergeChannel(sourceCh, destMembers); } if (sourceMember.MemberType == MemberType.RGBchannel) { found = true; // reset to default Channel destCh = null; // placeholder RGBchannel sourceRGB = (RGBchannel)sourceMember; RGBchannel destRGB = (RGBchannel)destMembers.Find(sourceRGB.Name, MemberType.RGBchannel, false); if (destRGB == null) { found = false; destRGB = seqNew.CreateRGBchannel(sourceRGB.Name); destMembers.Add(destRGB); MergeRGBchildren(sourceRGB, destRGB); } else { if (duplicateNameAction == ACTIONuseSecond) { MergeRGBchildren(sourceRGB, destRGB); } if (duplicateNameAction == ACTIONkeepBoth) { destRGB = seqNew.CreateRGBchannel(sourceRGB.Name); destMembers.Add(destRGB); MergeRGBchildren(sourceRGB, destRGB); } if (duplicateNameAction == ACTIONaddNumber) { destRGB = seqNew.CreateRGBchannel(sourceRGB.Name + " (2)"); destMembers.Add(destRGB); MergeRGBchildren(sourceRGB, destRGB); } } } if (sourceMember.MemberType == MemberType.ChannelGroup) { ChannelGroup sourceGroup = (ChannelGroup)sourceMember; ChannelGroup destGroup = (ChannelGroup)destMembers.Find(sourceGroup.Name, MemberType.ChannelGroup, true); // Should only happen once if (destGroup.SavedIndex == 31) { System.Diagnostics.Debugger.Break(); } //Recurse MergeMembers(destGroup.Members, sourceGroup.Members); } } // end loop thru 2nd Sequence's Track Items }