using System; using System.ComponentModel; using System.ComponentModel.Design; using System.Drawing; using System.Drawing.Design; using System.Reflection; using DevComponents.DotNetBar.Charts; using DevComponents.DotNetBar.Charts.Style; namespace DevComponents.Charts.Design { public class ChartContainerCollectionEditor : BaseCollectionEditor { #region Private variables private ChartPanel _ChartPanel; #endregion public ChartContainerCollectionEditor(Type type) : base(type) { } #region EditValue public override object EditValue( ITypeDescriptorContext context, IServiceProvider provider, object value) { _ChartPanel = context.Instance as ChartPanel; object retval = base.EditValue(context, provider, value); return (retval); } #endregion #region CreateInstance protected override object CreateInstance(Type itemType) { if (itemType == typeof(ChartXy)) { ChartXy chartXy = (ChartXy)base.CreateInstance(itemType); if (_ChartPanel != null) chartXy.Name = _ChartPanel.ChartContainers.GetUniqueName("ChartXy"); SetChartDefaults(chartXy); return (chartXy); } if (itemType == typeof(PieChart)) { PieChart pieChart = (PieChart)base.CreateInstance(itemType); if (_ChartPanel != null) pieChart.Name = _ChartPanel.ChartContainers.GetUniqueName("PieChart"); SetChartDefaults(pieChart); return (pieChart); } if (itemType == typeof(ChartPanel)) { ChartPanel panel = (ChartPanel)base.CreateInstance(itemType); if (_ChartPanel != null) panel.Name = _ChartPanel.ChartContainers.GetUniqueName("ChartPanel"); SetPanelDefaults(panel); return (panel); } return (base.CreateInstance(itemType)); } private void SetPanelDefaults(ChartPanel panel) { panel.ContainerVisualStyles.Default.BorderThickness = new Thickness(1); panel.ContainerVisualStyles.Default.BorderColor = new BorderColor(Color.Black); panel.ContainerVisualStyles.Default.Background = new Background(Color.Gray); panel.ContainerVisualStyles.Default.Margin = new Padding(4); } private void SetChartDefaults(ChartXy chartXy) { chartXy.ContainerVisualStyles.Default.BorderThickness = new Thickness(1); chartXy.ContainerVisualStyles.Default.BorderColor = new BorderColor(Color.Black); chartXy.ContainerVisualStyles.Default.Background = new Background(Color.White); chartXy.ContainerVisualStyles.Default.Margin = new Padding(4); } private void SetChartDefaults(PieChart pieChart) { pieChart.ContainerVisualStyles.Default.BorderThickness = new Thickness(1); pieChart.ContainerVisualStyles.Default.BorderColor = new BorderColor(Color.Black); pieChart.ContainerVisualStyles.Default.Background = new Background(Color.White); pieChart.ContainerVisualStyles.Default.Margin = new Padding(4); } #endregion #region CopyButton_Click protected override void CopyButton_Click(object sender, EventArgs e) { ChartContainer item = ChartItem as ChartContainer; if (item != null) { if (AddButton != null) { ChartControlDesigner ccd = GetDesigner(_ChartPanel.ChartControl); ChartContainerCollection ccc = _ChartPanel.ChartContainers; ccd.InCopyItem = true; if (item is ChartPanel) _ItemTypes[0] = typeof(ChartPanel); try { AddButton.PerformClick(); ChartContainer clone = ccc[ccc.Count - 1]; string name = clone.Name; item.CopyTo(clone); clone.Name = name; } finally { if (item is ChartPanel) _ItemTypes[0] = typeof(ChartXy); ccd.InCopyItem = false; } } } } #endregion #region CreateCollectionItemType protected override Type CreateCollectionItemType() { return typeof(ChartContainer); } #endregion #region CreateNewItemTypes private Type[] _ItemTypes = new Type[] { typeof(ChartXy), typeof(PieChart), typeof(ChartPanel), }; protected override Type[] CreateNewItemTypes() { return (_ItemTypes); } #endregion } }