public NoteProperties(NoteTreeNode n, GuiCommandExecutor ex, NodeClick c)
            : base(c, ex)
        {
            note = n.getNote();

            String = note.String.ToString();
            Fret   = note.Fret.ToString();

            NoteTreeNode prev_note = ref_click.PartNode?.getPreviousNote(n) ?? null;
            NoteTreeNode next_note = ref_click.PartNode?.getNextNote(n) ?? null;

            IntoEffectProperties   = new EffectProperties(executor, ref_click, note.getEffectAtPosition(EffectPosition.Into), EffectPosition.Into, prev_note, n);
            StrikeEffectProperties = new EffectProperties(executor, ref_click, note.getEffectAtPosition(EffectPosition.Strike), EffectPosition.Strike, null, null);
            AfterEffectProperties  = new EffectProperties(executor, ref_click, note.getEffectAtPosition(EffectPosition.After), EffectPosition.After, n, next_note);
        }
        public NodeClick createCombinedClick(NodeClick select_click)
        {
            NoteTreeNode init   = initial_click.NoteNodes.First();
            NoteTreeNode select = select_click.NoteNodes.First();

            if (init.getNote().Position.occursBefore(select.getNote().Position))
            {
                initial_click.NoteNodes.Add(select);
                return(initial_click);
            }
            else
            {
                select_click.NoteNodes.Add(init);
                return(select_click);
            }
        }
        private TreeNode buildEffectNode(IEffect effect, NoteTreeNode parent)
        {
            if (parent is null)
            {
                return(null);
            }
            Note    note   = parent.getNote();
            IBounds bounds = parent.Bounds;

            if (effect is PalmMute)
            {
                return(buildPalmMute((PalmMute)effect, note, bounds));
            }
            if (effect is Bend)
            {
                return(buildBend((Bend)effect, note, bounds));
            }
            if (effect is PinchHarmonic)
            {
                return(buildPinchHarmonic((PinchHarmonic)effect, note, bounds));
            }
            if (effect is Vibrato)
            {
                return(buildVibrato((Vibrato)effect, note, bounds));
            }
            if (effect is Slide)
            {
                return(buildSlide((Slide)effect, note, bounds));
            }
            if (effect is HOPO)
            {
                return(buildHOPO((HOPO)effect, note, bounds));
            }
            if (effect is Tie)
            {
                return(buildTie((Tie)effect, note, bounds));
            }
            return(null);
        }