Example #1
0
        /// <summary>
        /// Returns the index from the drum Pattern. -1 if not found.
        /// </summary>
        /// <param name="drumPattern"></param>
        /// <returns></returns>
        public int FindIndexOf(IDrumPattern drumPattern)
        {
            var foundIndex = 0;

            if (BankCollection == null)
            {
                return(-1);
            }

            foreach (var bank in BankCollection)
            {
                if (!bank.IsLoaded && !bank.IsFromMasterFile)
                {
                    return(-1);
                }

                foreach (var drumPatternInBank in bank.Patches)
                {
                    if (drumPatternInBank == drumPattern)
                    {
                        return(foundIndex);
                    }
                    foundIndex++;
                }
            }

            return(-1);
        }
Example #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="drumPattern"></param>
        /// <param name="clipBoardProgram"></param>
        public void CopyDrumPatternOfProgramToClipBoard(IDrumPattern drumPattern, IClipBoardProgram clipBoardProgram)
        {
            IClipBoardDrumPattern clipBoardDrumPatternToAdd = FindDrumPattern(drumPattern) ??
                                                              CopyDrumPatternToClipBoard(drumPattern, false);

            //clipBoardProgram.ReferencedDrumPatterns.CopiedPatches.Add(clipBoardDrumPatternToAdd);
        }
Example #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="drumPattern"></param>
        public ClipBoardDrumPattern(IDrumPattern drumPattern)
            : base(drumPattern.PcgRoot.Content, drumPattern.ByteOffset, drumPattern.ByteLength)
        {
            OriginalLocation = drumPattern;

            if ((drumPattern.Root is PcgMemory memory) && (memory.PcgRoot.Model.OsVersion == Models.EOsVersion.Kronos15_16))
            {
                KronosOs1516Bank  = Util.GetInt(memory.Content, ((KronosDrumPattern)drumPattern).Drk2BankOffset, 1);
                KronosOs1516Patch = Util.GetInt(memory.Content, ((KronosDrumPattern)drumPattern).Drk2PatchOffset, 1);
            }
        }
Example #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="drumPattern"></param>
        /// <param name="clearAfterCopy"></param>
        public IClipBoardDrumPattern CopyDrumPatternToClipBoard(IDrumPattern drumPattern, bool clearAfterCopy)
        {
            if (!((IBank)drumPattern.Parent).IsLoaded)
            {
                return(null);
            }

            var clipBoardDrumPattern = new ClipBoardDrumPattern(drumPattern);

            DrumPatterns.CopiedPatches.Add(clipBoardDrumPattern);

            if (clearAfterCopy)
            {
                drumPattern.Clear();
            }

            return(clipBoardDrumPattern);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="patchToPaste"></param>
        /// <param name="patch"></param>
        public void PastePatch(IClipBoardPatch patchToPaste, IPatch patch)
        {
            // Copy patch from clipboard to PCG.
            patch.PcgRoot.CopyPatch(patchToPaste, patch);
            patchToPaste.PasteDestination = patch;
            ProtectedPatches.Add(patch);

            if (CutPasteSelected)
            {
                IProgram program = patch as IProgram;
                if (program != null)
                {
                    FixReferencesToProgram(patchToPaste, program);
                }
                else
                {
                    ICombi combi = patch as ICombi;
                    if (combi != null)
                    {
                        FixReferencesToCombi(patchToPaste, combi);
                    }
                    else
                    {
                        IDrumKit drumKit = patch as IDrumKit;
                        if (drumKit != null)
                        {
                            FixReferencesToDrumKit(patchToPaste, drumKit);
                        }
                        else
                        {
                            IDrumPattern drumPattern = patch as IDrumPattern;
                            if (drumPattern != null)
                            {
                                FixReferencesToDrumPattern(patchToPaste, drumPattern);
                            }
                        }
                    }
                }
                // If it is a set list slot do nothing.
            }
        }
Example #6
0
        /// <summary>
        /// Changes all references of the original location of patch to drum pattern.
        /// Only used for cut/paste.
        /// </summary>
        /// <param name="patchToPaste"></param>
        /// <param name="drumPattern"></param>
        private static void FixReferencesToDrumPattern(IClipBoardPatch patchToPaste, IDrumPattern drumPattern)
        {
            var memory = patchToPaste.OriginalLocation.Root as IPcgMemory;

            Debug.Assert(memory != null);

            // Change programs (if present and not from master file).
            if (memory.ProgramBanks != null)
            {
                foreach (var programBank in memory.ProgramBanks.BankCollection.Where(
                             bank => bank.IsWritable && !bank.IsFromMasterFile))
                {
                    foreach (var program in programBank.Patches)
                    {
                        var changes = new Dictionary <IDrumPattern, IDrumPattern>
                        {
                            { (IDrumPattern)(patchToPaste.OriginalLocation), drumPattern }
                        };
                        // TODO ((IProgram)program).ReplaceDrumPattern(changes);
                    }
                }
            }
        }