private void _lstStatesOneStart(State_Wrapper sender, MouseEventArgs e) { _OneSource.State = sender; _OneSource.indexPoint = _OneSource.State.GetPointIndex(e.Location); Transition_Wrapper dummy = DeleteTransitions(_OneSource.State, "1"); if (!dummy.IsNull) { RemoveAssociatedTransition(sender, dummy, false); } Utils.Registry.MouseStatus = Utils.Registry.MouseCondition.OneEnd; }
private void AddTransitions(MagnetPoint prev, MagnetPoint next, string input) { Transition_Wrapper currTrans = _lstTransFunc.Find(x => x.TransitionFunction.PrevState == prev.State.Name && x.TransitionFunction.Input == input); if (!currTrans.IsNull) { throw new Exception("something not deleted"); } _lstTransFunc.Add(new Transition_Wrapper(new TransFunc(prev.State.Name, input, next.State.Name), prev, next)); TransFunc[] dummy = new TransFunc[_lstTransFunc.Count]; for (int i = 0; i < _lstTransFunc.Count; i++) { dummy[i] = _lstTransFunc[i].TransitionFunction; } _dfa.Transitions = dummy; DFAIsEdited?.Invoke(); }
private Transition_Wrapper DeleteTransitions(State_Wrapper prev, string input) { Transition_Wrapper currTrans = _lstTransFunc.Find(x => x.TransitionFunction.PrevState == prev.Name && x.TransitionFunction.Input == input); if (!currTrans.IsNull) { _lstTransFunc.Remove(currTrans); TransFunc[] dummy = new TransFunc[_lstTransFunc.Count]; for (int i = 0; i < _lstTransFunc.Count; i++) { dummy[i] = _lstTransFunc[i].TransitionFunction; } _dfa.Transitions = dummy; return(currTrans); } else { return(new Transition_Wrapper(null, new MagnetPoint(), new MagnetPoint())); } }
private void RemoveAssociatedTransition(State_Wrapper state, Transition_Wrapper trans, bool isTransition0) { if (_lastTransitionHistory.Count > 0) { bool removedTransitions = false; Stack <TransitionInfo> transitionsRetained = new Stack <TransitionInfo>(); while (_lastTransitionHistory.Count > 0) { TransitionInfo ti = _lastTransitionHistory.Pop(); if ((state.Name == ti.SourceState.State.Name) && (isTransition0 == ti.IsTransition0)) { if (ti.ConnectionType == "Line") { DrawLine(trans.SourceIndex, trans.DestinationIndex, ti.IsTransition0 ? "0" : "1", false, true); } else if (ti.ConnectionType == "Arc") { DrawArcToSelf(trans.SourceIndex, false, ti.IsTransition0, true); } removedTransitions = true; } else { transitionsRetained.Push(ti); } } while (transitionsRetained.Count > 0) { _lastTransitionHistory.Push(transitionsRetained.Pop()); } if (removedTransitions) { RepaintAllObjects(); DFAIsEdited?.Invoke(); } } }