using System; using System.ComponentModel; using System.ComponentModel.Design; using System.Windows.Forms; using System.ComponentModel.Design.Serialization; using System.CodeDom; using System.Drawing; using System.Collections; namespace DevComponents.DotNetBar { /// /// Summary description for ExplorerBarDesigner. /// public class ExplorerBarDesigner:BarBaseControlDesigner { #region Internal Implementation public ExplorerBarDesigner():base() { this.EnableItemDragDrop=true; } public override void Initialize(IComponent component) { base.Initialize(component); if(!component.Site.DesignMode) return; ExplorerBar bar=this.Control as ExplorerBar; if(bar!=null) bar.SetDesignMode(); } public override DesignerVerbCollection Verbs { get { DesignerVerb[] verbs = new DesignerVerb[] { new DesignerVerb("Create Group", new EventHandler(OnAddGroup)), new DesignerVerb("Create Button", new EventHandler(OnAddButton)) }; return new DesignerVerbCollection(verbs); } } #if FRAMEWORK20 public override void InitializeNewComponent(IDictionary defaultValues) { base.InitializeNewComponent(defaultValues); SetDesignTimeDefaults(); } #else public override void OnSetComponentDefaults() { base.OnSetComponentDefaults(); SetDesignTimeDefaults(); } #endif private void SetDesignTimeDefaults() { if (this.Control is ExplorerBar) { ExplorerBar eb = this.Control as ExplorerBar; eb.ApplyDefaultSettings(); eb.ThemeAware = true; } } protected override BaseItem GetItemContainer() { ExplorerBar bar=this.Control as ExplorerBar; if(bar!=null) return bar.ItemsContainer; return null; } protected override void RecalcLayout() { ExplorerBar bar=this.GetItemContainerControl() as ExplorerBar; if(bar!=null) bar.RecalcLayout(); } protected override void OnSubItemsChanging() { base.OnSubItemsChanging(); IComponentChangeService change=this.GetService(typeof(IComponentChangeService)) as IComponentChangeService; if(change!=null) { ExplorerBar bar=this.GetItemContainerControl() as ExplorerBar; change.OnComponentChanging(this.Component,TypeDescriptor.GetProperties(bar).Find("Groups",true)); } } protected override void OnSubItemsChanged() { base.OnSubItemsChanged(); IComponentChangeService change=this.GetService(typeof(IComponentChangeService)) as IComponentChangeService; if(change!=null) { ExplorerBar bar=this.GetItemContainerControl() as ExplorerBar; change.OnComponentChanged(this.Component,TypeDescriptor.GetProperties(bar).Find("Groups",true),null,null); } } // /// // /// Triggered when some other component on the form is removed. // /// // protected override void ComponentRemoved(object sender, ComponentEventArgs e) // { // base.ComponentRemoved(sender,e); // if(e.Component is ExplorerBarGroupItem) // { // ExplorerBar bar=this.GetItemContainerControl() as ExplorerBar; // if(bar.Groups.Contains(e.Component as BaseItem)) // bar.Groups.Remove(e.Component as BaseItem); // DestroySubItems(e.Component as BaseItem); // bar.RecalcLayout(); // } // } #endregion #region Design-Time Item Creation private void OnAddGroup(object sender, EventArgs e) { CreateGroup(); } private ExplorerBarGroupItem CreateGroup() { ExplorerBar bar=this.Component as ExplorerBar; ExplorerBarGroupItem item=null; IDesignerHost dh=(IDesignerHost)GetService(typeof(IDesignerHost)); if(bar!=null && dh!=null) { OnSubItemsChanging(); item=dh.CreateComponent(typeof(ExplorerBarGroupItem)) as ExplorerBarGroupItem; if(item==null) return null; item.SetDefaultAppearance(); item.Text="New Group"; item.Expanded=true; bar.Groups.Add(item); OnSubItemsChanged(); } return item; } private void OnAddButton(object sender, EventArgs e) { ExplorerBar bar=this.Component as ExplorerBar; ExplorerBarGroupItem group=null; IDesignerHost dh=(IDesignerHost)GetService(typeof(IDesignerHost)); ISelectionService selection = (ISelectionService) this.GetService(typeof(ISelectionService)); if(selection!=null && selection.PrimarySelection is ExplorerBarGroupItem) { group=selection.PrimarySelection as ExplorerBarGroupItem; } else if(bar.Groups.Count>0) { System.Drawing.Point point=bar.PointToClient(Form.MousePosition); if(bar.Bounds.Contains(point)) { foreach(BaseItem item in bar.Groups) { if(item.DisplayRectangle.Contains(point)) { group=item as ExplorerBarGroupItem; break; } } } if(group==null) { foreach(BaseItem item in bar.Groups) { if(item.Visible) { group=item as ExplorerBarGroupItem; break; } } } } if(group==null) group=CreateGroup(); IComponentChangeService change=this.GetService(typeof(IComponentChangeService)) as IComponentChangeService; if(change!=null) change.OnComponentChanging(this.Component,TypeDescriptor.GetProperties(group).Find("SubItems",true)); ButtonItem button=dh.CreateComponent(typeof(ButtonItem)) as ButtonItem; if(button==null) return; ExplorerBarGroupItem.SetDesignTimeDefaults(button,group.StockStyle); group.SubItems.Add(button); if(change!=null) change.OnComponentChanged(this.Component,TypeDescriptor.GetProperties(group).Find("SubItems",true),null,null); this.RecalcLayout(); } protected override bool CanDragItem(BaseItem item) { if(item is ExplorerBarGroupItem) return false; return base.CanDragItem(item); } #endregion } }