public bool ValueEquals(RhythmTemplate other) { if (other == null) { return(false); } return((other.Segments.Count != this.Segments.Count) && !this.Segments.Where((t, i) => !t.ValueEquals(other.Segments[i])).Any()); }
public static Rhythm Apply(this RhythmTemplate template, Rhythm rhythm, ILogger logger) { var templateInstance = template.Instantialize(); if (rhythm == null) { return(templateInstance); } if (rhythm.Segments.Count == 0) // empty rhythm, should be filled with rest { return(rhythm); } if (rhythm.Segments.Any(s => s.FirstVoice != null)) // rhythm already defined { return(rhythm); } if (rhythm.Segments.Count > templateInstance.Segments.Count) { logger.Report(LogLevel.Warning, rhythm.Range, Messages.Warning_TooManyChordsToMatchRhythmTemplate); RhythmTemplateExtensions.CopyVoices(rhythm, templateInstance); for (var i = templateInstance.Segments.Count; i < rhythm.Segments.Count; ++i) { rhythm.Segments[i].IsOmittedByTemplate = true; } } else if (rhythm.Segments.Count < templateInstance.Segments.Count && rhythm.Segments.Count != 1) { logger.Report(LogLevel.Warning, rhythm.Range, Messages.Warning_InsufficientChordsToMatchRhythmTemplate); var lastChord = rhythm.Segments[rhythm.Segments.Count - 1].Chord; RhythmTemplateExtensions.CopyVoices(rhythm, templateInstance); for (var i = rhythm.Segments.Count; i < templateInstance.Segments.Count; ++i) { var segment = templateInstance.Segments[i]; segment.Chord = lastChord; rhythm.Segments.Add(segment); } } else { RhythmTemplateExtensions.CopyVoices(rhythm, templateInstance); } return(rhythm); }
public bool ToDocumentElement(TablatureContext context, ILogger logger, out RhythmTemplate rhythm) { rhythm = new RhythmTemplate { Range = this.Range }; foreach (var segment in this.Segments) { RhythmTemplateSegment rhythmSegment; if (!segment.ToDocumentElement(context, logger, out rhythmSegment)) { return(false); } rhythm.Segments.Add(rhythmSegment); } return(true); }
public bool Equals(RhythmTemplate other) { return(this.TemplateNode.ValueEquals(other)); }