175 lines
5.1 KiB
C#

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
}
}