Exemplo n.º 1
0
        // "Add Member" clicked
        void OnClick(object sender, RoutedEventArgs e)
        {
            Button button = e.OriginalSource as Button;

            UMLClassNode diag = sender as UMLClassNode;

            Border buttonFirstParent = button.Parent as Border;
            Grid   grid = buttonFirstParent.Parent as Grid;


            switch (button.Name)
            {
            case "BtAddMember":
                if (Parent == null)
                {
                    return;
                }
                else
                {
                    // add a row to the node's grid, set focus on the textbox of the new row...

                    var rowDefinition = new RowDefinition();

                    rowDefinition.Height = GridLength.Auto;
                    grid.RowDefinitions.Add(rowDefinition);

                    var newTextbox = new TextBox();
                    grid.Children.Add(newTextbox);
                    newTextbox.Focus();

                    Grid.SetRow(newTextbox, grid.RowDefinitions.Count - 2);

                    Grid.SetRow(buttonFirstParent, grid.RowDefinitions.Count - 1);
                }
                break;
            }
        }
Exemplo n.º 2
0
        // this checks the dragged node type and creates the right custom node for it...
        // this checks the dragged node type and creates the right custom node for it...
        #region Node created
        private void DiagramNodeCreated(ShapeNode node)
        {
            // check if the node is a connector
            if (node.Shape.Id == "InheritanceLink")
            {
                // replace the dummy connector node with a DiagramLink
                var bounds = node.Bounds;
                diagram.Items.Remove(node);

                var link = diagram.Factory.CreateDiagramLink(
                    bounds.TopLeft, bounds.BottomRight);
                link.SegmentCount = 2;
                link.Shape        = LinkShape.Cascading;
                link.HeadShape    = ArrowHeads.Triangle;
                ConnectToNearbyNode(link);
            }
            else if (node.Shape.Id == "InterfaceLink")
            {
                var bounds = node.Bounds;
                diagram.Items.Remove(node);

                var link = diagram.Factory.CreateDiagramLink(
                    bounds.TopLeft, bounds.BottomRight);
                link.SegmentCount = 1;
                link.Shape        = LinkShape.Cascading;

                System.Windows.Media.DashStyle dash = new System.Windows.Media.DashStyle();
                dash.Dashes = new DoubleCollection(new double[] { 1, 7 });

                Pen pen = new Pen(Brushes.Black, 1);
                pen.DashStyle = dash;

                link.Pen = pen;

                link.HeadShape = ArrowHeads.Triangle;
                ConnectToNearbyNode(link);
            }
            else if (node.Shape.Id == "RelationshipLink")
            {
                // replace the dummy connector node with a DiagramLink
                var bounds = node.Bounds;
                diagram.Items.Remove(node);

                var link = diagram.Factory.CreateDiagramLink(
                    bounds.TopLeft, bounds.BottomRight);
                link.SegmentCount = 1;
                link.Shape        = LinkShape.Cascading;
                link.HeadShape    = ArrowHeads.DefaultFlow; // might need a custom arrowhead here, supposed to be a straight line with 2
                link.BaseShape    = ArrowHeads.RevWithLine; // vertical || across (see visio)
                ConnectToNearbyNode(link);
            }
            else
            {
                //node.AnchorPattern = AnchorPattern.Decision2In2Out;
                ConnectToNearbyLink(node);
            }

            // no other actions needed if diagram type is basic flowchart
            if (node.Name.Equals("processNode") || node.Name.Equals("startEndNode") ||
                node.Name.Equals("decisionNode") || node.Name.Equals("dataNode") ||
                node.Name.Equals("subprocessNode") || node.Name.Equals("documentNode"))
            {
                return;
            }

            diagram.Items.Remove(node); // dont add the default shape
            // UML Nodes
            if (node.Name.Equals("classNode"))
            {
                var node1 = new UMLClassNode
                {
                    Bounds = new Rect(node.Bounds.Left, node.Bounds.Top, 300, 160),
                };
                diagram.Nodes.Add(node1);
            }
            else if (node.Name.Equals("interfaceNode"))
            {
                var node1 = new UMLInterfaceNode
                {
                    Bounds = new Rect(node.Bounds.Left, node.Bounds.Top, 300, 160),
                };
                diagram.Nodes.Add(node1);
            }
            else if (node.Name.Equals("memberNode"))
            {
                var node1 = new UMLMember
                {
                    Bounds = new Rect(node.Bounds.Left, node.Bounds.Top, 300, 25),
                };
                diagram.Nodes.Add(node1);
            }
            else if (node.Name.Equals("separatorNode"))
            {
                var node1 = new UMLSeparatorNode
                {
                    Bounds = new Rect(node.Bounds.Left, node.Bounds.Top, 300, 5),
                };
                diagram.Nodes.Add(node1);
            }
            else if (node.Name.Equals("packageNode"))
            {
                var node1 = new UMLPackageNode
                {
                    Bounds = new Rect(node.Bounds.Left, node.Bounds.Top, 300, 160),
                };
                diagram.Nodes.Add(node1);
            }
            //
            // Crow's foot nodes
            else if (node.Name.Equals("entityNode"))
            {
                var node1 = new CrowsFootEntity
                {
                    Bounds = new Rect(node.Bounds.Left, node.Bounds.Top, 300, 160),
                };
                diagram.Nodes.Add(node1);
            }
            else if (node.Name.Equals("primaryKeyNode"))
            {
                var node1 = new CFPrimaryKeyNode
                {
                    Bounds = new Rect(node.Bounds.Left, node.Bounds.Top, 300, 25),
                };
                diagram.Nodes.Add(node1);
            }
            else if (node.Name.Equals("attributeNode"))
            {
                var node1 = new CFAttributeNode
                {
                    Bounds = new Rect(node.Bounds.Left, node.Bounds.Top, 300, 25),
                };
                diagram.Nodes.Add(node1);
            }
            else if (node.Name.Equals("primaryKeySeparatorNode"))
            {
                var node1 = new CFPrimaryKeySeparatorNode
                {
                    Bounds = new Rect(node.Bounds.Left, node.Bounds.Top, 300, 5),
                };
                diagram.Nodes.Add(node1);
            }
            else
            {
                return;
            }
        }