/// <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); }
/// <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); }
/// <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); } }
/// <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. } }
/// <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); } } } }