private TreeNode buildMeasure(Measure measure)
        {
            var bounded = new StaticMultiBounded(new MeasureBounds(measure, info, new OrderedDelegate()));
            var handler = new StaticMeasureMouseHandler(bounded.Bounds, new OrderedMouseDelegate());
            var drawing = new StaticDrawingVisual(new MeasureDrawingStrategy(measure, bounded.Bounds, info, new OrderedDelegate()));

            return(new MeasureTreeNode(measure, bounded, handler, drawing));
        }
        private TreeNode buildNote(Note note)
        {
            var bounded = new StaticSingleBounded(new NoteBounds(note, info, new UnorderedDelegate()));
            var handler = new StaticNoteMouseHandler(bounded.Bounds, new UnorderedMouseDelegate());
            var drawing = new StaticDrawingVisual(new NoteDrawingStrategy(note, bounded.Bounds, info, new UnorderedDelegate()));

            return(new NoteTreeNode(note, bounded, handler, drawing));
        }
        private TreeNode buildPart(Part part)
        {
            var bounded = new StaticSingleBounded(new PartBounds(part, info, new OrderedDelegate()));
            var handler = new StaticPartMouseHandler(bounded.Bounds, new OrderedMouseDelegate());
            var drawing = new StaticDrawingVisual(new PartDrawingStrategy(part, bounded.Bounds, info, new OrderedDelegate()));

            return(new PartTreeNode(part, bounded, handler, drawing));
        }
        private TreeNode buildTie(Tie tie, Note note, IBounds bounds)
        {
            var bounded = new StaticSingleBounded(new TieBounds(tie, note, bounds, info, new UnorderedDelegate()));
            var handler = new StaticEffectMouseHandler(bounded.Bounds, new UnorderedMouseDelegate());
            var drawing = new StaticDrawingVisual(new TieDrawingStrategy(tie, bounded.Bounds, info, new UnorderedDelegate()));

            return(new EffectTreeNode(tie, bounded, handler, drawing));
        }
        private TreeNode buildVibrato(Vibrato vibrato, Note note, IBounds bounds)
        {
            var bounded = new StaticSingleBounded(new VibratoBounds(vibrato, note, bounds, info, new UnorderedDelegate()));
            var handler = new StaticEffectMouseHandler(bounded.Bounds, new UnorderedMouseDelegate());
            var drawing = new StaticDrawingVisual(new VibratoDrawingStrategy(vibrato, bounded.Bounds, info, new UnorderedDelegate()));

            return(new EffectTreeNode(vibrato, bounded, handler, drawing));
        }
        private TreeNode buildPinchHarmonic(PinchHarmonic pinch_harmonic, Note note, IBounds bounds)
        {
            var bounded = new StaticSingleBounded(new PinchHarmonicBounds(pinch_harmonic, note, bounds, info, new UnorderedDelegate()));
            var handler = new StaticEffectMouseHandler(bounded.Bounds, new UnorderedMouseDelegate());
            var drawing = new StaticDrawingVisual(new PinchHarmonicDrawingStrategy(pinch_harmonic, bounded.Bounds, info, new UnorderedDelegate()));

            return(new EffectTreeNode(pinch_harmonic, bounded, handler, drawing));
        }
        private TreeNode buildChord(Chord chord)
        {
            var bounds_strat = new ChordBounds(chord, info, new UnorderedDelegate());
            var bounded      = new StaticSingleBounded(bounds_strat);
            var handler      = new StaticChordMouseHandler(bounded.Bounds, new UnorderedMouseDelegate());

            ChordDrawingStrategy strategy;

            if (chord is NoteChord)
            {
                strategy = new ChordDrawingStrategy(chord, bounds_strat.ChordBar, bounds_strat.ChordTuple, bounded.Bounds, info, new UnorderedDelegate());
            }
            else
            {
                strategy = new RestChordDrawingStrategy(chord, bounds_strat.ChordBar, bounds_strat.ChordTuple, bounded.Bounds, info, new UnorderedDelegate());
            }
            var drawing = new StaticDrawingVisual(strategy);

            return(new ChordTreeNode(chord, bounded, handler, drawing));
        }