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
        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();
            }
        }