Example #1
0
        private void DrawFlowPath(FWLine fwLine, FWSymbol startConnector, FWSymbol endConnector)
        {
            Point[] startPoints = startConnector.RectPoints;
            Point[] endPoints   = endConnector.RectPoints;

            double minDistance = double.MaxValue;
            double distance;
            int    shortestI = -1, shortestJ = -1;

            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    distance = GetDistance(startPoints[i], endPoints[j]);
                    if (minDistance > distance)
                    {
                        minDistance = distance;
                        shortestI   = i;
                        shortestJ   = j;
                    }
                }
            }

            fwLine.DrawLine(startPoints[shortestI], endPoints[shortestJ]);
        }
Example #2
0
        private void ConvertFlowToXml()
        {
            FWSymbol terminalStart = null;

            terminalStart = FindTerminalSymbol();

            if (terminalStart == null)
            {
                return;
            }

            FWSymbol currentSymbol = terminalStart;

            XmlWriterSettings xmlWriterSettings = new XmlWriterSettings()
            {
                Indent              = true,
                IndentChars         = "\t",
                NewLineOnAttributes = true
            };

            using (XmlWriter xmlWriter = XmlWriter.Create(XmlPath, xmlWriterSettings))
            {
                xmlWriter.WriteStartDocument();
                xmlWriter.WriteStartElement("Terminal");

                StepIntoFlow(currentSymbol, xmlWriter);

                xmlWriter.WriteEndElement();
                xmlWriter.WriteEndDocument();
            }
        }
Example #3
0
        public FlowComponent(FWSymbol fwSymbol, FlowchartDesigner flowchartDesigner)
        {
            InitializeComponent();

            FlowchartDesigner = flowchartDesigner;

            Shape content = fwSymbol.SymbolShape;

            content.Stretch = Stretch.Fill;

            //최소값 최대값 설정 확인
            minWidth  = content.MinWidth < 10.0 ? 10.0 : content.MinWidth;
            minHeight = content.MinHeight < 10.0 ? 10.0 : content.MinHeight;
            maxWidth  = content.MaxWidth;
            maxHeight = content.MaxHeight;

            CanHResize = true;
            CanVResize = true;

            this.Width  = fwSymbol.Width;
            this.Height = fwSymbol.Height;

            SetValue(Canvas.TopProperty, fwSymbol.Top);
            SetValue(Canvas.LeftProperty, fwSymbol.Left);

            this.Content  = content;
            this.FWSymbol = fwSymbol;

            this.DataContext = fwSymbol;

            FWSymbol.PropertyChanged += FWSymbol_PropertyChanged;
        }
Example #4
0
        public void ReconnectLine()
        {
            foreach (FWSymbol fwSymbol in FWSymbolList)
            {
                if (fwSymbol is FWLine fwLine)
                {
                    FWSymbol startConnector = fwLine.StartConnector;
                    FWSymbol endConnector   = fwLine.EndConnector;

                    DrawFlowPath(fwLine, startConnector, endConnector);
                }
            }
        }
Example #5
0
        private void DrawSymbol(Type type, Point point)
        {
            FlowComponent flowComponent = null;
            FWSymbol      fwSymbol      = null;

            if (type.Equals(typeof(FWTerminal)))
            {
                fwSymbol = new FWTerminal();
            }
            else if (type.Equals(typeof(FWReady)))
            {
                fwSymbol = new FWReady();
            }
            else if (type.Equals(typeof(FWProcess)))
            {
                fwSymbol = new FWProcess();
            }
            else if (type.Equals(typeof(FWDecision)))
            {
                fwSymbol = new FWDecision();
            }

            if (fwSymbol != null)
            {
                fwSymbol.Left   = Math.Round(point.X);
                fwSymbol.Top    = Math.Round(point.Y);
                fwSymbol.Width  = 100;
                fwSymbol.Height = 30;

                if (!FWSymbolList.Contains(fwSymbol))
                {
                    FWSymbolList.Add(fwSymbol);
                }

                flowComponent = new FlowComponent(fwSymbol, this);

                flowComponent.PropertyChanged  += FlowComponent_PropertyChanged;
                flowComponent.PreviewMouseDown += FlowComponent_PreviewMouseDown;
                flowComponent.PreviewMouseUp   += FlowComponent_PreviewMouseUp;

                canvasArea.Children.Add(flowComponent);

                FlowManager.Instance.FlowTool.Deselection();
            }
        }
Example #6
0
        public void DeleteSymbol(FlowComponent flowComponent)
        {
            FWSymbol fwSymbol = flowComponent.FWSymbol;

            if (fwSymbol.StartConnector != null)
            {
                fwSymbol.StartConnector.EndConnector = null;
            }

            if (fwSymbol.EndConnector != null)
            {
                fwSymbol.EndConnector.StartConnector = null;
            }

            FWSymbolList.Remove(fwSymbol);

            canvasArea.Children.Remove(flowComponent);
        }
Example #7
0
        private void ConnectLine(FWSymbol startConnector, FWSymbol endConnector)
        {
            if (startConnector.EndConnector != null)
            {
                return;
            }

            FWLine fwLine = new FWLine
            {
                StartConnector = startConnector,
                EndConnector   = endConnector
            };

            if (startConnector is FWDecision fwDecision)
            {
                if (fwDecision.EndConnector[0] == null)
                {
                    fwDecision.EndConnector[0] = fwLine;
                }
                else if (fwDecision.EndConnector[1] == null)
                {
                    fwDecision.EndConnector[1] = fwLine;
                }
                else
                {
                    return;
                }

                endConnector.StartConnector = fwLine;
            }
            else
            {
                startConnector.EndConnector = fwLine;
                endConnector.StartConnector = fwLine;
            }

            FWSymbolList.Add(fwLine);

            DrawFlowPath(fwLine, startConnector, endConnector);

            FlowComponent flowComponent = new FlowComponent(fwLine, this);

            canvasArea.Children.Add(flowComponent);
        }
Example #8
0
        private FWSymbol FindTerminalSymbol()
        {
            FWSymbol terminalStart = null;

            foreach (FWSymbol fwSymbol in FWSymbolList)
            {
                if (fwSymbol is FWTerminal fwTerminal)
                {
                    if (fwTerminal.StartConnector == null &&
                        fwTerminal.EndConnector != null)
                    {
                        terminalStart = fwTerminal;
                        break;
                    }
                }
            }

            return(terminalStart);
        }
        public FWDecisionWindow(FWSymbol fwSymbol)
        {
            InitializeComponent();

            this.DataContext = fwSymbol;
        }
Example #10
0
        private void StepIntoFlow(FWSymbol currentSymbol, XmlWriter xmlWriter)
        {
            while ((currentSymbol = currentSymbol.EndConnector) != null)
            {
                if (currentSymbol is FWLine)
                {
                    continue;
                }

                if (currentSymbol is FWReady fwReady)
                {
                    xmlWriter.WriteStartElement("Ready");
                    xmlWriter.WriteAttributeString("Type", fwReady.VarType);
                    xmlWriter.WriteAttributeString("Name", fwReady.VarName);
                    xmlWriter.WriteEndElement();
                }
                else if (currentSymbol is FWProcess fwProcess)
                {
                    // 액션 종류 여러개임
                    if (fwProcess is ActionCodeInjection actionCodeInjection)
                    {
                        xmlWriter.WriteStartElement("Process");
                        xmlWriter.WriteAttributeString("ProcessName", "CodeInjection");
                        xmlWriter.WriteAttributeString("Code", actionCodeInjection.Code);
                        xmlWriter.WriteEndElement();
                    }
                    else if (fwProcess is ActionInputValue actionInputValue)
                    {
                        xmlWriter.WriteStartElement("Process");
                        xmlWriter.WriteAttributeString("ProcessName", "InputValue");
                        xmlWriter.WriteAttributeString("VarName", actionInputValue.VarName);
                        xmlWriter.WriteAttributeString("VarValue", actionInputValue.VarValue);
                        xmlWriter.WriteEndElement();
                    }
                    else if (fwProcess is ActionMessageBox actionMessageBox)
                    {
                        xmlWriter.WriteStartElement("Process");
                        xmlWriter.WriteAttributeString("ProcessName", "MessageBox");
                        xmlWriter.WriteAttributeString("Message", actionMessageBox.Message);
                        xmlWriter.WriteEndElement();
                    }
                    else if (fwProcess is ActionListBoxAdd actionListBoxAdd)
                    {
                        xmlWriter.WriteStartElement("Process");
                        xmlWriter.WriteAttributeString("ProcessName", "ListBoxAdd");
                        xmlWriter.WriteAttributeString("ListBoxName", actionListBoxAdd.ListBoxName);
                        xmlWriter.WriteAttributeString("ListBoxItem", actionListBoxAdd.ListBoxItem.ToString());
                        xmlWriter.WriteEndElement();
                    }
                    else if (fwProcess is ActionListBoxRemove actionListBoxRemove)
                    {
                        xmlWriter.WriteStartElement("Process");
                        xmlWriter.WriteAttributeString("ProcessName", "ListBoxRemove");
                        xmlWriter.WriteAttributeString("ListBoxName", actionListBoxRemove.ListBoxName);
                        xmlWriter.WriteAttributeString("ListBoxItem", actionListBoxRemove.ListBoxItem.ToString());
                        xmlWriter.WriteEndElement();
                    }
                    // 추가 예정
                    else if (false)
                    {
                    }
                }
                else if (currentSymbol is FWDecision fwDecision)
                {
                    //True
                    if (fwDecision.DecisionTrue != null)
                    {
                        xmlWriter.WriteStartElement("Decision");
                        xmlWriter.WriteAttributeString("Condition", fwDecision.ConditionalExpression);

                        StepIntoFlow(fwDecision.DecisionTrue, xmlWriter);

                        xmlWriter.WriteEndElement();
                    }

                    //False
                    if (fwDecision.DecisionFalse != null)
                    {
                        xmlWriter.WriteStartElement("Decision");
                        xmlWriter.WriteAttributeString("Condition", "!(" + fwDecision.ConditionalExpression + ")");

                        StepIntoFlow(fwDecision.DecisionFalse, xmlWriter);

                        xmlWriter.WriteEndElement();
                    }
                }
            }
        }