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());
        }
Exemple #2
0
        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));
 }