/// <summary> /// Initializes the style panel of this demo. /// </summary> private void InitializeStylesList() { //Handle list item drawing styleListBox.DrawItem += styleListBox_DrawItem; // register for the mouse down event to initiate the drag operation styleListBox.MouseDown += styleListBox_MouseDown; int nodeSize = 30; // Create a new Graph in which the palette nodes live DefaultGraph nodeContainer = new DefaultGraph(); // Create some nodes nodeContainer.CreateNode(new RectD(20, 20, nodeSize, nodeSize), new ShapeNodeStyle { Shape = ShapeNodeShape.Rectangle, Pen = Pens.Black, Brush = Brushes.DarkOrange }); nodeContainer.CreateNode(new RectD(20, 20, nodeSize, nodeSize), new ShapeNodeStyle { Shape = ShapeNodeShape.RoundRectangle, Pen = Pens.Black, Brush = Brushes.DarkOrange }); nodeContainer.CreateNode(new RectD(20, 20, nodeSize, nodeSize), new BevelNodeStyle { Color = Color.DarkOrange }); nodeContainer.CreateNode(new RectD(20, 20, nodeSize, nodeSize), new ShinyPlateNodeStyle { Brush = Brushes.DarkOrange }); INode node = nodeContainer.CreateNode(new RectD(0, 0, 70, 70), new PanelNodeStyle { Color = Color.LightBlue, Insets = new InsetsD(0, 15, 0, 0) }); nodeContainer.AddLabel(node, "Group Node", InteriorStretchLabelModel.North); var nodeLabelContainer = nodeContainer.CreateNode(new RectD(0, 0, 70, 70), VoidNodeStyle.Instance, "Node Label Container"); var nodeLabel = nodeContainer.AddLabel(nodeLabelContainer, "Node Label", InteriorLabelModel.Center); var edgeLabelContainer = nodeContainer.CreateNode(new RectD(0, 0, 70, 70), VoidNodeStyle.Instance, "Edge Label Container"); var edgeLabelTemplate = nodeContainer.AddLabel(edgeLabelContainer, "Edge Label", FreeNodeLabelModel.Instance.CreateDefaultParameter()); var portContainer = nodeContainer.CreateNode(new RectD(0, 0, 70, 70), VoidNodeStyle.Instance, "Port Container"); nodeContainer.AddPort(portContainer, FreeNodePortLocationModel.NodeCenterAnchored, new NodeStylePortStyleAdapter(new ShapeNodeStyle { Brush = Brushes.Red, Pen = Pens.Black, Shape = ShapeNodeShape.Ellipse }) { RenderSize = new SizeD(10, 10) }); // Add nodes to listview foreach (INode n in nodeContainer.Nodes) { styleListBox.Items.Add(n); } }
/// <summary> /// Initializes the style panel of this demo. /// </summary> private void InitializeStylesList() { int nodeSize = 30; // Create a new Graph in which the palette nodes live IGraph nodeContainer = new DefaultGraph(); // Create some nodes nodeContainer.CreateNode(new RectD(0, 0, nodeSize, nodeSize), new ShapeNodeStyle { Shape = ShapeNodeShape.Rectangle, Pen = Pens.Black, Brush = Brushes.DarkOrange }); nodeContainer.CreateNode(new RectD(0, 0, nodeSize, nodeSize), new ShapeNodeStyle { Shape = ShapeNodeShape.RoundRectangle, Pen = Pens.Black, Brush = Brushes.DarkOrange }); nodeContainer.CreateNode(new RectD(0, 0, nodeSize, nodeSize), new BevelNodeStyle { Color = Colors.DarkOrange }); nodeContainer.CreateNode(new RectD(0, 0, nodeSize, nodeSize), new ShinyPlateNodeStyle { Brush = Brushes.DarkOrange }); INode node = nodeContainer.CreateNode(new RectD(0, 0, 70, 70), new PanelNodeStyle { Color = Colors.LightBlue, Insets = new InsetsD(0, 15, 0, 0) }); nodeContainer.AddLabel(node, "Group Node", InteriorStretchLabelModel.North); var nodeLabelContainer = nodeContainer.CreateNode(new RectD(0, 0, 70, 70), VoidNodeStyle.Instance, "Node Label Container"); var nodeLabel = nodeContainer.AddLabel(nodeLabelContainer, "Node Label", InteriorLabelModel.Center); var edgeLabelContainer = nodeContainer.CreateNode(new RectD(0, 0, 70, 70), VoidNodeStyle.Instance, "Edge Label Container"); var edgeLabelTemplate = nodeContainer.AddLabel(edgeLabelContainer, "Edge Label", FreeNodeLabelModel.Instance.CreateDefaultParameter()); // Add nodes to listview foreach (INode n in nodeContainer.Nodes) { styleListBox.Items.Add(n); } }
/// <summary> /// Fill the node list that acts as a source for nodes. /// </summary> private void PopulateNodesList() { // Create a new Graph in which the palette nodes live // Copy all relevant settings IGraph nodeContainer = new DefaultGraph(); nodeContainer.NodeDefaults.Style = defaultStyle; // Create some nodes CreateNode(nodeContainer, PointD.Origin, FlowChartType.Start); CreateNode(nodeContainer, PointD.Origin, FlowChartType.Operation); CreateNode(nodeContainer, PointD.Origin, FlowChartType.Branch); CreateNode(nodeContainer, PointD.Origin, FlowChartType.End); // Add nodes to listview foreach (INode n in nodeContainer.Nodes) { var type = ((FlowChartNodeStyle)n.Style).FlowChartType; nodeContainer.AddLabel(n, type.ToString(), ExteriorLabelModel.South); styleListBox.Items.Add(n); } }
/// <summary> /// Initializes the graph from the supplied GraphML file and creates the model from it. /// </summary> /// <remarks> /// While this reads the graph from a GraphML file and constructs the model from an already-finished graph, a /// real-world application would likely create the model from whichever data source is available and then create /// the graph from it. /// </remarks> private void InitGraphAndModel() { var graph = new DefaultGraph { NodeDefaults = { Style = new NodeControlNodeStyle("NodeStyle") { OutlineShape = new Ellipse() } }, EdgeDefaults = { Style = new EdgeSegmentControlEdgeStyle("EdgeStyle") } }; var ioh = new GraphMLIOHandler(); // Parse node kinds and other info IMapper <INode, NodeKind> nodeKinds = new DictionaryMapper <INode, NodeKind>(); IMapper <INode, NodeInfo> nodeInfos = new DictionaryMapper <INode, NodeInfo>(); ioh.AddInputMapper("NetworkMonitoring.NodeKind", nodeKinds); ioh.AddInputMapper("NetworkMonitoring.NodeInfo", nodeInfos); ioh.Read(graph, @"Resources\network.graphml"); foreach (var node in graph.Nodes) { // Create and attach the model node to the graph node. var modelNode = new ModelNode { Name = nodeInfos[node].Name, Ip = nodeInfos[node].Ip, Enabled = true, Kind = nodeKinds[node] }; node.Tag = modelNode; // Add the label var label = graph.AddLabel(node, "", FreeLabelModel.Instance.CreateDefaultParameter(), nodeLabelStyle, tag: modelNode); // Attach event handler for changing label visibility, so that the graph redraws accordingly. // Since visibility can change via clicking on the node *and* from within the label, we have to use an event // handler on the model node here. modelNode.PropertyChanged += delegate(object sender, PropertyChangedEventArgs args) { if (args.PropertyName == "LabelVisible") { GraphControl.Invalidate(); } }; } foreach (var edge in graph.Edges) { // Create and attach the model edge to the graph edge var modelEdge = new ModelEdge { Source = (ModelNode)edge.GetSourceNode().Tag, Target = (ModelNode)edge.GetTargetNode().Tag }; edge.Tag = modelEdge; // Add the edge label var label = graph.AddLabel(edge, "", NinePositionsEdgeLabelModel.CenterCentered, edgeLabelStyle, tag: modelEdge); } // Create the mappings from model items to graph elements. modelNodeToINode = graph.Nodes.ToDictionary(node => (ModelNode)node.Tag); modelEdgeToIEdge = graph.Edges.ToDictionary(edge => (ModelEdge)edge.Tag); model = new NetworkModel(modelNodeToINode.Keys, modelEdgeToIEdge.Keys); GraphControl.Graph = graph; }