Пример #1
0
 static public ComponentFabric GetInstance()
 {
     if (instance == null)
     {
         instance = new ComponentFabric();
     }
     return(instance);
 }
        public void UpdatePortsInComponentInstances()
        {
            /* Remove unexists port in defenition */
            foreach (CompositionInstance composition in Compositions)
            {
                foreach (ComponentInstance compInstance in composition.ComponentInstances)
                {
                    ComponentDefenition compDefenition = compInstance.ComponentDefenition;
                    for (int i = compInstance.Ports.Count - 1; i >= 0; i--)
                    {
                        PortPainter    portPainter    = compInstance.Ports[i];
                        PortDefenition portDefenition = compDefenition.Ports.FindObject(portPainter.PortDefenitionGuid);
                        if (portDefenition == null)
                        {
                            DeletePort(portPainter);
                        }
                    }
                }
            }

            /* Add new or missing ports */
            foreach (CompositionInstance composition in Compositions)
            {
                foreach (ComponentInstance compInstance in composition.ComponentInstances)
                {
                    ComponentDefenition compDefenition = compInstance.ComponentDefenition;
                    foreach (PortDefenition portDef in compDefenition.Ports)
                    {
                        bool find = false;
                        foreach (PortPainter portPainter in compInstance.Ports)
                        {
                            if (portPainter.PortDefenition.Equals(portDef))
                            {
                                find = true;
                                break;
                            }
                        }
                        if (!find)
                        {
                            double x = compInstance.Painter.Left - PortPainter.DefaultWidth / 2.0;
                            double y = (compInstance.Painter.Top + compInstance.Painter.Bottom) / 2;

                            PortPainter portPainter = ComponentFabric.GetInstance().CreatePortPainter(portDef, x, y);
                            compInstance.Ports.Add(portPainter);
                        }
                    }
                }
            }
        }