/// <summary> /// User has decided to cancel the dragging action. Make sure his wishes are followed /// </summary> public void OnLeftMouseCancel() { if (activeMouseDragAction == null) { return; } activeMouseDragAction.CancelDragging(); activeMouseDragAction = null; _draggingIsActive = false; }
/// <summary> /// Mouse has been released, so dragging is ended. Perform the corresponding closing actions /// </summary> public void OnLeftMouseRelease() { if (activeMouseDragAction == null) { return; } activeMouseDragAction.EndDragging(); activeMouseDragAction = null; OnPathChanged(); }
/// <summary> /// Determine which action would be taken if, subsequently, the left-mouse button will be clicked /// </summary> /// <param name="wantDragAction">Do we want a drag-action?</param> /// <param name="wantClickAction">Do we want a click-action?</param> /// <param name="mouseX">The current location of the mouse in x-direction</param> /// <param name="mouseY">The current location of the mouse in y-direction</param> public void DeterminePossibleActions(bool wantDragAction, bool wantClickAction, int mouseX, int mouseY) { CurrentActionDescription = ""; activeMouseDragAction = null; activeMouseClickAction = null; if (wantDragAction) { foreach (EditorActionMouseDrag mouseDragAction in editorDragActionsMouseClicked) { if (mouseDragAction.MenuState(CurrentTrainPath, activeNode, activeTrackLocation, UpdateAfterEdits, mouseX, mouseY)) { CurrentActionDescription = mouseDragAction.ToString(); activeMouseDragAction = mouseDragAction; return; } } } else if (wantClickAction) { foreach (EditorAction action in editorActionsMouseClicked) { bool actionCanBeExecuted = action.MenuState(CurrentTrainPath, activeNode, activeTrackLocation, UpdateAfterEdits, mouseX, mouseY); if (actionCanBeExecuted) { CurrentActionDescription = action.ToString(); activeMouseClickAction = action; return; } } } //direct key actions activeAddEndAction = possibleAddEndAction.MenuState(CurrentTrainPath, activeNode, activeTrackLocation, UpdateAfterEdits, mouseX, mouseY) ? possibleAddEndAction : null; activeAddWaitAction = possibleAddWaitAction.MenuState(CurrentTrainPath, activeNode, activeTrackLocation, UpdateAfterEdits, mouseX, mouseY) ? possibleAddWaitAction : null; }
/// <summary> /// See whether an action is possible based on mouse click and perform it. /// </summary> /// <param name="mouseX"></param> /// <param name="mouseY"></param> public void OnLeftMouseClick(int mouseX, int mouseY) { foreach (EditorActionMouseDrag mouseDragAction in mouseDragActions) { if (mouseDragAction.MenuState(currentTrainPath, activeNode, activeTrackLocation, UpdateAfterEdits, mouseX, mouseY)) { activeMouseDragAction = mouseDragAction; activeMouseDragAction.StartDragging(); return; } } foreach (EditorAction action in editorActionsMouseClicked) { bool actionCanBeExecuted = action.MenuState(currentTrainPath, activeNode, activeTrackLocation, UpdateAfterEdits, mouseX, mouseY); if (actionCanBeExecuted) { action.DoAction(); break; } } }