ReadDynamicFilterColumn
    (
        DynamicFilterDialog oDynamicFilterDialog,
        Microsoft.Office.Interop.Excel.Workbook oWorkbook,
        NodeXLControl oNodeXLControl,
        String sWorksheetName,
        String sTableName,
        Dictionary<Int32, IIdentityProvider> oRowIDDictionary,
        HashSet<Int32> oFilteredIDs,
        EdgeOrVertexCanBeMadeVisibleHandler oOnEdgeOrVertexCanBeMadeVisible,
        EdgeOrVertexFilteredHandler oOnEdgeOrVertexFiltered,
        Boolean bForceRedraw
    )
    {
        Debug.Assert(oDynamicFilterDialog != null);
        Debug.Assert(oWorkbook != null);
        Debug.Assert(oNodeXLControl != null);
        Debug.Assert( !String.IsNullOrEmpty(sWorksheetName) );
        Debug.Assert( !String.IsNullOrEmpty(sTableName) );
        Debug.Assert(oRowIDDictionary != null);
        Debug.Assert(oFilteredIDs != null);
        Debug.Assert(oOnEdgeOrVertexCanBeMadeVisible != null);
        Debug.Assert(oOnEdgeOrVertexFiltered != null);

        if (oNodeXLControl.IsLayingOutGraph)
        {
            return;
        }

        oFilteredIDs.Clear();

        // The dynamic filter column on the edge or vertex table contains
        // Booleans indicating whether the edge or vertex should be made
        // visible.

        // Get the data in the ID and dynamic filter columns.

        Object [,] oIDColumnValues, oDynamicFilterColumnValues;

        if ( !TryGetIDAndDynamicFilterValues(oWorkbook, sWorksheetName,
            sTableName, out oIDColumnValues, out oDynamicFilterColumnValues) )
        {
            return;
        }

        HashSet<Int32> oFilteredVertexIDs =
            GetFilteredVertexIDs(oDynamicFilterDialog);

        Int32 iRows = oIDColumnValues.GetUpperBound(0);
        Debug.Assert( iRows == oDynamicFilterColumnValues.GetUpperBound(0) );

        for (Int32 iOneBasedRow = 1; iOneBasedRow <= iRows; iOneBasedRow++)
        {
            Object oID = oIDColumnValues[iOneBasedRow, 1];

            Object oDynamicFilter =
                oDynamicFilterColumnValues[iOneBasedRow, 1];

            IIdentityProvider oEdgeOrVertex;

            if (
                oID is Double
                &&
                oRowIDDictionary.TryGetValue( (Int32)(Double)oID,
                    out oEdgeOrVertex )
                &&
                oDynamicFilter is Boolean
                )
            {
                Debug.Assert(oEdgeOrVertex is IMetadataProvider);

                IMetadataProvider oEdgeOrVertex2 =
                    (IMetadataProvider)oEdgeOrVertex;

                Boolean bMakeVisible = (Boolean)oDynamicFilter;

                if (!bMakeVisible)
                {
                    oFilteredIDs.Add(oEdgeOrVertex.ID);
                }
                else if ( !oOnEdgeOrVertexCanBeMadeVisible(
                    oEdgeOrVertex,
                    GetFilteredEdgeIDs(oDynamicFilterDialog),
                    oFilteredVertexIDs
                    ) )
                {
                    bMakeVisible = false;
                }

                // Filter or make visible the edge or vertex, then call the
                // handler specified by the caller.

                DynamicallyFilterEdgeOrVertex(oEdgeOrVertex2, bMakeVisible);

                oOnEdgeOrVertexFiltered(oEdgeOrVertex2, bMakeVisible,
                    oDynamicFilterDialog);
            }
        }

        if (bForceRedraw)
        {
            oNodeXLControl.DrawGraph();
        }
    }
Exemplo n.º 2
0
        //*************************************************************************
        //  Method: ReadDynamicFilterColumn()
        //
        /// <summary>
        /// Updates the graph with the contents of the dynamic filter column on
        /// the edge or vertex table.
        /// </summary>
        ///
        /// <param name="sWorksheetName">
        /// Name of the worksheet containing the table.
        /// </param>
        ///
        /// <param name="sTableName">
        /// Name of the table.
        /// </param>
        ///
        /// <param name="oIDDictionary">
        /// Dictionary that maps IDs stored in the edge or vertex worksheet to edge
        /// or vertex objects in the graph.
        /// </param>
        ///
        /// <param name="oFilteredIDDictionary">
        /// Dictionary of edge or vertex IDs that have been filtered.  The
        /// dictionary is first cleared and then populated with the IEdge.ID or
        /// IVertex.ID of each edge or vertex that is filtered.
        /// </param>
        ///
        /// <param name="oOnEdgeOrVertexFiltered">
        /// Method to call as each edge or vertex is made visible or filtered.
        /// </param>
        ///
        /// <param name="bForceRedraw">
        /// true if the graph should be redrawn after the column is read.
        /// </param>
        //*************************************************************************
        protected void ReadDynamicFilterColumn(
            String sWorksheetName,
            String sTableName,
            Dictionary<Int32, IIdentityProvider> oIDDictionary,
            Dictionary<Int32, Char> oFilteredIDDictionary,
            EdgeOrVertexFilteredHandler oOnEdgeOrVertexFiltered,
            Boolean bForceRedraw
            )
        {
            Debug.Assert( !String.IsNullOrEmpty(sWorksheetName) );
            Debug.Assert( !String.IsNullOrEmpty(sTableName) );
            Debug.Assert(oIDDictionary != null);
            Debug.Assert(oFilteredIDDictionary != null);
            Debug.Assert(oOnEdgeOrVertexFiltered != null);
            AssertValid();

            if (oNodeXLControl.IsLayingOutGraph)
            {
            return;
            }

            oFilteredIDDictionary.Clear();

            // The dynamic filter column on the edge or vertex table contains
            // Booleans indicating whether the edge or vertex should be made
            // visible.

            // Get the data in the ID and dynamic filter columns.

            Object [,] oIDColumnValues, oDynamicFilterColumnValues;

            if ( !TryGetIDAndDynamicFilterValues(sWorksheetName, sTableName,
            out oIDColumnValues, out oDynamicFilterColumnValues) )
            {
            return;
            }

            Dictionary<Int32, Char> oFilteredVertexIDDictionary =
            GetFilteredVertexIDDictionary();

            Int32 iRows = oIDColumnValues.GetUpperBound(0);
            Debug.Assert( iRows == oDynamicFilterColumnValues.GetUpperBound(0) );

            for (Int32 iOneBasedRow = 1; iOneBasedRow <= iRows; iOneBasedRow++)
            {
            Object oID = oIDColumnValues[iOneBasedRow, 1];

            Object oDynamicFilter =
                oDynamicFilterColumnValues[iOneBasedRow, 1];

            IIdentityProvider oEdgeOrVertex;

            if (
                oID is Double
                &&
                oIDDictionary.TryGetValue( (Int32)(Double)oID,
                    out oEdgeOrVertex )
                &&
                oDynamicFilter is Boolean
                )
            {
                Debug.Assert(oEdgeOrVertex is IMetadataProvider);

                IMetadataProvider oEdgeOrVertex2 =
                    (IMetadataProvider)oEdgeOrVertex;

                Boolean bMakeVisible = (Boolean)oDynamicFilter;

                if (!bMakeVisible)
                {
                    oFilteredIDDictionary[oEdgeOrVertex.ID] = ' ';
                }

                if (oEdgeOrVertex2 is IEdge && bMakeVisible)
                {
                    IEdge oEdge = (IEdge)oEdgeOrVertex;

                    // Don't make the edge visible if either of its vertices
                    // was filtered by a vertex filter.

                    IVertex [] aoVertices = oEdge.Vertices;

                    if (
                        oFilteredVertexIDDictionary.ContainsKey(
                            aoVertices[0].ID)
                        ||
                        oFilteredVertexIDDictionary.ContainsKey(
                            aoVertices[1].ID)
                        )

                    {
                        bMakeVisible = false;
                    }
                }

                // Filter or make visible the edge or vertex, then call the
                // handler specified by the caller.

                DynamicallyFilterEdgeOrVertex(oEdgeOrVertex2, bMakeVisible);

                oOnEdgeOrVertexFiltered(oEdgeOrVertex2, bMakeVisible);
            }
            }

            if (bForceRedraw)
            {
            oNodeXLControl.DrawGraph();
            }
        }
Exemplo n.º 3
0
        ReadDynamicFilterColumn
        (
            DynamicFilterDialog oDynamicFilterDialog,
            Microsoft.Office.Interop.Excel.Workbook oWorkbook,
            NodeXLControl oNodeXLControl,
            String sWorksheetName,
            String sTableName,
            Dictionary <Int32, IIdentityProvider> oRowIDDictionary,
            HashSet <Int32> oFilteredIDs,
            EdgeOrVertexCanBeMadeVisibleHandler oOnEdgeOrVertexCanBeMadeVisible,
            EdgeOrVertexFilteredHandler oOnEdgeOrVertexFiltered,
            Boolean bForceRedraw
        )
        {
            Debug.Assert(oDynamicFilterDialog != null);
            Debug.Assert(oWorkbook != null);
            Debug.Assert(oNodeXLControl != null);
            Debug.Assert(!String.IsNullOrEmpty(sWorksheetName));
            Debug.Assert(!String.IsNullOrEmpty(sTableName));
            Debug.Assert(oRowIDDictionary != null);
            Debug.Assert(oFilteredIDs != null);
            Debug.Assert(oOnEdgeOrVertexCanBeMadeVisible != null);
            Debug.Assert(oOnEdgeOrVertexFiltered != null);

            if (oNodeXLControl.IsLayingOutGraph)
            {
                return;
            }

            oFilteredIDs.Clear();

            // The dynamic filter column on the edge or vertex table contains
            // Booleans indicating whether the edge or vertex should be made
            // visible.

            // Get the data in the ID and dynamic filter columns.

            Object [,] oIDColumnValues, oDynamicFilterColumnValues;

            if (!TryGetIDAndDynamicFilterValues(oWorkbook, sWorksheetName,
                                                sTableName, out oIDColumnValues, out oDynamicFilterColumnValues))
            {
                return;
            }

            HashSet <Int32> oFilteredVertexIDs =
                GetFilteredVertexIDs(oDynamicFilterDialog);

            Int32 iRows = oIDColumnValues.GetUpperBound(0);

            Debug.Assert(iRows == oDynamicFilterColumnValues.GetUpperBound(0));

            for (Int32 iOneBasedRow = 1; iOneBasedRow <= iRows; iOneBasedRow++)
            {
                Object oID = oIDColumnValues[iOneBasedRow, 1];

                Object oDynamicFilter =
                    oDynamicFilterColumnValues[iOneBasedRow, 1];

                IIdentityProvider oEdgeOrVertex;

                if (
                    oID is Double
                    &&
                    oRowIDDictionary.TryGetValue((Int32)(Double)oID,
                                                 out oEdgeOrVertex)
                    &&
                    oDynamicFilter is Boolean
                    )
                {
                    Debug.Assert(oEdgeOrVertex is IMetadataProvider);

                    IMetadataProvider oEdgeOrVertex2 =
                        (IMetadataProvider)oEdgeOrVertex;

                    Boolean bMakeVisible = (Boolean)oDynamicFilter;

                    if (!bMakeVisible)
                    {
                        oFilteredIDs.Add(oEdgeOrVertex.ID);
                    }
                    else if (!oOnEdgeOrVertexCanBeMadeVisible(
                                 oEdgeOrVertex,
                                 GetFilteredEdgeIDs(oDynamicFilterDialog),
                                 oFilteredVertexIDs
                                 ))
                    {
                        bMakeVisible = false;
                    }

                    // Filter or make visible the edge or vertex, then call the
                    // handler specified by the caller.

                    DynamicallyFilterEdgeOrVertex(oEdgeOrVertex2, bMakeVisible);

                    oOnEdgeOrVertexFiltered(oEdgeOrVertex2, bMakeVisible,
                                            oDynamicFilterDialog);
                }
            }

            if (bForceRedraw)
            {
                oNodeXLControl.DrawGraph();
            }
        }