Example #1
0
 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();
 }
Example #2
0
        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();
        }
Example #3
0
        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();
        }
Example #4
0
 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);
     }
 }
Example #5
0
 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);
     }
 }
Example #6
0
 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);
 }
Example #7
0
 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);
 }
Example #8
0
 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();
 }
Example #9
0
        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;
        }
Example #10
0
 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);
 }
Example #11
0
 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);
     }
 }
Example #12
0
 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();
         }
     }
 }
Example #13
0
 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();
 }
Example #14
0
        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()));
            }
        }
Example #15
0
        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();
                }
            }
        }
Example #16
0
        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());
            }
        }
Example #17
0
 private void triggerupdate(State_Wrapper sender, MouseEventArgs e)
 {
     Utils.Registry.LastClickedState = sender;
     stateclicked?.Invoke();
 }
Example #18
0
 public void NullIt()
 {
     State      = null;
     indexPoint = new Point(0, 0);
 }