public static bool SynchronizeColumns(this ChartScript chartScript, IChartBase chart, PostRetrievingContext?ctx) { bool result = false; for (int i = 0; i < chartScript.Columns.Count; i++) { if (chart.Columns.Count <= i) { chart.Columns.Add(new ChartColumnEmbedded()); result = true; } chart.Columns[i].parentChart = chart; chart.Columns[i].ScriptColumn = chartScript.Columns[i]; if (!result) { result = chart.Columns[i].IntegrityCheck() != null; } } if (chart.Columns.Count > chartScript.Columns.Count) { chart.Columns.RemoveRange(chartScript.Columns.Count, chart.Columns.Count - chartScript.Columns.Count); result = true; } if (chart.Parameters.Modified != ModifiedState.Sealed) { var chartScriptParameters = chartScript.AllParameters().ToList(); if (chart.Parameters.Select(a => a.Name).OrderBy().SequenceEqual(chartScriptParameters.Select(a => a.Name).OrderBy())) { foreach (var cp in chart.Parameters) { var sp = chartScriptParameters.FirstEx(a => a.Name == cp.Name); cp.parentChart = chart; cp.ScriptParameter = sp; //if (cp.PropertyCheck(() => cp.Value).HasText()) // cp.Value = sp.DefaultValue(cp.GetToken()); } } else { var byName = chart.Parameters.ToDictionary(a => a.Name); chart.Parameters.Clear(); foreach (var sp in chartScriptParameters) { var cp = byName.TryGetC(sp.Name); if (cp != null) { cp.parentChart = chart; cp.ScriptParameter = sp; ctx?.ForceModifiedState.Add(cp, ModifiedState.SelfModified); //if (cp.PropertyCheck(() => cp.Value).HasText()) // cp.Value = sp.DefaultValue(cp.GetToken()); } else { cp = new ChartParameterEmbedded { Name = sp.Name, parentChart = chart, ScriptParameter = sp, }; cp.Value = sp.ValueDefinition.DefaultValue(sp.GetToken(chart)); } chart.Parameters.Add(cp); } } } return(result); }
private static void RegisterScript(ChartScript chartScript) { Scripts.Add(chartScript.Symbol, chartScript); }