AddEdgeColorAttributesToDConnectorMotif ( ExcelTemplateGroupInfo oGroup, Boolean bEdgeColorColumnAutoFilled, AutoFillColorColumnResults oEdgeColorResults, ColorColumnAutoFillUserSettings oEdgeColorDetails, Dictionary <Int32, Object> oEdgeColorSourceDictionary, ReadWorkbookContext oReadWorkbookContext, CollapsedGroupAttributes oCollapsedGroupAttributes, Int32 iAnchorVertices ) { Debug.Assert(oGroup != null); Debug.Assert(oEdgeColorResults != null); Debug.Assert(oReadWorkbookContext != null); Debug.Assert(oCollapsedGroupAttributes != null); Debug.Assert(iAnchorVertices >= 0); // If the edge color column was autofilled, get the average color for // the edges incident to the D-connector motif's first anchor, then its // second anchor, and so on. Otherwise, don't do anything. if (!bEdgeColorColumnAutoFilled) { return; } for (Int32 iAnchorVertexIndex = 0; iAnchorVertexIndex < iAnchorVertices; iAnchorVertexIndex++) { Color oAverageColor; if (TableColumnMapper.TryMapAverageColor( GetRowIDsToAverageForEdges(oGroup, oCollapsedGroupAttributes, iAnchorVertexIndex), oEdgeColorSourceDictionary, oEdgeColorResults.SourceCalculationNumber1, oEdgeColorResults.SourceCalculationNumber2, oEdgeColorResults.DestinationColor1, oEdgeColorResults.DestinationColor2, oEdgeColorDetails.UseLogs, out oAverageColor) ) { oCollapsedGroupAttributes.Add( CollapsedGroupAttributeKeys.GetAnchorVertexEdgeColorKey( iAnchorVertexIndex), oReadWorkbookContext.ColorConverter2.GraphToWorkbook( oAverageColor) ); } } }
ConvertFrom ( ITypeDescriptorContext context, CultureInfo culture, Object value ) { Debug.Assert(value != null); Debug.Assert(value is String); AssertValid(); ColorColumnAutoFillUserSettings oColorColumnAutoFillUserSettings = new ColorColumnAutoFillUserSettings(); ColorConverter oColorConverter = new ColorConverter(); String [] asStrings = ((String)value).Split(new Char[] { '\t' }); Debug.Assert(asStrings.Length >= 7); oColorColumnAutoFillUserSettings.UseSourceNumber1 = Boolean.Parse(asStrings[0]); oColorColumnAutoFillUserSettings.UseSourceNumber2 = Boolean.Parse(asStrings[1]); oColorColumnAutoFillUserSettings.SourceNumber1 = MathUtil.ParseCultureInvariantDouble(asStrings[2]); oColorColumnAutoFillUserSettings.SourceNumber2 = MathUtil.ParseCultureInvariantDouble(asStrings[3]); oColorColumnAutoFillUserSettings.DestinationColor1 = (Color)oColorConverter.ConvertFromInvariantString(asStrings[4]); oColorColumnAutoFillUserSettings.DestinationColor2 = (Color)oColorConverter.ConvertFromInvariantString(asStrings[5]); oColorColumnAutoFillUserSettings.IgnoreOutliers = Boolean.Parse(asStrings[6]); // The UseLogs property wasn't added until NodeXL version 1.0.1.92. oColorColumnAutoFillUserSettings.UseLogs = (asStrings.Length > 7) ? Boolean.Parse(asStrings[7]) : false; // The SourceColumnContainsNumbers property wasn't added until NodeXL // version 1.0.1.153. oColorColumnAutoFillUserSettings.SourceColumnContainsNumbers = (asStrings.Length > 8) ? Boolean.Parse(asStrings[8]) : true; return(oColorColumnAutoFillUserSettings); }
AddVertexColorAttributeToMotif ( ExcelTemplateGroupInfo oGroup, String sType, Boolean bVertexColorColumnAutoFilled, AutoFillColorColumnResults oVertexColorResults, ColorColumnAutoFillUserSettings oVertexColorDetails, Dictionary <Int32, Object> oVertexColorSourceDictionary, ReadWorkbookContext oReadWorkbookContext, CollapsedGroupAttributes oCollapsedGroupAttributes ) { Debug.Assert(oGroup != null); Debug.Assert(!String.IsNullOrEmpty(sType)); Debug.Assert(oVertexColorResults != null); Debug.Assert(oReadWorkbookContext != null); Debug.Assert(oCollapsedGroupAttributes != null); Color oColor; // If the vertex color column was autofilled, get the average color // for the vertices in the motif. if ( !bVertexColorColumnAutoFilled || !TableColumnMapper.TryMapAverageColor( GetRowIDsToAverageForVertexColor(oGroup, oCollapsedGroupAttributes, sType), oVertexColorSourceDictionary, oVertexColorResults.SourceCalculationNumber1, oVertexColorResults.SourceCalculationNumber2, oVertexColorResults.DestinationColor1, oVertexColorResults.DestinationColor2, oVertexColorDetails.UseLogs, out oColor) ) { // Default to the color that was assigned to the group. oColor = oGroup.VertexColor; } oCollapsedGroupAttributes.Add( CollapsedGroupAttributeKeys.VertexColor, oReadWorkbookContext.ColorConverter2.GraphToWorkbook(oColor) ); }
ConvertTo ( ITypeDescriptorContext context, CultureInfo culture, Object value, Type destinationType ) { Debug.Assert(value != null); Debug.Assert(value is ColorColumnAutoFillUserSettings); Debug.Assert(destinationType == typeof(String)); AssertValid(); ColorColumnAutoFillUserSettings oColorColumnAutoFillUserSettings = (ColorColumnAutoFillUserSettings)value; ColorConverter oColorConverter = new ColorConverter(); // Use a simple tab-delimited format. Sample string: // // "false\tfalse\t0\t10\tRed\tGreen\tfalse\tfalse\ttrue" // // WARNING: If this format is changed, you must also change the // DefaultSettingValueAttribute for each property in the // AutoFillUserSettings class that is of type // ColorColumnAutoFillUserSettings. return(String.Format(CultureInfo.InvariantCulture, "{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}\t{8}" , oColorColumnAutoFillUserSettings.UseSourceNumber1, oColorColumnAutoFillUserSettings.UseSourceNumber2, oColorColumnAutoFillUserSettings.SourceNumber1, oColorColumnAutoFillUserSettings.SourceNumber2, oColorConverter.ConvertToInvariantString( oColorColumnAutoFillUserSettings.DestinationColor1), oColorConverter.ConvertToInvariantString( oColorColumnAutoFillUserSettings.DestinationColor2), oColorColumnAutoFillUserSettings.IgnoreOutliers, oColorColumnAutoFillUserSettings.UseLogs, oColorColumnAutoFillUserSettings.SourceColumnContainsNumbers )); }
TryAutoFillColorColumn ( ListObject oTable, String sSourceColumnName, String sDestinationColumnName, ColorColumnAutoFillUserSettings oDetails, out Boolean bSourceColumnContainsNumbers, out Double dSourceCalculationNumber1, out Double dSourceCalculationNumber2, out Int32 iDecimalPlaces, out ICollection <String> oCategoryNames ) { Debug.Assert(oTable != null); Debug.Assert(!String.IsNullOrEmpty(sDestinationColumnName)); Debug.Assert(oDetails != null); bSourceColumnContainsNumbers = oDetails.SourceColumnContainsNumbers; dSourceCalculationNumber1 = 0; dSourceCalculationNumber2 = 1; iDecimalPlaces = 0; oCategoryNames = null; if (String.IsNullOrEmpty(sSourceColumnName)) { return(false); } if (bSourceColumnContainsNumbers) { return(TableColumnMapper.TryMapToColor(oTable, sSourceColumnName, sDestinationColumnName, oDetails.UseSourceNumber1, oDetails.UseSourceNumber2, oDetails.SourceNumber1, oDetails.SourceNumber2, oDetails.DestinationColor1, oDetails.DestinationColor2, oDetails.IgnoreOutliers, oDetails.UseLogs, out dSourceCalculationNumber1, out dSourceCalculationNumber2, out iDecimalPlaces )); } return(TableColumnMapper.TryMapToColor(oTable, sSourceColumnName, sDestinationColumnName, out oCategoryNames)); }
//************************************************************************* // Constructor: ColorColumnAutoFillUserSettingsDialog() // /// <summary> /// Initializes a new instance of the <see /// cref="ColorColumnAutoFillUserSettingsDialog" /> class. /// </summary> /// /// <param name="colorColumnAutoFillUserSettings"> /// Object to edit. /// </param> /// /// <param name="dialogCaption"> /// Dialog caption. /// </param> //************************************************************************* public ColorColumnAutoFillUserSettingsDialog ( ColorColumnAutoFillUserSettings colorColumnAutoFillUserSettings, String dialogCaption ) { Debug.Assert(colorColumnAutoFillUserSettings != null); Debug.Assert(!String.IsNullOrEmpty(dialogCaption)); InitializeComponent(); m_oColorColumnAutoFillUserSettings = colorColumnAutoFillUserSettings; // Instantiate an object that saves and retrieves the position of this // dialog. Note that the object automatically saves the settings when // the form closes. m_oColorColumnAutoFillUserSettingsDialogUserSettings = new ColorColumnAutoFillUserSettingsDialogUserSettings(this); this.Text = dialogCaption; // The label that explains categories, which is shown only when // "Categories" is selected in the cbxSourceColumnContainsNumbers // ComboBox, is shown in the wrong place in the designer to make it // readable. Move it to its correct location. lblSourceColumnContainsCategories.Location = new Point(12, 70); cbxSourceColumnContainsNumbers.PopulateWithObjectsAndText( false, "Categories", true, "Numbers" ); lnkOutliersAndLogs.Tag = AutoFillWorkbookDialog.OutliersAndLogsMessage; DoDataExchange(false); UpdateColorGradient(); AssertValid(); }
//************************************************************************* // Constructor: ColorColumnAutoFillUserSettingsDialog() // /// <summary> /// Initializes a new instance of the <see /// cref="ColorColumnAutoFillUserSettingsDialog" /> class. /// </summary> /// /// <param name="colorColumnAutoFillUserSettings"> /// Object to edit. /// </param> /// /// <param name="dialogCaption"> /// Dialog caption. /// </param> //************************************************************************* public ColorColumnAutoFillUserSettingsDialog ( ColorColumnAutoFillUserSettings colorColumnAutoFillUserSettings, String dialogCaption ) { Debug.Assert(colorColumnAutoFillUserSettings != null); Debug.Assert( !String.IsNullOrEmpty(dialogCaption) ); InitializeComponent(); m_oColorColumnAutoFillUserSettings = colorColumnAutoFillUserSettings; // Instantiate an object that saves and retrieves the position of this // dialog. Note that the object automatically saves the settings when // the form closes. m_oColorColumnAutoFillUserSettingsDialogUserSettings = new ColorColumnAutoFillUserSettingsDialogUserSettings(this); this.Text = dialogCaption; // The label that explains categories, which is shown only when // "Categories" is selected in the cbxSourceColumnContainsNumbers // ComboBox, is shown in the wrong place in the designer to make it // readable. Move it to its correct location. lblSourceColumnContainsCategories.Location = new Point(12, 70); cbxSourceColumnContainsNumbers.PopulateWithObjectsAndText( false, "Categories", true, "Numbers" ); lnkOutliersAndLogs.Tag = AutoFillWorkbookDialog.OutliersAndLogsMessage; DoDataExchange(false); UpdateColorGradient(); AssertValid(); }
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(); } }
ConvertFrom ( ITypeDescriptorContext context, CultureInfo culture, Object value ) { Debug.Assert(value != null); Debug.Assert(value is String); AssertValid(); ColorColumnAutoFillUserSettings oColorColumnAutoFillUserSettings = new ColorColumnAutoFillUserSettings(); ColorConverter oColorConverter = new ColorConverter(); String [] asStrings = ( (String)value ).Split( new Char[] {'\t'} ); Debug.Assert(asStrings.Length >= 7); oColorColumnAutoFillUserSettings.UseSourceNumber1 = Boolean.Parse( asStrings[0] ); oColorColumnAutoFillUserSettings.UseSourceNumber2 = Boolean.Parse( asStrings[1] ); oColorColumnAutoFillUserSettings.SourceNumber1 = MathUtil.ParseCultureInvariantDouble( asStrings[2] ); oColorColumnAutoFillUserSettings.SourceNumber2 = MathUtil.ParseCultureInvariantDouble(asStrings[3]); oColorColumnAutoFillUserSettings.DestinationColor1 = (Color)oColorConverter.ConvertFromInvariantString( asStrings[4] ); oColorColumnAutoFillUserSettings.DestinationColor2 = (Color)oColorConverter.ConvertFromInvariantString( asStrings[5] ); oColorColumnAutoFillUserSettings.IgnoreOutliers = Boolean.Parse( asStrings[6] ); // The UseLogs property wasn't added until NodeXL version 1.0.1.92. oColorColumnAutoFillUserSettings.UseLogs = (asStrings.Length > 7) ? Boolean.Parse( asStrings[7] ) : false; // The SourceColumnContainsNumbers property wasn't added until NodeXL // version 1.0.1.153. oColorColumnAutoFillUserSettings.SourceColumnContainsNumbers = (asStrings.Length > 8) ? Boolean.Parse( asStrings[8] ) : true; return (oColorColumnAutoFillUserSettings); }
AddEdgeColorAttributesToDConnectorMotif ( ExcelTemplateGroupInfo oGroup, Boolean bEdgeColorColumnAutoFilled, AutoFillColorColumnResults oEdgeColorResults, ColorColumnAutoFillUserSettings oEdgeColorDetails, Dictionary<Int32, Object> oEdgeColorSourceDictionary, ReadWorkbookContext oReadWorkbookContext, CollapsedGroupAttributes oCollapsedGroupAttributes, Int32 iAnchorVertices ) { Debug.Assert(oGroup != null); Debug.Assert(oEdgeColorResults != null); Debug.Assert(oReadWorkbookContext != null); Debug.Assert(oCollapsedGroupAttributes != null); Debug.Assert(iAnchorVertices >= 0); // If the edge color column was autofilled, get the average color for // the edges incident to the D-connector motif's first anchor, then its // second anchor, and so on. Otherwise, don't do anything. if (!bEdgeColorColumnAutoFilled) { return; } for (Int32 iAnchorVertexIndex = 0; iAnchorVertexIndex < iAnchorVertices; iAnchorVertexIndex++) { Color oAverageColor; if ( TableColumnMapper.TryMapAverageColor( GetRowIDsToAverageForEdges(oGroup, oCollapsedGroupAttributes, iAnchorVertexIndex), oEdgeColorSourceDictionary, oEdgeColorResults.SourceCalculationNumber1, oEdgeColorResults.SourceCalculationNumber2, oEdgeColorResults.DestinationColor1, oEdgeColorResults.DestinationColor2, oEdgeColorDetails.UseLogs, out oAverageColor) ) { oCollapsedGroupAttributes.Add( CollapsedGroupAttributeKeys.GetAnchorVertexEdgeColorKey( iAnchorVertexIndex), oReadWorkbookContext.ColorConverter2.GraphToWorkbook( oAverageColor) ); } } }
AddVertexColorAttributeToMotif ( ExcelTemplateGroupInfo oGroup, String sType, Boolean bVertexColorColumnAutoFilled, AutoFillColorColumnResults oVertexColorResults, ColorColumnAutoFillUserSettings oVertexColorDetails, Dictionary<Int32, Object> oVertexColorSourceDictionary, ReadWorkbookContext oReadWorkbookContext, CollapsedGroupAttributes oCollapsedGroupAttributes ) { Debug.Assert(oGroup != null); Debug.Assert( !String.IsNullOrEmpty(sType) ); Debug.Assert(oVertexColorResults != null); Debug.Assert(oReadWorkbookContext != null); Debug.Assert(oCollapsedGroupAttributes != null); Color oColor; // If the vertex color column was autofilled, get the average color // for the vertices in the motif. if ( !bVertexColorColumnAutoFilled || !TableColumnMapper.TryMapAverageColor( GetRowIDsToAverageForVertexColor(oGroup, oCollapsedGroupAttributes, sType), oVertexColorSourceDictionary, oVertexColorResults.SourceCalculationNumber1, oVertexColorResults.SourceCalculationNumber2, oVertexColorResults.DestinationColor1, oVertexColorResults.DestinationColor2, oVertexColorDetails.UseLogs, out oColor) ) { // Default to the color that was assigned to the group. oColor = oGroup.VertexColor; } oCollapsedGroupAttributes.Add( CollapsedGroupAttributeKeys.VertexColor, oReadWorkbookContext.ColorConverter2.GraphToWorkbook(oColor) ); }
TryAutoFillColorColumn ( ListObject oTable, String sSourceColumnName, String sDestinationColumnName, ColorColumnAutoFillUserSettings oDetails, out Boolean bSourceColumnContainsNumbers, out Double dSourceCalculationNumber1, out Double dSourceCalculationNumber2, out Int32 iDecimalPlaces, out ICollection<String> oCategoryNames ) { Debug.Assert(oTable != null); Debug.Assert( !String.IsNullOrEmpty(sDestinationColumnName) ); Debug.Assert(oDetails != null); bSourceColumnContainsNumbers = oDetails.SourceColumnContainsNumbers; dSourceCalculationNumber1 = 0; dSourceCalculationNumber2 = 1; iDecimalPlaces = 0; oCategoryNames = null; if ( String.IsNullOrEmpty(sSourceColumnName) ) { return (false); } if (bSourceColumnContainsNumbers) { return ( TableColumnMapper.TryMapToColor(oTable, sSourceColumnName, sDestinationColumnName, oDetails.UseSourceNumber1, oDetails.UseSourceNumber2, oDetails.SourceNumber1, oDetails.SourceNumber2, oDetails.DestinationColor1, oDetails.DestinationColor2, oDetails.IgnoreOutliers, oDetails.UseLogs, out dSourceCalculationNumber1, out dSourceCalculationNumber2, out iDecimalPlaces ) ); } return ( TableColumnMapper.TryMapToColor(oTable, sSourceColumnName, sDestinationColumnName, out oCategoryNames) ); }