/// <summary> /// /// </summary> /// <param name="patch"></param> /// <param name="atLeastOnePatchIsPasted">Or-s the value with True if the patch is pasted</param> /// <returns></returns> bool PasteToSelectedPatch(IPatch patch, ref bool atLeastOnePatchIsPasted) { if ((patch.IsEmptyOrInit || (PcgClipBoard.PastePcgMemory == SelectedPcgMemory)) && !PcgClipBoard.ProtectedPatches.Contains(patch)) { IClipBoardPatches clipBoardPatches = null; var overwriteAllowed = CheckOverwriteallowedForPatches(patch, ref clipBoardPatches); IClipBoardPatch clipBoardPatchToPaste = null; if (clipBoardPatches != null) // Can happen when not allowed to overwrite { clipBoardPatchToPaste = PcgClipBoard.GetFirstPatchToPaste(clipBoardPatches.CopiedPatches); } if (clipBoardPatchToPaste == null) { if (overwriteAllowed) { return(false); // Finished pasting (this kind of patches) } } else { atLeastOnePatchIsPasted = true; PcgClipBoard.PastePatch(clipBoardPatchToPaste, patch); } } return(true); }
/// <summary> /// /// </summary> /// <param name="combi"></param> public ClipBoardCombi(IPatch combi) : base(combi.Root.Content, combi.ByteOffset, combi.ByteLength) { OriginalLocation = combi; References = new ClipBoardPatches(); KronosOs1516Content = new byte[KronosCombiBanks.ParametersInCbk2Chunk * KronosTimbres.TimbresPerCombiConstant]; var memory = combi.Root as KronosPcgMemory; // CBK2 content. if ((memory != null) && (memory.Model.OsVersion == Models.EOsVersion.EOsVersionKronos15_16)) { for (var parameter = 0; parameter < KronosCombiBanks.ParametersInCbk2Chunk; parameter++) { for (var timbre = 0; timbre < KronosTimbres.TimbresPerCombiConstant; timbre++) { var patchParameterOffset = ((KronosCombiBank) (combi.Parent)).GetParameterOffsetInCbk2(combi.Index, timbre, parameter); KronosOs1516Content[parameter + timbre * KronosCombiBanks.ParametersInCbk2Chunk] = combi.Root.Content[patchParameterOffset]; } } } }
/// <summary> /// /// </summary> /// <param name="patch"></param> /// <param name="clipBoardPatches"></param> /// <param name="overwriteAllowed"></param> /// <returns></returns> private bool CheckOverwriteAllowedForWaveSequences(IPatch patch, out IClipBoardPatches clipBoardPatches, bool overwriteAllowed) { clipBoardPatches = null; if (((IBank)(patch.Parent)).IsWritable && (Settings.Default.CopyPaste_OverwriteFilledWaveSequences || patch.IsEmptyOrInit)) { clipBoardPatches = PcgClipBoard.WaveSequences; overwriteAllowed = true; } return(overwriteAllowed); }
/// <summary> /// /// </summary> /// <param name="clipBoardPatches"></param> /// <param name="patch1"></param> /// <param name="overwriteAllowed"></param> /// <returns></returns> private bool CheckOverwriteAllowedForPrograms(out IClipBoardPatches clipBoardPatches, IProgram patch1, bool overwriteAllowed) { clipBoardPatches = null; if (((IBank)(patch1.Parent)).IsWritable && (Settings.Default.CopyPaste_OverwriteFilledPrograms || patch1.IsEmptyOrInit)) { var program = patch1; clipBoardPatches = PcgClipBoard.Programs[(int)(((IProgramBank)(program.Parent)).BankSynthesisType)]; overwriteAllowed = true; } return(overwriteAllowed); }
/// <summary> /// /// </summary> /// <param name="patch"></param> /// <param name="clipBoardPatches"></param> /// <returns></returns> private bool CheckOverwriteallowedForPatches(IPatch patch, ref IClipBoardPatches clipBoardPatches) { bool overwriteAllowed; var patch1 = patch as IProgram; if (patch1 != null) { overwriteAllowed = CheckOverwriteAllowedForPrograms(out clipBoardPatches, patch1, false); } else if (patch is Combi) { overwriteAllowed = CheckOverwriteAllowedForCombis(patch, out clipBoardPatches, false); } else if (patch is SetListSlot) { overwriteAllowed = CheckOverwriteAllowedForSetListSlots(patch, out clipBoardPatches, false); } else if (patch is DrumKit) { overwriteAllowed = CheckOverwriteAllowedForDrumKits(patch, out clipBoardPatches, false); } else if (patch is DrumPattern) { overwriteAllowed = CheckOverwriteAllowedForDrumPatterns(patch, out clipBoardPatches, false); } else if (patch is WaveSequence) { overwriteAllowed = CheckOverwriteAllowedForWaveSequences(patch, out clipBoardPatches, false); } else { throw new ApplicationException("Illegal type"); } return(overwriteAllowed); }