示例#1
0
        void InitPitchPointContextMenu()
        {
            pitchCxtMenu            = new ContextMenu();
            pitchCxtMenu.Background = Brushes.White;
            pitchCxtMenu.Items.Add(new MenuItem()
            {
                Header = "Ease In/Out"
            });
            pitchCxtMenu.Items.Add(new MenuItem()
            {
                Header = "Linear"
            });
            pitchCxtMenu.Items.Add(new MenuItem()
            {
                Header = "Ease In"
            });
            pitchCxtMenu.Items.Add(new MenuItem()
            {
                Header = "Ease Out"
            });
            pitchCxtMenu.Items.Add(new MenuItem()
            {
                Header = "Snap to Previous Note"
            });
            pitchCxtMenu.Items.Add(new MenuItem()
            {
                Header = "Delete Point"
            });
            pitchCxtMenu.Items.Add(new MenuItem()
            {
                Header = "Add Point"
            });

            pitHitContainer    = new PitchPointHitTestResultContainer();
            pitchShapeDelegate = (_o, _e) => {
                var o      = _o as MenuItem;
                var pitHit = pitHitContainer.Result;
                if (o == pitchCxtMenu.Items[4])
                {
                    DocManager.Inst.StartUndoGroup();
                    DocManager.Inst.ExecuteCmd(new SnapPitchPointCommand(pitHit.Note));
                    DocManager.Inst.EndUndoGroup();
                }
                else if (o == pitchCxtMenu.Items[5])
                {
                    DocManager.Inst.StartUndoGroup();
                    DocManager.Inst.ExecuteCmd(new DeletePitchPointCommand(midiVM.Part, pitHit.Note, pitHit.Index));
                    DocManager.Inst.EndUndoGroup();
                }
                else if (o == pitchCxtMenu.Items[6])
                {
                    DocManager.Inst.StartUndoGroup();
                    DocManager.Inst.ExecuteCmd(new AddPitchPointCommand(pitHit.Note, new PitchPoint(pitHit.X, pitHit.Y), pitHit.Index + 1));
                    DocManager.Inst.EndUndoGroup();
                }
                else
                {
                    PitchPointShape shape =
                        o == pitchCxtMenu.Items[0] ? PitchPointShape.io :
                        o == pitchCxtMenu.Items[2] ? PitchPointShape.i :
                        o == pitchCxtMenu.Items[3] ? PitchPointShape.o : PitchPointShape.l;
                    DocManager.Inst.StartUndoGroup();
                    DocManager.Inst.ExecuteCmd(new ChangePitchPointShapeCommand(pitHit.Note.PitchBend.Points[pitHit.Index], shape));
                    DocManager.Inst.EndUndoGroup();
                }
            };

            foreach (var item in pitchCxtMenu.Items)
            {
                var _item = item as MenuItem;
                if (_item != null)
                {
                    _item.Click += pitchShapeDelegate;
                }
            }
        }
示例#2
0
        void InitPitchPointContextMenu()
        {
            pitchCxtMenu = new ContextMenu();
            pitchCxtMenu.Background = Brushes.White;
            pitchCxtMenu.Items.Add(new MenuItem() { Header = "Ease In/Out" });
            pitchCxtMenu.Items.Add(new MenuItem() { Header = "Linear" });
            pitchCxtMenu.Items.Add(new MenuItem() { Header = "Ease In" });
            pitchCxtMenu.Items.Add(new MenuItem() { Header = "Ease Out" });
            pitchCxtMenu.Items.Add(new MenuItem() { Header = "Snap to Previous Note" });
            pitchCxtMenu.Items.Add(new MenuItem() { Header = "Delete Point" });
            pitchCxtMenu.Items.Add(new MenuItem() { Header = "Add Point" });

            pitHitContainer = new PitchPointHitTestResultContainer();
            pitchShapeDelegate = (_o, _e) =>
            {
                var o = _o as MenuItem;
                var pitHit = pitHitContainer.Result;
                if (o == pitchCxtMenu.Items[4])
                {
                    DocManager.Inst.StartUndoGroup();
                    DocManager.Inst.ExecuteCmd(new SnapPitchPointCommand(pitHit.Note));
                    DocManager.Inst.EndUndoGroup();
                }
                else if (o == pitchCxtMenu.Items[5])
                {
                    DocManager.Inst.StartUndoGroup();
                    DocManager.Inst.ExecuteCmd(new DeletePitchPointCommand(midiVM.Part, pitHit.Note, pitHit.Index));
                    DocManager.Inst.EndUndoGroup();
                }
                else if (o == pitchCxtMenu.Items[6])
                {
                    DocManager.Inst.StartUndoGroup();
                    DocManager.Inst.ExecuteCmd(new AddPitchPointCommand(pitHit.Note, new PitchPoint(pitHit.X, pitHit.Y), pitHit.Index + 1));
                    DocManager.Inst.EndUndoGroup();
                }
                else
                {
                    PitchPointShape shape =
                        o == pitchCxtMenu.Items[0] ? PitchPointShape.io :
                        o == pitchCxtMenu.Items[2] ? PitchPointShape.i :
                        o == pitchCxtMenu.Items[3] ? PitchPointShape.o : PitchPointShape.l;
                    DocManager.Inst.StartUndoGroup();
                    DocManager.Inst.ExecuteCmd(new ChangePitchPointShapeCommand(pitHit.Note.PitchBend.Points[pitHit.Index], shape));
                    DocManager.Inst.EndUndoGroup();
                }
            };

            foreach (var item in pitchCxtMenu.Items)
            {
                var _item = item as MenuItem;
                if (_item != null) _item.Click += pitchShapeDelegate;
            }
        }