Smrf.NodeXL.ExcelTemplate.CollapsedGroupAttributeAdder.AddCollapsedGroupAttributesInternal C# (CSharp) Method

AddCollapsedGroupAttributesInternal() private static method

private static AddCollapsedGroupAttributesInternal ( Microsoft oWorkbook, ReadWorkbookContext oReadWorkbookContext, ListObject oEdgeTable, ListObject oVertexTable, GroupInfo aoGroups ) : void
oWorkbook Microsoft
oReadWorkbookContext ReadWorkbookContext
oEdgeTable ListObject
oVertexTable ListObject
aoGroups Smrf.NodeXL.Core.GroupInfo
return void
    AddCollapsedGroupAttributesInternal
    (
        Microsoft.Office.Interop.Excel.Workbook oWorkbook,
        ReadWorkbookContext oReadWorkbookContext,
        ListObject oEdgeTable,
        ListObject oVertexTable,
        GroupInfo[] aoGroups
    )
    {
        Debug.Assert(oWorkbook != null);
        Debug.Assert(oReadWorkbookContext != null);
        Debug.Assert(oEdgeTable != null);
        Debug.Assert(oVertexTable != null);
        Debug.Assert(aoGroups != null);
        Debug.Assert(aoGroups.Length > 0);

        // Check whether relevant columns have been autofilled using numerical
        // source columns.

        PerWorkbookSettings oPerWorkbookSettings =
            new PerWorkbookSettings(oWorkbook);

        AutoFillColorColumnResults oVertexColorResults =
            oPerWorkbookSettings.AutoFillWorkbookResults.VertexColorResults;

        Boolean bVertexColorColumnAutoFilled =
            oVertexColorResults.ColumnAutoFilled &&
            !oVertexColorResults.ColumnAutoFilledWithCategories;

        AutoFillColorColumnResults oEdgeColorResults =
            oPerWorkbookSettings.AutoFillWorkbookResults.EdgeColorResults;

        Boolean bEdgeColorColumnAutoFilled =
            oEdgeColorResults.ColumnAutoFilled &&
            !oEdgeColorResults.ColumnAutoFilledWithCategories;

        AutoFillNumericRangeColumnResults oEdgeWidthResults =
            oPerWorkbookSettings.AutoFillWorkbookResults.EdgeWidthResults;

        Boolean bEdgeWidthColumnAutoFilled =
            oEdgeWidthResults.ColumnAutoFilled;

        // Some user settings for autofill may be needed.
        //
        // Note: This is a design bug.  The user's current settings should not
        // be required; everything needed here should come from the autofill
        // results.  The long-term fix is to add a UseLogs property to the
        // AutoFillColorColumnResults class.

        AutoFillUserSettings oAutoFillUserSettings =
            new AutoFillUserSettings();

        ColorColumnAutoFillUserSettings oVertexColorDetails =
            oAutoFillUserSettings.VertexColorDetails;

        ColorColumnAutoFillUserSettings oEdgeColorDetails =
            oAutoFillUserSettings.EdgeColorDetails;

        NumericRangeColumnAutoFillUserSettings oEdgeWidthDetails =
            oAutoFillUserSettings.EdgeWidthDetails;

        // The key is the row ID for each visible row in the vertex table and
        // the value is value of the source column cell in that row that was
        // used to autofill the vertex color column, if it was autofilled.

        Dictionary<Int32, Object> oVertexColorSourceDictionary =
            bVertexColorColumnAutoFilled ?

            GetRowIDDictionary(oVertexTable,
                oVertexColorResults.SourceColumnName)
            :
            null;

        // Ditto for edge colors and edge widths.

        Dictionary<Int32, Object> oEdgeColorSourceDictionary =
            bEdgeColorColumnAutoFilled ?

            GetRowIDDictionary(oEdgeTable, oEdgeColorResults.SourceColumnName)
            :
            null;

        Dictionary<Int32, Object> oEdgeWidthSourceDictionary =
            bEdgeWidthColumnAutoFilled ?

            GetRowIDDictionary(oEdgeTable, oEdgeWidthResults.SourceColumnName)
            :
            null;

        // Only motifs need to have attributes added to them.

        foreach ( ExcelTemplateGroupInfo oGroup in aoGroups.Where(
            oGroup => oGroup.CollapsedAttributes != null) )
        {
            CollapsedGroupAttributes oCollapsedGroupAttributes =
                CollapsedGroupAttributes.FromString(
                    oGroup.CollapsedAttributes);

            String sType = oCollapsedGroupAttributes.GetGroupType();

            if (
                sType == CollapsedGroupAttributeValues.FanMotifType
                ||
                sType == CollapsedGroupAttributeValues.DConnectorMotifType
                ||
                sType == CollapsedGroupAttributeValues.CliqueMotifType
                )
            {
                AddVertexColorAttributeToMotif(oGroup, sType,
                    bVertexColorColumnAutoFilled, oVertexColorResults,
                    oVertexColorDetails, oVertexColorSourceDictionary,
                    oReadWorkbookContext, oCollapsedGroupAttributes);
            }

            if (sType == CollapsedGroupAttributeValues.DConnectorMotifType)
            {
                Int32 iAnchorVertices;

                if ( oCollapsedGroupAttributes.TryGetValue(
                    CollapsedGroupAttributeKeys.AnchorVertices,
                    out iAnchorVertices) )
                {
                    AddEdgeColorAttributesToDConnectorMotif(oGroup, 
                        bEdgeColorColumnAutoFilled, oEdgeColorResults,
                        oEdgeColorDetails, oEdgeColorSourceDictionary,
                        oReadWorkbookContext, oCollapsedGroupAttributes,
                        iAnchorVertices);

                    AddEdgeWidthAttributesToDConnectorMotif(oGroup,
                        bEdgeWidthColumnAutoFilled, oEdgeWidthResults,
                        oEdgeWidthDetails, oEdgeWidthSourceDictionary,
                        oReadWorkbookContext, oCollapsedGroupAttributes,
                        iAnchorVertices);
                }
            }

            oGroup.CollapsedAttributes = oCollapsedGroupAttributes.ToString();
        }
    }