private static void SetEventToPutNote( MadcaDisplay display, NoteBook noteBook, IReadOnlyList <IReadOnlyScore> scores, OperationManager opManager, IReadOnlyEditorStatus status) { var box = display.PictureBox; var laneEnv = display.EditorLaneEnvironment; box.MouseDown += (s, e) => { if (status.EditorMode != EditorMode.Add || status.NoteMode == NoteMode.Hold || status.NoteMode == NoteMode.Field) { return; } var area = laneEnv.GetEditorLaneRegion(e.Location); if (area == EditorLaneRegion.Lane && e.Button == MouseButtons.Left) { var res = PositionConverter.ConvertRealToVirtual(laneEnv, e.Location, status.BeatStride, scores, out Position position); if (!res) { return; } var note = MyUtil.NoteFactory(position.Lane, position.Timing, new NoteSize(status.NoteSize), status.NoteMode); if (note is null) { return; } // HACK: この辺の処理どうしようかな opManager.AddAndInvokeOperation(new AddShortNoteOperation(noteBook, note)); } }; }
private static void SetEventToPutHold( MadcaDisplay display, NoteBook noteBook, IReadOnlyList <IReadOnlyScore> scores, OperationManager opManager, IReadOnlyEditorStatus status) { var box = display.PictureBox; var env = display.EditorLaneEnvironment; var holder = display.KeyTokenHolder; var key = new KeyToken(); HoldEnd end = null; box.MouseDown += (s, e) => { if (holder.Locked) { return; } if (status.EditorMode != EditorMode.Add || status.NoteMode != NoteMode.Hold) { return; } var area = env.GetEditorLaneRegion(e.Location); if (area == EditorLaneRegion.Lane && e.Button == MouseButtons.Left) { var res = PositionConverter.ConvertRealToVirtual(env, e.Location, status.BeatStride, scores, out Position position); if (!res) { return; } var hold = new Hold(position.Lane, position.Timing, position.Timing + status.BeatStride, new NoteSize(status.NoteSize)); end = hold.HoldEnd; opManager.AddAndInvokeOperation(new AddHoldOperation(noteBook, hold)); holder.Lock(key); } }; box.MouseMove += (s, e) => { if (!holder.CanUnLock(key)) { return; } var res = PositionConverter.ConvertRealToVirtual(env, e.Location, status.BeatStride, scores, out Position position); if (!res) { return; } end.ReLocate(position.Lane, position.Timing); }; box.MouseUp += (s, e) => { if (!holder.UnLock(key)) { return; } end = null; }; }
private static void SetEventToDeleteNote(MadcaDisplay display, NoteBook noteBook, OperationManager opManager, IReadOnlyEditorStatus status) { display.PictureBox.MouseDown += (s, e) => { var env = display.EditorLaneEnvironment; if (status.EditorMode != EditorMode.Delete) { return; } var area = env.GetEditorLaneRegion(e.Location); if (area == EditorLaneRegion.Lane && e.Button == MouseButtons.Left) { var note = noteBook.Notes.FindLast(x => x.GetRectangle(env).ContainsEx(e.Location, env)); if (note != null) { opManager.AddAndInvokeOperation(new DeleteShortNoteOperation(noteBook, note)); return; } foreach (var hold in noteBook.Holds.Reverse()) { if (hold.HoldBegin.GetRectangle(env).ContainsEx(e.Location, env)) { opManager.AddAndInvokeOperation(new DeleteHoldOperation(noteBook, hold)); return; } foreach (var step in hold.StepNotes) { if (step.GetRectangle(env).ContainsEx(e.Location, env)) { opManager.AddAndInvokeOperation(new DeleteHoldStepOperation(hold, step)); return; } } } } }; }