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