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