//************************************************************************* // Constructor: AboutDialog() // /// <summary> /// Initializes a new instance of the <see cref="AboutDialog" /> class. /// </summary> //************************************************************************* public AboutDialog() { InitializeComponent(); // Instantiate an object that retrieves and saves the location of this // dialog. Note that the object automatically saves the settings when // the form closes. m_oAboutDialogUserSettings = new AboutDialogUserSettings(this); lnkSocialMediaResearchFoundation.Tag = ProjectInformation.SocialMediaResearchFoundationUrl; lnkNodeXLTeamMembers.Tag = ProjectInformation.NodeXLTeamMembersUrl; lnkDonate.Tag = ProjectInformation.DonateUrl; lblVersion.Text = String.Format( "Version {0}" , AssemblyUtil2.GetFileVersion() ); // AssertValid(); }
//************************************************************************* // Constructor: AboutDialog() // /// <summary> /// Initializes a new instance of the <see cref="AboutDialog" /> class. /// </summary> //************************************************************************* public AboutDialog() { InitializeComponent(); // Instantiate an object that retrieves and saves the location of this // dialog. Note that the object automatically saves the settings when // the form closes. m_oAboutDialogUserSettings = new AboutDialogUserSettings(this); lblVersion.Text = String.Format( "Version {0}" , AssemblyUtil2.GetFileVersion() ); lblCopyright.Text = String.Format( "Copyright © {0} Microsoft Corporation" , DateTime.Now.Year ); lnkDiscussionUrl.Text = ProjectInformation.DiscussionUrl; lnkDiscussionUrl.FileName = ProjectInformation.DiscussionUrl; ttToolTip.SetToolTip(lnkDiscussionUrl, String.Format( "Go to {0}" , ProjectInformation.DiscussionUrl )); // AssertValid(); }
TryCalculateGraphMetrics ( IGraph graph, CalculateGraphMetricsContext calculateGraphMetricsContext, out GraphMetricColumn [] graphMetricColumns ) { Debug.Assert(graph != null); Debug.Assert(calculateGraphMetricsContext != null); AssertValid(); // Note regarding cell styles: // // Versions of NodeXL earlier than 1.0.1.130 didn't merge duplicate // edges before calculating graph metrics, and as a result some metrics // were invalid. That was indicated by applying the CellStyleNames.Bad // Excel style to the invalid cells. Starting in version 1.0.1.130 // there are no longer invalid metrics, but the // CellStyleNames.GraphMetricGood style is always applied to those old // potentially bad metric cells (instead of null, which uses the // current cell style) in case graph metrics are calculated on an old // workbook that had bad metric cells. If null were used, the old Bad // style would always remain on the previously bad cells, even if they // are now filled with good metric values. graphMetricColumns = new GraphMetricColumn[0]; if (!calculateGraphMetricsContext.ShouldCalculateGraphMetrics( GraphMetrics.OverallMetrics)) { return(true); } // Calculate the overall metrics using the OverallMetricCalculator // class in the Algorithms namespace, which knows nothing about Excel. OverallMetrics oOverallMetrics; if (!(new Algorithms.OverallMetricCalculator()). TryCalculateGraphMetrics(graph, calculateGraphMetricsContext.BackgroundWorker, out oOverallMetrics)) { // The user cancelled. return(false); } OverallMetricRows oOverallMetricRows = new OverallMetricRows(); //********************************* // Graph type //********************************* AddRow(OverallMetricNames.Directedness, oOverallMetrics.Directedness.ToString(), oOverallMetricRows); //********************************* // Vertex count //********************************* AddRow(oOverallMetricRows); AddRow(OverallMetricNames.Vertices, oOverallMetrics.Vertices, oOverallMetricRows); //********************************* // Edge counts //********************************* AddRow(oOverallMetricRows); AddRow(OverallMetricNames.UniqueEdges, oOverallMetrics.UniqueEdges, oOverallMetricRows); AddRow(OverallMetricNames.EdgesWithDuplicates, oOverallMetrics.EdgesWithDuplicates, oOverallMetricRows); AddRow(OverallMetricNames.TotalEdges, oOverallMetrics.TotalEdges, oOverallMetricRows); //********************************* // Self-loops //********************************* AddRow(oOverallMetricRows); AddRow(OverallMetricNames.SelfLoops, oOverallMetrics.SelfLoops, oOverallMetricRows); //********************************* // Reciprocation ratios //********************************* AddRow(oOverallMetricRows); AddRow(OverallMetricNames.ReciprocatedVertexPairRatio, NullableToGraphMetricValue <Double>( oOverallMetrics.ReciprocatedVertexPairRatio), oOverallMetricRows); AddRow(OverallMetricNames.ReciprocatedEdgeRatio, NullableToGraphMetricValue <Double>( oOverallMetrics.ReciprocatedEdgeRatio), oOverallMetricRows); //********************************* // Connected component counts //********************************* AddRow(oOverallMetricRows); AddRow(OverallMetricNames.ConnectedComponents, oOverallMetrics.ConnectedComponents, oOverallMetricRows); AddRow(OverallMetricNames.SingleVertexConnectedComponents, oOverallMetrics.SingleVertexConnectedComponents, oOverallMetricRows); AddRow(OverallMetricNames.MaximumConnectedComponentVertices, oOverallMetrics.MaximumConnectedComponentVertices, oOverallMetricRows); AddRow(OverallMetricNames.MaximumConnectedComponentEdges, oOverallMetrics.MaximumConnectedComponentEdges, oOverallMetricRows); //********************************* // Geodesic distances //********************************* AddRow(oOverallMetricRows); AddRow(OverallMetricNames.MaximumGeodesicDistance, NullableToGraphMetricValue <Int32>( oOverallMetrics.MaximumGeodesicDistance), oOverallMetricRows); AddRow(OverallMetricNames.AverageGeodesicDistance, NullableToGraphMetricValue <Double>( oOverallMetrics.AverageGeodesicDistance), oOverallMetricRows); //********************************* // Graph density //********************************* AddRow(oOverallMetricRows); AddRow(OverallMetricNames.GraphDensity, NullableToGraphMetricValue <Double>(oOverallMetrics.GraphDensity), oOverallMetricRows); AddRow(OverallMetricNames.Modularity, NullableToGraphMetricValue <Double>(oOverallMetrics.Modularity), oOverallMetricRows); //********************************* // NodeXL version //********************************* AddRow(oOverallMetricRows); AddRow(OverallMetricNames.NodeXLVersion, AssemblyUtil2.GetFileVersion(), oOverallMetricRows); graphMetricColumns = new GraphMetricColumn[] { CreateGraphMetricColumnOrdered( OverallMetricsTableColumnNames.Name, oOverallMetricRows.MetricNames), CreateGraphMetricColumnOrdered( OverallMetricsTableColumnNames.Value, oOverallMetricRows.MetricValues), }; return(true); }
TryCalculateGraphMetrics ( IGraph graph, CalculateGraphMetricsContext calculateGraphMetricsContext, out GraphMetricColumn [] graphMetricColumns ) { Debug.Assert(graph != null); Debug.Assert(calculateGraphMetricsContext != null); AssertValid(); graphMetricColumns = new GraphMetricColumn[0]; if (!calculateGraphMetricsContext.GraphMetricUserSettings. CalculateGraphMetrics(GraphMetrics.OverallMetrics)) { return(true); } // Calculate the overall metrics using the OverallMetricCalculator // class in the Algorithms namespace, which knows nothing about Excel. OverallMetrics oOverallMetrics; if (!(new Algorithms.OverallMetricCalculator()). TryCalculateGraphMetrics(graph, calculateGraphMetricsContext.BackgroundWorker, out oOverallMetrics)) { // The user cancelled. return(false); } OverallMetricRows oOverallMetricRows = new OverallMetricRows(); //********************************* // Graph type //********************************* AddRow("Graph Type", oOverallMetrics.Directedness.ToString(), oOverallMetricRows); //********************************* // Vertex count //********************************* AddRow(oOverallMetricRows); AddRow("Vertices", oOverallMetrics.Vertices, oOverallMetricRows); //********************************* // Edge counts //********************************* String sDuplicateEdgeStyle = CellStyleNames.GraphMetricGood; String sDuplicateEdgeComments = String.Empty; String sGraphDensityComments = String.Empty; if (oOverallMetrics.EdgesWithDuplicates > 0) { // The graph density is rendered invalid when the graph has // duplicate edges. sDuplicateEdgeStyle = CellStyleNames.GraphMetricBad; sDuplicateEdgeComments = "You can merge duplicate edges using NodeXL, Data, Prepare" + " Data, Merge Duplicate Edges." ; sGraphDensityComments = "The workbook contains duplicate edges that have caused the" + " graph density to be inaccurate. " + sDuplicateEdgeComments ; } AddRow(oOverallMetricRows); AddRow("Unique Edges", oOverallMetrics.UniqueEdges, oOverallMetricRows); AddRow("Edges With Duplicates", FormatInt32(oOverallMetrics.EdgesWithDuplicates), sDuplicateEdgeComments, sDuplicateEdgeStyle, oOverallMetricRows); AddRow("Total Edges", oOverallMetrics.TotalEdges, oOverallMetricRows); //********************************* // Self-loops //********************************* AddRow(oOverallMetricRows); AddRow("Self-Loops", oOverallMetrics.SelfLoops, oOverallMetricRows); //********************************* // Connected component counts //********************************* AddRow(oOverallMetricRows); AddRow("Connected Components", oOverallMetrics.ConnectedComponents, oOverallMetricRows); AddRow("Single-Vertex Connected Components", oOverallMetrics.SingleVertexConnectedComponents, oOverallMetricRows); AddRow("Maximum Vertices in a Connected Component", oOverallMetrics.MaximumConnectedComponentVertices, oOverallMetricRows); AddRow("Maximum Edges in a Connected Component", oOverallMetrics.MaximumConnectedComponentEdges, oOverallMetricRows); //********************************* // Geodesic distances //********************************* String sMaximumGeodesicDistance, sAverageGeodesicDistance; GetGeodesicDistanceStrings(oOverallMetrics, out sMaximumGeodesicDistance, out sAverageGeodesicDistance); AddRow(oOverallMetricRows); AddRow("Maximum Geodesic Distance (Diameter)", sMaximumGeodesicDistance, oOverallMetricRows); AddRow("Average Geodesic Distance", sAverageGeodesicDistance, oOverallMetricRows); //********************************* // Graph density //********************************* Nullable <Double> dGraphDensity = oOverallMetrics.GraphDensity; AddRow(oOverallMetricRows); AddRow("Graph Density", dGraphDensity.HasValue ? FormatDouble(dGraphDensity.Value) : NotApplicableMessage, sGraphDensityComments, sDuplicateEdgeStyle, oOverallMetricRows); //********************************* // NodeXL version //********************************* AddRow(oOverallMetricRows); AddRow("NodeXL Version", AssemblyUtil2.GetFileVersion(), oOverallMetricRows); graphMetricColumns = new GraphMetricColumn[] { CreateGraphMetricColumnOrdered( OverallMetricsTableColumnNames.Name, oOverallMetricRows.MetricNames), CreateGraphMetricColumnOrdered( OverallMetricsTableColumnNames.Value, oOverallMetricRows.MetricValues), CreateGraphMetricColumnOrdered( OverallMetricsTableColumnNames.Comments, oOverallMetricRows.MetricComments), }; return(true); }
ConvertToSummaryString() { AssertValid(); StringBuilder oStringBuilder = new StringBuilder(); AppendOverallMetricToSummaryString(oStringBuilder, OverallMetricNames.Vertices, m_iVertices); AppendOverallMetricToSummaryString(oStringBuilder, OverallMetricNames.UniqueEdges, m_iUniqueEdges); AppendOverallMetricToSummaryString(oStringBuilder, OverallMetricNames.EdgesWithDuplicates, m_iEdgesWithDuplicates); AppendOverallMetricToSummaryString(oStringBuilder, OverallMetricNames.TotalEdges, this.TotalEdges); AppendOverallMetricToSummaryString(oStringBuilder, OverallMetricNames.SelfLoops, m_iSelfLoops); AppendOverallMetricToSummaryString(oStringBuilder, OverallMetricNames.ReciprocatedVertexPairRatio, NullableToOverallMetricValue <Double>( m_dReciprocatedVertexPairRatio) ); AppendOverallMetricToSummaryString(oStringBuilder, OverallMetricNames.ReciprocatedEdgeRatio, NullableToOverallMetricValue <Double>(m_dReciprocatedEdgeRatio) ); AppendOverallMetricToSummaryString(oStringBuilder, OverallMetricNames.ConnectedComponents, m_iConnectedComponents); AppendOverallMetricToSummaryString(oStringBuilder, OverallMetricNames.SingleVertexConnectedComponents, m_iSingleVertexConnectedComponents); AppendOverallMetricToSummaryString(oStringBuilder, OverallMetricNames.MaximumConnectedComponentVertices, m_iMaximumConnectedComponentVertices); AppendOverallMetricToSummaryString(oStringBuilder, OverallMetricNames.MaximumConnectedComponentEdges, m_iMaximumConnectedComponentEdges); AppendOverallMetricToSummaryString(oStringBuilder, OverallMetricNames.MaximumGeodesicDistance, NullableToOverallMetricValue <Int32>(m_iMaximumGeodesicDistance) ); AppendOverallMetricToSummaryString(oStringBuilder, OverallMetricNames.AverageGeodesicDistance, NullableToOverallMetricValue <Double>(m_dAverageGeodesicDistance) ); AppendOverallMetricToSummaryString(oStringBuilder, OverallMetricNames.GraphDensity, NullableToOverallMetricValue <Double>(m_dGraphDensity) ); AppendOverallMetricToSummaryString(oStringBuilder, OverallMetricNames.Modularity, NullableToOverallMetricValue <Double>(m_dModularity) ); AppendOverallMetricToSummaryString(oStringBuilder, OverallMetricNames.NodeXLVersion, AssemblyUtil2.GetFileVersion() ); return(oStringBuilder.ToString()); }