private void RemoveState(State_Wrapper dfa_state) { if (dfa_state.IsStartState) { _dfa.StartState = ""; } _lstStates.Remove(dfa_state); string[] _state = new string[_lstStates.Count]; for (int i = 0; i < _lstStates.Count; i++) { _state[i] = _lstStates[i].Name; } _dfa.States = _state; if (_dfa.AcceptStates.Contains(dfa_state.Name)) { string[] accept_state = new string[_dfa.AcceptStates.Length - 1]; int x = 0; for (int i = 0; i < _dfa.AcceptStates.Length; i++) { if (_dfa.AcceptStates[i] != dfa_state.Name) { accept_state[x] = _dfa.AcceptStates[i]; x++; } } _dfa.AcceptStates = accept_state; } DFAIsEdited?.Invoke(); }
private void _lstStatesOneEnd(State_Wrapper sender, MouseEventArgs e) { _OneTarget.State = sender; _OneTarget.indexPoint = _OneTarget.State.GetPointIndex(e.Location); if (_OneSource.State == _OneTarget.State) { DrawArcToSelf(_OneSource, true, false, true); _lastTransitionHistory.Push(new TransitionInfo() { ConnectionType = "Arc", SourceState = _OneSource, IsTransition0 = false }); } else { DrawLine(_OneSource, _OneTarget, "1", true, true); _lastTransitionHistory.Push(new TransitionInfo() { ConnectionType = "Line", SourceState = _OneSource, TargetState = _OneTarget, IsTransition0 = false }); } AddTransitions(_OneSource, _OneTarget, "1"); RepaintAllObjects(); Utils.Registry.MouseStatus = Utils.Registry.MouseCondition.ZeroStart; _OneSource.NullIt(); _OneTarget.NullIt(); }
private void _lstState_StateSetStart(State_Wrapper sender, EventArgs e) { if (_dfa.StartState != "") { //remove the old StartState State_Wrapper xyz = GetState(_dfa.StartState); Utils.Drawing.LineParam olddummy = new Utils.Drawing.LineParam(); olddummy.Source = new Point(xyz.SetStartPoint.X - 25, xyz.SetStartPoint.Y); olddummy.Destination = xyz.SetStartPoint; Pen oldtestPen = new Pen(Color.White, 4); oldtestPen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor; olddummy.LineColor = oldtestPen; Utils.Drawing.DrawLine(_drawingBoard, olddummy, true); } Utils.Drawing.LineParam dummy = new Utils.Drawing.LineParam(); dummy.Source = new Point(sender.SetStartPoint.X - 25, sender.SetStartPoint.Y); dummy.Destination = sender.SetStartPoint; Pen testPen = new Pen(Color.Black, 4); testPen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor; dummy.LineColor = testPen; Utils.Drawing.DrawLine(_drawingBoard, dummy, true); _startStatePos = dummy; _dfa.StartState = sender.Name; sender.IsStartState = true; DFAIsEdited?.Invoke(); }
private void _lstState_StateLeaveHovered(State_Wrapper sender, EventArgs e) { Draw(sender, Utils.Registry.StateColors.Default, true); if (sender.IsAcceptState) { DrawAccept(sender, Utils.Registry.StateColors.Default, true); } }
private void _lstState_OnRePaint(State_Wrapper sender, MouseEventArgs e) { Draw(sender, Utils.Registry.StateColors.Default, true); if (sender.IsAcceptState) { DrawAccept(sender, Utils.Registry.StateColors.Default, true); } }
private void DrawRemove(State_Wrapper _state, bool fix) { Utils.Drawing.CircleParam dummy = new Utils.Drawing.CircleParam(); dummy.CenterLocation = _state.CenterLocation; dummy.FillColor = Brushes.White; dummy.OutlineColor = Pens.White; dummy.Radius = Utils.Registry.Radius; Utils.Drawing.DrawCircle(_drawingBoard, dummy, fix); }
private void DrawAccept(State_Wrapper _state, Brush _fillcolor, bool fix) { Utils.Drawing.CircleParam dummy = new Utils.Drawing.CircleParam(); dummy.CenterLocation = _state.CenterLocation; dummy.FillColor = _fillcolor; dummy.OutlineColor = Pens.Black; dummy.Radius = Utils.Registry.Radius - 5; Utils.Drawing.DrawCircle(_drawingBoard, dummy, fix, _state.Name); }
private void AddState(State_Wrapper dfa_state) { _lstStates.Add(dfa_state); string[] _state = new string[_lstStates.Count]; for (int i = 0; i < _lstStates.Count; i++) { _state[i] = _lstStates[i].Name; } _dfa.States = _state; DFAIsEdited?.Invoke(); }
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 _lstState_StateDeleted(State_Wrapper sender, EventArgs e) { if (sender.IsStartState) { _startStatePos.LineColor.Color = Color.White; Utils.Drawing.DrawLine(_drawingBoard, _startStatePos, true); } RemoveAssociatedTransitions(sender); sender.Dispose(_drawingBoard); DrawRemove(sender, true); RemoveState(sender); }
private void _lstState_StateHovered(State_Wrapper sender, MouseEventArgs e) { Draw(sender, Utils.Registry.StateColors.Hovered, true); if (sender.IsAcceptState) { DrawAccept(sender, Utils.Registry.StateColors.Hovered, true); } if (Utils.Registry.MouseStatus == Utils.Registry.MouseCondition.ZeroStart || Utils.Registry.MouseStatus == Utils.Registry.MouseCondition.ZeroEnd || Utils.Registry.MouseStatus == Utils.Registry.MouseCondition.OneStart || Utils.Registry.MouseStatus == Utils.Registry.MouseCondition.OneEnd) { sender.ShowConnectingPoint(_drawingBoard, e.Location); } }
private void RemoveAssociatedTransitions(State_Wrapper state) { if (_lastTransitionHistory.Count > 0) { bool removedTransitions = false; Stack <TransitionInfo> transitionsRetained = new Stack <TransitionInfo>(); Transition_Wrapper tw; while (_lastTransitionHistory.Count > 0) { TransitionInfo ti = _lastTransitionHistory.Pop(); if (ti.ConnectionType == "Line") { if ((state.Name == ti.SourceState.State.Name) || (state.Name == ti.TargetState.State.Name)) { DrawLine(ti.SourceState, ti.TargetState, ti.IsTransition0 ? "0" : "1", false, true); tw = DeleteTransitions(ti.SourceState.State, ti.IsTransition0 ? "0" : "1"); removedTransitions = true; } else { transitionsRetained.Push(ti); } } else if (ti.ConnectionType == "Arc") { if (state.Name == ti.SourceState.State.Name) { DrawArcToSelf(ti.SourceState, false, ti.IsTransition0, true); tw = DeleteTransitions(ti.SourceState.State, ti.IsTransition0 ? "0" : "1"); removedTransitions = true; } else { transitionsRetained.Push(ti); } } } while (transitionsRetained.Count > 0) { _lastTransitionHistory.Push(transitionsRetained.Pop()); } if (removedTransitions) { RepaintAllObjects(); DFAIsEdited?.Invoke(); } } }
private void _lstStates_StateSetAccept(State_Wrapper sender, MouseEventArgs e) { if (sender.IsAcceptState) { sender.IsAcceptState = false; List <string> lstAccept = _dfa.AcceptStates.ToList(); lstAccept.Remove(sender.Name); _dfa.AcceptStates = lstAccept.ToArray(); _lstState_StateHovered(sender, e); } else { sender.IsAcceptState = true; _dfa.AddFinalStates(sender.Name); _lstState_StateHovered(sender, e); } 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(); } } }
public void AddState(Point center) { State_Wrapper _state = new State_Wrapper(_drawingBoard, Utils.Utils.MapToAlphabet(_name_counter++), center); _state.StateHovered += _lstState_StateHovered; _state.StateLeaveHovered += _lstState_StateLeaveHovered; _state.StateDeleted += _lstState_StateDeleted; _state.StateSetStart += _lstState_StateSetStart; _state.StateSetAccept += _lstStates_StateSetAccept; _state.StateZeroStart += _lstStatesZeroStart; _state.StateZeroEnd += _lstStatesZeroEnd; _state.StateOneStart += _lstStatesOneStart; _state.StateOneEnd += _lstStatesOneEnd; _state.OnRepaint += _lstState_OnRePaint; _state.StateClicked += triggerupdate; Draw(_state, Utils.Registry.StateColors.Default, true); AddState(_state); Utils.Registry.LastClickedState = _state; stateclicked?.Invoke(); if (_lstStates.Count == 1) { _lstState_StateSetStart(_state, new EventArgs()); } }
private void triggerupdate(State_Wrapper sender, MouseEventArgs e) { Utils.Registry.LastClickedState = sender; stateclicked?.Invoke(); }
public void NullIt() { State = null; indexPoint = new Point(0, 0); }