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.Design { /// /// 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; eb.StockStyle = eExplorerBarStockStyle.SystemColors; } } 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) { IDesignerHost dh = (IDesignerHost)GetService(typeof(IDesignerHost)); DesignerTransaction dt = dh.CreateTransaction(); try { CreateGroup(); } catch { dt.Cancel(); } finally { if(!dt.Canceled) dt.Commit(); } } private ExplorerBarGroupItem CreateGroup() { ExplorerBar bar=this.Component as ExplorerBar; ExplorerBarGroupItem item=null; IDesignerHost dh=(IDesignerHost)GetService(typeof(IDesignerHost)); if(bar!=null && dh!=null) { OnSubItemsChanging(); try { m_CreatingItem = true; 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(); } finally { m_CreatingItem = false; } } 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)); DesignerTransaction dt = dh.CreateTransaction(); try { 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)); try { m_CreatingItem = 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); } finally { m_CreatingItem = false; } this.RecalcLayout(); } catch { dt.Cancel(); } finally { if(!dt.Canceled) dt.Commit(); } } protected override bool CanDragItem(BaseItem item) { if(item is ExplorerBarGroupItem) return false; return base.CanDragItem(item); } #endregion } }