Пример #1
0
        ReadFilteredAlpha
        (
            DynamicFilterDialog dynamicFilterDialog,
            NodeXLControl nodeXLControl,
            Boolean forceRedraw
        )
        {
            Debug.Assert(dynamicFilterDialog != null);
            Debug.Assert(nodeXLControl != null);

            nodeXLControl.FilteredAlpha =
                (new AlphaConverter()).WorkbookToGraphAsByte(
                    dynamicFilterDialog.FilteredAlpha);

            if (forceRedraw)
            {
                nodeXLControl.DrawGraph();
            }
        }
Пример #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();
            }
        }