223 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			223 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Text;
 | 
						|
using System.Collections;
 | 
						|
using System.ComponentModel.Design;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Drawing;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar.Layout.Design
 | 
						|
{
 | 
						|
    public class LayoutGroupDesigner : LayoutItemBaseDesigner
 | 
						|
    {
 | 
						|
        #region Constructor
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Implementation
 | 
						|
 | 
						|
        public override System.Collections.ICollection AssociatedComponents
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                LayoutGroup group = (LayoutGroup)this.Component;
 | 
						|
 | 
						|
                if (group.Items.Count>0)
 | 
						|
                {
 | 
						|
                    ArrayList list = new ArrayList();
 | 
						|
                    foreach (LayoutItemBase child in group.Items)
 | 
						|
                    {
 | 
						|
                        if (child.Site != null)
 | 
						|
                            list.Add(child);
 | 
						|
                    }
 | 
						|
                    return list;
 | 
						|
                }
 | 
						|
 | 
						|
                return base.AssociatedComponents;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public override DesignerVerbCollection Verbs
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                DesignerVerb[] verbs;
 | 
						|
                verbs = new DesignerVerb[]
 | 
						|
				{
 | 
						|
                    new DesignerVerb("Add Spacer", new EventHandler(AddSpacerItem)),
 | 
						|
                    new DesignerVerb("Add Group", new EventHandler(AddGroupItem)),
 | 
						|
					new DesignerVerb("Apply Panel Style", new EventHandler(PanelStyle)),
 | 
						|
                    new DesignerVerb("Apply Group Panel Style", new EventHandler(GroupPanelStyle)),
 | 
						|
                    new DesignerVerb("Remove Panel Style", new EventHandler(RemovePanelStyle))
 | 
						|
				};
 | 
						|
                return new DesignerVerbCollection(verbs);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        private void AddSpacerItem(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            AddSpacerItem();
 | 
						|
        }
 | 
						|
 | 
						|
        private void AddSpacerItem()
 | 
						|
        {
 | 
						|
            IDesignerHost dh = (IDesignerHost)GetService(typeof(IDesignerHost));
 | 
						|
            LayoutGroup lc = this.Component as LayoutGroup;
 | 
						|
            if (lc == null || dh == null)
 | 
						|
                return;
 | 
						|
 | 
						|
            DesignerTransaction dt = dh.CreateTransaction("Creating Spacer Item");
 | 
						|
            try
 | 
						|
            {
 | 
						|
                IComponentChangeService cc = this.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
 | 
						|
                if (cc != null)
 | 
						|
                {
 | 
						|
                    cc.OnComponentChanging(this.Component, null);
 | 
						|
                    cc.OnComponentChanging(lc, TypeDescriptor.GetProperties(lc)["Items"]);
 | 
						|
                }
 | 
						|
 | 
						|
                LayoutSpacerItem item = null;
 | 
						|
                item = dh.CreateComponent(typeof(LayoutSpacerItem)) as LayoutSpacerItem;
 | 
						|
                item.Width = 32;
 | 
						|
                item.Height = 32;
 | 
						|
                lc.Items.Add(item);
 | 
						|
                lc.InvalidateLayout();
 | 
						|
                if (cc != null)
 | 
						|
                {
 | 
						|
                    cc.OnComponentChanged(lc, TypeDescriptor.GetProperties(lc)["Items"], null, null);
 | 
						|
                    cc.OnComponentChanged(this.Component, null, null, null);
 | 
						|
                }
 | 
						|
 | 
						|
                SelectComponent(item, SelectionTypes.Replace);
 | 
						|
            }
 | 
						|
            catch
 | 
						|
            {
 | 
						|
                dt.Cancel();
 | 
						|
            }
 | 
						|
            finally
 | 
						|
            {
 | 
						|
                if (!dt.Canceled) dt.Commit();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void AddGroupItem(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            AddGroupItem();
 | 
						|
        }
 | 
						|
 | 
						|
        private void AddGroupItem()
 | 
						|
        {
 | 
						|
            IDesignerHost dh = (IDesignerHost)GetService(typeof(IDesignerHost));
 | 
						|
            LayoutGroup lc = this.Component as LayoutGroup;
 | 
						|
            if (lc == null || dh == null)
 | 
						|
                return;
 | 
						|
 | 
						|
            DesignerTransaction dt = dh.CreateTransaction("Creating Group Item");
 | 
						|
            try
 | 
						|
            {
 | 
						|
                IComponentChangeService cc = this.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
 | 
						|
                if (cc != null)
 | 
						|
                {
 | 
						|
                    cc.OnComponentChanging(this.Component, null);
 | 
						|
                    cc.OnComponentChanging(lc, TypeDescriptor.GetProperties(lc)["Items"]);
 | 
						|
                }
 | 
						|
 | 
						|
                LayoutGroup item = null;
 | 
						|
                item = dh.CreateComponent(typeof(LayoutGroup)) as LayoutGroup;
 | 
						|
                item.Width = 200;
 | 
						|
                item.Height = 100;
 | 
						|
                item.TextPosition = eLayoutPosition.Top;
 | 
						|
                item.MinSize = new Size(120, 32);
 | 
						|
                lc.Items.Add(item);
 | 
						|
                lc.InvalidateLayout();
 | 
						|
                if (cc != null)
 | 
						|
                {
 | 
						|
                    cc.OnComponentChanged(lc, TypeDescriptor.GetProperties(lc)["Items"], null, null);
 | 
						|
                    cc.OnComponentChanged(this.Component, null, null, null);
 | 
						|
                }
 | 
						|
 | 
						|
                SelectComponent(item, SelectionTypes.Replace);
 | 
						|
            }
 | 
						|
            catch
 | 
						|
            {
 | 
						|
                dt.Cancel();
 | 
						|
            }
 | 
						|
            finally
 | 
						|
            {
 | 
						|
                if (!dt.Canceled) dt.Commit();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void PanelStyle(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            LayoutGroup group = (LayoutGroup)this.Component;
 | 
						|
            IDesignerHost dh = (IDesignerHost)GetService(typeof(IDesignerHost));
 | 
						|
            if (group == null || dh == null)
 | 
						|
                return;
 | 
						|
 | 
						|
            DesignerTransaction dt = dh.CreateTransaction("Apply Panel Style");
 | 
						|
 | 
						|
            TypeDescriptor.GetProperties(group)["Appearance"].SetValue(group, eGroupAppearance.Panel); // group.Appearance = eGroupAppearance.Panel;
 | 
						|
            TypeDescriptor.GetProperties(group)["CaptionHeight"].SetValue(group, 22); // group.CaptionHeight = 22;
 | 
						|
            TypeDescriptor.GetProperties(group)["TextLineAlignment"].SetValue(group, DevComponents.DotNetBar.Layout.eTextLineAlignment.Middle); // group.TextLineAlignment = DevComponents.DotNetBar.Layout.eTextLineAlignment.Middle;
 | 
						|
            TypeDescriptor.GetProperties(group)["TextPosition"].SetValue(group, DevComponents.DotNetBar.Layout.eLayoutPosition.Top); // group.TextPosition = DevComponents.DotNetBar.Layout.eLayoutPosition.Top;
 | 
						|
            TypeDescriptor.GetProperties(group)["TextAlignment"].SetValue(group, eTextAlignment.Default); // group.TextAlignment = eTextAlignment.Default;
 | 
						|
            if (string.IsNullOrEmpty(group.Text))
 | 
						|
                TypeDescriptor.GetProperties(group)["Text"].SetValue(group, "Caption"); // group.Text = "Caption";
 | 
						|
 | 
						|
            dt.Commit();
 | 
						|
            
 | 
						|
        }
 | 
						|
 | 
						|
        private void GroupPanelStyle(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            LayoutGroup group = (LayoutGroup)this.Component;
 | 
						|
            IDesignerHost dh = (IDesignerHost)GetService(typeof(IDesignerHost));
 | 
						|
            if (group == null || dh == null)
 | 
						|
                return;
 | 
						|
 | 
						|
            DesignerTransaction dt = dh.CreateTransaction("Apply Group Panel Style");
 | 
						|
 | 
						|
            TypeDescriptor.GetProperties(group)["Appearance"].SetValue(group, eGroupAppearance.GroupPanel); // group.Appearance = eGroupAppearance.GroupPanel;
 | 
						|
            TypeDescriptor.GetProperties(group)["CaptionHeight"].SetValue(group, 18); // group.CaptionHeight = 18;
 | 
						|
            TypeDescriptor.GetProperties(group)["TextLineAlignment"].SetValue(group, DevComponents.DotNetBar.Layout.eTextLineAlignment.Middle); // group.TextLineAlignment = DevComponents.DotNetBar.Layout.eTextLineAlignment.Middle;
 | 
						|
            TypeDescriptor.GetProperties(group)["TextPosition"].SetValue(group, DevComponents.DotNetBar.Layout.eLayoutPosition.Top); // group.TextPosition = DevComponents.DotNetBar.Layout.eLayoutPosition.Top;
 | 
						|
            TypeDescriptor.GetProperties(group)["TextAlignment"].SetValue(group, eTextAlignment.Center); // group.TextAlignment = eTextAlignment.Center;
 | 
						|
            if (string.IsNullOrEmpty(group.Text))
 | 
						|
                TypeDescriptor.GetProperties(group)["Text"].SetValue(group, "Caption"); // group.Text = "Caption";
 | 
						|
 | 
						|
            dt.Commit();
 | 
						|
        }
 | 
						|
 | 
						|
        private void RemovePanelStyle(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            LayoutGroup group = (LayoutGroup)this.Component;
 | 
						|
            IDesignerHost dh = (IDesignerHost)GetService(typeof(IDesignerHost));
 | 
						|
            if (group == null || dh == null)
 | 
						|
                return;
 | 
						|
 | 
						|
            DesignerTransaction dt = dh.CreateTransaction("Remove Panel Style");
 | 
						|
 | 
						|
            TypeDescriptor.GetProperties(group)["Appearance"].SetValue(group, eGroupAppearance.None); // group.Appearance = eGroupAppearance.None;
 | 
						|
            TypeDescriptor.GetProperties(group)["TextLineAlignment"].SetValue(group, DevComponents.DotNetBar.Layout.eTextLineAlignment.Default); // group.TextLineAlignment = DevComponents.DotNetBar.Layout.eTextLineAlignment.Default;
 | 
						|
            TypeDescriptor.GetProperties(group)["CaptionHeight"].SetValue(group, 0); // group.CaptionHeight = 0;
 | 
						|
            TypeDescriptor.GetProperties(group)["TextPosition"].SetValue(group, DevComponents.DotNetBar.Layout.eLayoutPosition.Default); // group.TextPosition = DevComponents.DotNetBar.Layout.eLayoutPosition.Default;
 | 
						|
            TypeDescriptor.GetProperties(group)["TextAlignment"].SetValue(group, eTextAlignment.Default); // group.TextAlignment = eTextAlignment.Default;
 | 
						|
            TypeDescriptor.GetProperties(group)["Text"].SetValue(group, ""); // group.Text = "Caption";
 | 
						|
            dt.Commit();
 | 
						|
            
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void SelectComponent(IComponent comp, SelectionTypes selectionType)
 | 
						|
        {
 | 
						|
            ISelectionService selection = (ISelectionService)this.GetService(typeof(ISelectionService));
 | 
						|
            if (selection != null && comp != null)
 | 
						|
            {
 | 
						|
                ArrayList arr = new ArrayList(1);
 | 
						|
                arr.Add(comp);
 | 
						|
                selection.SetSelectedComponents(arr, selectionType);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
}
 |