public IGraph Generate()
        {
            IGraph g = new DefaultGraph();

            Generate(g);
            return(g);
        }
        /// <summary>
        /// Fill the node list that acts as a source for nodes.
        /// </summary>
        private void PopulateNodesList()
        {
            var graph = new DefaultGraph
            {
                NodeDefaults = { Size = new SizeD(50, 30), Style = defaultStyle }
            };

            // Create some nodes
            CreateNode(graph, PointD.Origin, LogicGateType.And);
            CreateNode(graph, PointD.Origin, LogicGateType.Nand);
            CreateNode(graph, PointD.Origin, LogicGateType.Or);
            CreateNode(graph, PointD.Origin, LogicGateType.Nor);
            CreateNode(graph, PointD.Origin, LogicGateType.Not);
            // Create an IC
            CreateNode(graph, PointD.Origin, LogicGateType.Timer, "555", new SizeD(70, 120));
            CreateNode(graph, PointD.Origin, LogicGateType.ADConverter, "2-bit A/D\nConverter", new SizeD(70, 120));

            foreach (var node in graph.Nodes)
            {
                nodeStyleListBox.Items.Add(node);
            }
            nodeStyleListBox.ItemHeight = 65;
            //Handle list item drawing
            nodeStyleListBox.DrawItem += nodeStyleListBox_DrawItem;

            // enable drag and drop
            nodeStyleListBox.MouseDown += nodeStyleListBox_MouseDown;
        }
        /// <summary>
        /// Copies a single page into the given view graph.
        /// </summary>
        /// <param name="pageNo">The page number.</param>
        /// <param name="mapper">The mapper that is used to store the <see cref="NodeData"/></param>
        /// <returns>The view graph where the page was created in.</returns>
        public IGraph CreatePageView(int pageNo, IMapper <INode, NodeData> mapper)
        {
            LayoutGraph pageLayoutGraph = result.GetPage(pageNo);
            IGraph      pageView        = new DefaultGraph();

            pageView.MapperRegistry.AddMapper(MapperKeyNodeData, mapper);
            CopyPage(pageLayoutGraph, pageView, pageNo, mapper);
            return(pageView);
        }
        /// <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);
            }
        }
Example #5
0
 /// <summary>
 /// Asynchronously loads a compressed graphmlz file.
 /// </summary>
 private static async Task <IGraph> LoadGraphMlz(string filepath)
 {
     return(await Task.Run(() => {
         var graph = new DefaultGraph();
         var ioh = new GraphMLIOHandler();
         using (var stream = new GZipStream(File.OpenRead(filepath), CompressionMode.Decompress)) {
             ioh.Read(graph, stream);
         }
         return graph;
     }));
 }
        /// <summary>
        /// Populates the palette with the graphs stored in the resources folder.
        /// </summary>
        private void PopulatePalette()
        {
            var ioHandler = new GraphMLIOHandler();

            foreach (var file in Directory.GetFiles("Resources"))
            {
                var graph = new DefaultGraph();
                ioHandler.Read(graph, file);
                PaletteListBox.Items.Add(graph);
            }
        }
        /// <summary>
        /// Initializes the graph instance setting default styles
        /// and creating a small sample graph.
        /// </summary>
        protected virtual void InitializeGraph()
        {
            DefaultGraph defaultGraph = Graph.Lookup <DefaultGraph>();

            if (defaultGraph != null)
            {
                defaultGraph.UndoEngineEnabled = true;
            }
            //Read initial graph from embedded resource
            graphmlIoHandler.Read(GraphControl.Graph, "Resources\\styles.graphml");

            GraphControl.FitGraphBounds();
        }
        public IGraph CreateSampleGraph()
        {
            var graph = new DefaultGraph();

            // Create a few nodes of different height. Some of them show disabled buttons.
            var expandStyle = new GrowShrinkButtonNodeStyleDecorator(new ShinyPlateNodeStyle {
                Brush = Brushes.DarkOrange
            });

            graph.CreateNode(new RectD(0, 0, 80, 40), expandStyle);
            graph.CreateNode(new RectD(120, 0, 80, 100), expandStyle);
            graph.CreateNode(new RectD(240, 0, 80, 150), expandStyle);

            return(graph);
        }
Example #9
0
        /// <summary>
        /// Populates the palette with the graphs stored in the resources folder.
        /// </summary>
        private void InitializePalette()
        {
            //Handle list item drawing
            paletteListBox.DrawItem += OnDrawItem;

            // register for the mouse down event to initiate the drag operation
            paletteListBox.MouseDown += OnMouseDown;

            // populate the palette
            var ioHandler = new GraphMLIOHandler();

            foreach (var file in Directory.GetFiles("Resources").Where(f => f.EndsWith("graphml")))
            {
                var graph = new DefaultGraph();
                ioHandler.Read(graph, file);
                paletteListBox.Items.Add(graph);
            }
        }
        /// <summary>
        /// Fill the node list that acts as a source for nodes.
        /// </summary>
        private void PopulateNodesList()
        {
            var graph = new DefaultGraph();

            // Create some nodes
            CreateNode(graph, PointD.Origin, FlowChartType.Start);
            CreateNode(graph, PointD.Origin, FlowChartType.Operation);
            CreateNode(graph, PointD.Origin, FlowChartType.Branch);
            CreateNode(graph, PointD.Origin, FlowChartType.End);

            foreach (var node in graph.Nodes)
            {
                nodeStyleListBox.Items.Add(node);
            }
            nodeStyleListBox.ItemHeight = 65;
            //Handle list item drawing
            nodeStyleListBox.DrawItem += nodeStyleListBox_DrawItem;

            // enable drag and drop
            nodeStyleListBox.MouseDown += nodeStyleListBox_MouseDown;
        }
        /// <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);
            }
        }
Example #12
0
        /// <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);
            }
        }
Example #13
0
        public virtual void Validate()
        {
            if (Endpoints == null || Endpoints[0] == null || Endpoints[0] == "")
            {
                throw new BrowserException("You must set at least one endpoint IRI!");
            }
            List <string> newEndpoints = new List <string>();

            foreach (var endpoint in Endpoints)
            {
                if (endpoint != null)
                {
                    Config.AssertAbsoluteUri(endpoint);
                    newEndpoints.Add(endpoint);
                }
            }
            Endpoints = newEndpoints.ToArray();

            DefaultGraph = (DefaultGraph != null) ? DefaultGraph.Trim() : "";
            //TODO: somehow replace by Config.Assert
            if (DefaultGraph != "" &&
                !Uri.IsWellFormedUriString(DefaultGraph, UriKind.Absolute))
            {
                throw new BrowserException("Invalid default graph URI!");
            }

            if (Timeout < Config.MIN_SEARCH_TIME)
            {
                Timeout = Config.MIN_SEARCH_TIME;
            }

            if (ResultsOnPage < Config.MIN_RESULTS_ON_PAGE)
            {
                ResultsOnPage = Config.MIN_RESULTS_ON_PAGE;
            }

            validUris = true;
        }
        /// <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 and copy all relevant settings
            IGraph nodeContainer = new DefaultGraph();

            nodeContainer.NodeDefaults.Style = defaultStyle;
            nodeContainer.NodeDefaults.Size  = new SizeD(50, 30);

            // Create some nodes
            CreateNode(nodeContainer, PointD.Origin, LogicGateType.And, "AND");
            CreateNode(nodeContainer, PointD.Origin, LogicGateType.Nand, "NAND");
            CreateNode(nodeContainer, PointD.Origin, LogicGateType.Or, "OR");
            CreateNode(nodeContainer, PointD.Origin, LogicGateType.Nor, "NOR");
            CreateNode(nodeContainer, PointD.Origin, LogicGateType.Not, "NOT");
            // Create an IC
            CreateNode(nodeContainer, PointD.Origin, LogicGateType.Timer, "555", new SizeD(70, 120));
            CreateNode(nodeContainer, PointD.Origin, LogicGateType.ADConverter, "2-bit A/D\nConverter", new SizeD(70, 120));

            // Add nodes to listview
            foreach (var n in nodeContainer.Nodes)
            {
                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;
        }
Example #16
0
        private void LoadDefaults(string uri)
        {
            Style accordionStyle = (Style)Application.Current.Resources["AccordionItemStyle"];
            IMapper <string, HeaderedContentControl> accordionItems = new DictionaryMapper <string, HeaderedContentControl>();
            {
                var graph = new DefaultGraph();
                try {
                    new GraphMLIOHandler().Read(graph, uri);
                } catch (Exception) {
                    return;
                }
                List <StyleChooser> nodeChoosers = new List <StyleChooser>();
                foreach (var node in graph.Nodes)
                {
                    string tag = (string)(node.Tag ?? "Other");

                    if ("Dummy" == tag)
                    {
                        continue;
                    }

                    HeaderedContentControl accordionItem = accordionItems[tag];
                    if (null == accordionItem)
                    {
                        accordionItem = new Expander()
                        {
                            Style = accordionStyle
                        };
                        accordionItem.Header = tag;
                        accordionItems[tag]  = accordionItem;
                        StyleChooserAccordion.Items.Add(accordionItem);
                        var styleChooser = new StyleChooser();
                        styleChooser.ItemType          = typeof(INodeStyle);
                        styleChooser.ItemsSource       = new ObservableCollection <INode>();
                        styleChooser.SelectionChanged += delegate(object sender, SelectionChangedEventArgs args) {
                            if (args.AddedItems.Count > 0)
                            {
                                foreach (var n in nodeChoosers)
                                {
                                    if (n != sender)
                                    {
                                        n.Deselect();
                                    }
                                }
                            }
                        };
                        styleChooser.SelectionChanged += OnSelectionChanged;

                        nodeChoosers.Add(styleChooser);
                        accordionItem.Content            = styleChooser;
                        styleChooser.HorizontalAlignment = HorizontalAlignment.Stretch;
                    }

                    StyleChooser chooser = (StyleChooser)accordionItem.Content;
                    ObservableCollection <INode> itemSource = (ObservableCollection <INode>)chooser.ItemsSource;
                    itemSource.Add(node);
                }
                var nodeChooser = nodeChoosers.FirstOrDefault();
                if (nodeChooser != null)
                {
                    nodeChooser.SelectFirst();
                }

                HeaderedContentControl edgeTypesAccordionItem = new Expander()
                {
                    Style = accordionStyle
                };
                edgeTypesAccordionItem.Header = "Edge Types";
                StyleChooserAccordion.Items.Add(edgeTypesAccordionItem);
                var edgeStyleChooser = new StyleChooser();
                edgeStyleChooser.ItemType = typeof(IEdgeStyle);
                var edgeStyles = new ObservableCollection <IEdgeStyle>();
                edgeStyleChooser.ItemsSource = edgeStyles;

                edgeStyleChooser.SelectionChanged += OnSelectionChanged;


                edgeTypesAccordionItem.Content = edgeStyleChooser;

                foreach (var edge in graph.Edges)
                {
                    edgeStyles.Add(edge.Style);
                }

                edgeStyleChooser.SelectFirst();

                var labelTypesAccordionItem = new Expander()
                {
                    Style = accordionStyle
                };
                labelTypesAccordionItem.Header = "Label Types";
                StyleChooserAccordion.Items.Add(labelTypesAccordionItem);
                var labelStyleChooser = new StyleChooser();
                labelStyleChooser.ItemType = typeof(ILabelStyle);
                var labelStyles = new ObservableCollection <ILabelStyle>();
                labelStyleChooser.ItemsSource   = labelStyles;
                labelTypesAccordionItem.Content = labelStyleChooser;

                labelStyleChooser.SelectionChanged += OnSelectionChanged;

                foreach (var label in graph.Labels)
                {
                    if (label.Owner is INode && Equals("Dummy", label.Owner.Tag))
                    {
                        var style = label.Style;
                        if (style is NodeStyleLabelStyleAdapter)
                        {
                            // unwrap from NodeStyleLabelStyleAdapter
                            style = ((NodeStyleLabelStyleAdapter)style).LabelStyle;
                        }

                        // adjust the default flow direction of SimpleLabelStyles to the flowdirection of the current application.
                        if (style is DefaultLabelStyle)
                        {
                            ((DefaultLabelStyle)style).FlowDirection = this.FlowDirection;
                        }
                        if (style is LabelStyle)
                        {
                            ((LabelStyle)style).FlowDirection = this.FlowDirection;
                        }
                        labelStyles.Add(label.Style);
                    }
                }
                labelStyleChooser.SelectFirst();

                var portTypesAccordionItem = new Expander()
                {
                    Style = accordionStyle
                };
                portTypesAccordionItem.Header = "Port Types";
                StyleChooserAccordion.Items.Add(portTypesAccordionItem);
                var portStyleChooser = new StyleChooser();
                portStyleChooser.ItemType = typeof(IPortStyle);
                var portStyles = new ObservableCollection <IPortStyle>();
                portStyleChooser.ItemsSource   = portStyles;
                portTypesAccordionItem.Content = portStyleChooser;

                portStyleChooser.SelectionChanged += OnSelectionChanged;

                foreach (var port in graph.Ports)
                {
                    if (Equals("Dummy", port.Owner.Tag) && port.Tag != null)
                    {
                        portStyles.Add(port.Style);
                    }
                }
                // clear tags except for group nodes - no one needs them....
                foreach (var node in graph.Nodes)
                {
                    if (!Equals("Group Nodes", node.Tag))
                    {
                        node.Tag = null;
                    }
                }
                foreach (var edge in graph.Edges)
                {
                    edge.Tag = null;
                }
            }
        }