Ejemplo n.º 1
0
        //*************************************************************************
        //  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();
        }
Ejemplo n.º 2
0
        //*************************************************************************
        //  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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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());
        }
Ejemplo n.º 6
0
        CheckForUpdate()
        {
            // Get the version of the installed version of the application.

            FileVersionInfo oCurrentFileVersionInfo =
                AssemblyUtil2.GetFileVersionInfo();

            // Get the version information for the latest version of the
            // application.

            Int32 iLatestVersionFileMajorPart   = 0;
            Int32 iLatestVersionFileMinorPart   = 0;
            Int32 iLatestVersionFileBuildPart   = 0;
            Int32 iLatestVersionFilePrivatePart = 0;

            try
            {
                GetLatestVersionInfo(out iLatestVersionFileMajorPart,
                                     out iLatestVersionFileMinorPart,
                                     out iLatestVersionFileBuildPart,
                                     out iLatestVersionFilePrivatePart
                                     );
            }
            catch (WebException)
            {
                FormUtil.ShowWarning(
                    "The Web site from which updates are obtained could not be"
                    + " reached.  Either an Internet connection isn't available,"
                    + " or the Web site isn't available."
                    );

                return;
            }
            catch (Exception oException)
            {
                ErrorUtil.OnException(oException);

                return;
            }

            if (
                iLatestVersionFileMajorPart > oCurrentFileVersionInfo.FileMajorPart
                ||
                iLatestVersionFileMinorPart > oCurrentFileVersionInfo.FileMinorPart
                ||
                iLatestVersionFileBuildPart > oCurrentFileVersionInfo.FileBuildPart
                ||
                iLatestVersionFilePrivatePart >
                oCurrentFileVersionInfo.FilePrivatePart
                )
            {
                String sMessage = String.Format(

                    "A new version of {0} is available.  Do you want to open the"
                    + " Web page from which the new version can be downloaded?"
                    ,
                    FormUtil.ApplicationName
                    );

                if (MessageBox.Show(sMessage, FormUtil.ApplicationName,
                                    MessageBoxButtons.YesNo, MessageBoxIcon.Information) ==
                    DialogResult.Yes)
                {
                    Process.Start(ProjectInformation.DownloadPageUrl);
                }
            }
            else
            {
                FormUtil.ShowInformation(String.Format(

                                             "You have the latest version of {0}."
                                             ,
                                             FormUtil.ApplicationName
                                             ));
            }
        }