Exemple #1
0
        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);
        }
Exemple #3
0
        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
        }