using System; using System.ComponentModel; using System.ComponentModel.Design; using System.Drawing; using System.Drawing.Design; using System.Windows.Forms; using System.Windows.Forms.Design; using DevComponents.DotNetBar.Charts; namespace DevComponents.Charts.Design { public class ChartControlActionList : DesignerActionList, ITypeDescriptorContext, IWindowsFormsEditorService, IServiceProvider { #region Private variables private ChartControl _ChartControl; private PropertyDescriptor _PropertyDescriptor; private IComponentChangeService _ChangeService; #endregion /// /// ChartControlActionList /// /// Associated ChartControl public ChartControlActionList(ChartControl chartControl) : base(chartControl) { _ChartControl = chartControl; _ChangeService = Component.Site.GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #region Public properties /// /// Gets or sets the GridPanel DataSource /// [AttributeProvider(typeof(IListSource))] public object DataSource { get { return (_ChartControl.DataSource); } set { SetValue("DataSource", value); } } /// /// Gets or sets the GridPanel DataMember /// public string DataMember { get { return (_ChartControl.DataMember); } set { SetValue("DataMember", value); } } #endregion #region GetSortedActionItems public override DesignerActionItemCollection GetSortedActionItems() { DesignerActionItemCollection items = new DesignerActionItemCollection(); items.Add(new DesignerActionHeaderItem("Data")); items.Add(new DesignerActionPropertyItem("DataSource", "DataSource", "Data", "Sets the default Chart DataSource.")); items.Add(new DesignerActionPropertyItem("DataMember", "DataMember", "Data", "Sets the default Chart DataMamber.")); return items; } #endregion #region SetValue private void SetValue(string property, object value) { _ChangeService.OnComponentChanging(_ChartControl, null); GetPropertyByName(property).SetValue(_ChartControl, value); _ChangeService.OnComponentChanged(_ChartControl, null, null, null); } #endregion #region GetPropertyByName /// /// Gets the property via the given name /// /// Property name /// PropertyDescriptor private PropertyDescriptor GetPropertyByName(string propName) { PropertyDescriptor prop = TypeDescriptor.GetProperties(_ChartControl)[propName]; if (prop == null) throw new ArgumentException("Matching property not found.", propName); return (prop); } #endregion #region EditChartContainers /// /// EditChartContainers /// private void EditChartContainers() { _PropertyDescriptor = TypeDescriptor.GetProperties(_ChartControl.ChartPanel)["ChartContainers"]; UITypeEditor editor = (UITypeEditor)_PropertyDescriptor.GetEditor(typeof(UITypeEditor)); if (editor != null) editor.EditValue(this, this, _ChartControl.ChartPanel.ChartContainers); } #endregion #region ITypeDescriptorContext Members public IContainer Container { get { return (Component.Site.Container); } } public object Instance { get { return (Component); } } public void OnComponentChanged() { object value = _ChartControl.ChartPanel.ChartContainers; _ChangeService.OnComponentChanged(Component, _PropertyDescriptor, value, value); } public bool OnComponentChanging() { _ChangeService.OnComponentChanging(Component, _PropertyDescriptor); return true; } public PropertyDescriptor PropertyDescriptor { get { return (_PropertyDescriptor); } } #endregion #region IWindowsFormsEditorService Members public void CloseDropDown() { throw new Exception("The method or operation is not implemented."); } public void DropDownControl(Control control) { throw new Exception("The method or operation is not implemented."); } public DialogResult ShowDialog(Form dialog) { return (dialog.ShowDialog()); } #endregion #region IServiceProvider object IServiceProvider.GetService(Type serviceType) { if (serviceType.Equals(typeof(IWindowsFormsEditorService))) return (this); return GetService(serviceType); } #endregion } }