312 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			312 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.ComponentModel.Design;
 | 
						|
using System.Drawing;
 | 
						|
using System.Windows.Forms;
 | 
						|
using DevComponents.DotNetBar.SuperGrid;
 | 
						|
 | 
						|
namespace DevComponents.SuperGrid.Design
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// GridRowCollectionEditor
 | 
						|
    /// </summary>
 | 
						|
    public class GridRowCollectionEditor : CollectionEditor
 | 
						|
    {
 | 
						|
        #region Static variables
 | 
						|
 | 
						|
        static Size _lastSize = Size.Empty;
 | 
						|
        static Point _lastLoc = Point.Empty;
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Private variables
 | 
						|
 | 
						|
        private CollectionForm _CollectionForm;
 | 
						|
        private TableLayoutPanel _LayoutPanel;
 | 
						|
        private PropertyGrid _PropertyGrid;
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        public GridRowCollectionEditor(Type type)
 | 
						|
            : base(type)
 | 
						|
        {
 | 
						|
        }
 | 
						|
 | 
						|
        #region CreateCollectionItemType
 | 
						|
 | 
						|
        protected override Type CreateCollectionItemType()
 | 
						|
        {
 | 
						|
            return typeof(GridRow);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region CreateCollectionForm
 | 
						|
 | 
						|
        protected override CollectionForm CreateCollectionForm()
 | 
						|
        {
 | 
						|
            _CollectionForm = base.CreateCollectionForm();
 | 
						|
 | 
						|
            _LayoutPanel = 
 | 
						|
                _CollectionForm.Controls["overArchingTableLayoutPanel"] as TableLayoutPanel;
 | 
						|
 | 
						|
            if (_LayoutPanel != null)
 | 
						|
            {
 | 
						|
                _PropertyGrid =
 | 
						|
                    _LayoutPanel.Controls["propertyBrowser"] as PropertyGrid;
 | 
						|
 | 
						|
                if (_PropertyGrid != null)
 | 
						|
                {
 | 
						|
                    _PropertyGrid.HelpVisible = true;
 | 
						|
 | 
						|
                    _PropertyGrid.GotFocus += PropertyGridGotFocus;
 | 
						|
                    _PropertyGrid.SelectedObjectsChanged += PropertyGridSelectedObjectsChanged;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            _CollectionForm.Load += CollectionFormLoad;
 | 
						|
            _CollectionForm.Resize += CollectionFormResize;
 | 
						|
            _CollectionForm.LocationChanged += CollectionFormLocationChanged;
 | 
						|
 | 
						|
            return (_CollectionForm);
 | 
						|
        }
 | 
						|
 | 
						|
        #region CollectionFormLoad
 | 
						|
 | 
						|
        void CollectionFormLoad(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            CollectionForm form = sender as CollectionForm;
 | 
						|
 | 
						|
            if (form != null)
 | 
						|
            {
 | 
						|
                if (_lastSize != Size.Empty)
 | 
						|
                    form.Size = _lastSize;
 | 
						|
 | 
						|
                if (_lastLoc != Point.Empty)
 | 
						|
                    form.Location = _lastLoc;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region CollectionFormResize
 | 
						|
 | 
						|
        void CollectionFormResize(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            CollectionForm form = sender as CollectionForm;
 | 
						|
 | 
						|
            if (form != null && form.Visible == true)
 | 
						|
                _lastSize = form.Size;
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region CollectionFormLocationChanged
 | 
						|
 | 
						|
        void CollectionFormLocationChanged(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            CollectionForm form = sender as CollectionForm;
 | 
						|
 | 
						|
            if (form != null && form.Visible == true)
 | 
						|
                _lastLoc = form.Location;
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region PropertyGridGotFocus
 | 
						|
 | 
						|
        void PropertyGridGotFocus(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            UpdateDesignerFocus();
 | 
						|
            
 | 
						|
            _LayoutPanel.Controls[4].Refresh();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region PropertyGridSelectedObjectsChanged
 | 
						|
 | 
						|
        void PropertyGridSelectedObjectsChanged(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            UpdateDesignerFocus();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region UpdateDesignerFocus
 | 
						|
 | 
						|
        private void UpdateDesignerFocus()
 | 
						|
        {
 | 
						|
            if (_PropertyGrid != null)
 | 
						|
            {
 | 
						|
                GridContainer row = Context.Instance as GridContainer;
 | 
						|
 | 
						|
                if (row != null)
 | 
						|
                {
 | 
						|
                    GridElement item = _PropertyGrid.SelectedObject as GridElement;
 | 
						|
 | 
						|
                    if (item != null)
 | 
						|
                        row.SuperGrid.DesignerElement = item;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region CreateNewItemTypes
 | 
						|
 | 
						|
        protected override Type[] CreateNewItemTypes()
 | 
						|
        {
 | 
						|
            GridPanel panel = Context.Instance as GridPanel;
 | 
						|
 | 
						|
            if (panel == null)
 | 
						|
            {
 | 
						|
                return new Type[]
 | 
						|
                {
 | 
						|
                    typeof (GridRow),
 | 
						|
                    typeof (GridPanel),
 | 
						|
                };
 | 
						|
            }
 | 
						|
 | 
						|
            return (base.CreateNewItemTypes());
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region EditValue
 | 
						|
 | 
						|
        public override object EditValue(
 | 
						|
            ITypeDescriptorContext context, IServiceProvider provider, object value)
 | 
						|
        {
 | 
						|
            object o;
 | 
						|
 | 
						|
            if (_CollectionForm != null && _CollectionForm.Visible)
 | 
						|
            {
 | 
						|
                GridRowCollectionEditor editor =
 | 
						|
                   new GridRowCollectionEditor(this.CollectionType);
 | 
						|
 | 
						|
                o = editor.EditValue(context, provider, value);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                o = base.EditValue(context, provider, value);
 | 
						|
 | 
						|
                GridPanel panel = Context.Instance as GridPanel;
 | 
						|
 | 
						|
                if (panel != null && panel.Parent == null)
 | 
						|
                    panel.SuperGrid.DesignerElement = null;
 | 
						|
            }
 | 
						|
 | 
						|
            return (o);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region CreateInstance
 | 
						|
 | 
						|
        protected override object CreateInstance(Type itemType)
 | 
						|
        {
 | 
						|
            object o = base.CreateInstance(itemType);
 | 
						|
 | 
						|
            GridContainer crow = Context.Instance as GridContainer;
 | 
						|
 | 
						|
            if (crow != null)
 | 
						|
            {
 | 
						|
                IDesignerHost dh = (IDesignerHost)GetService(typeof(IDesignerHost));
 | 
						|
 | 
						|
                crow.Expanded = true;
 | 
						|
 | 
						|
                GridPanel cpanel = crow.GridPanel;
 | 
						|
 | 
						|
                GridRow row = o as GridRow;
 | 
						|
 | 
						|
                if (row != null)
 | 
						|
                {
 | 
						|
                    if (cpanel.Columns.Count == 0)
 | 
						|
                    {
 | 
						|
                        if (dh != null)
 | 
						|
                        {
 | 
						|
                            GridColumn col = dh.CreateComponent(typeof(GridColumn)) as GridColumn;
 | 
						|
 | 
						|
                            if (col != null)
 | 
						|
                            {
 | 
						|
                                col.Name = "Column1";
 | 
						|
                                cpanel.Columns.Add(col);
 | 
						|
 | 
						|
                                GridCell cell = dh.CreateComponent(typeof(GridCell)) as GridCell;
 | 
						|
 | 
						|
                                if (cell != null)
 | 
						|
                                    row.Cells.Add(cell);
 | 
						|
 | 
						|
                                row.InvalidateRender();
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    GridPanel panel = o as GridPanel;
 | 
						|
 | 
						|
                    if (panel != null)
 | 
						|
                    {
 | 
						|
                        if (cpanel != null)
 | 
						|
                        {
 | 
						|
                            panel.Name = GetPanelName(cpanel);
 | 
						|
 | 
						|
                            if (dh != null)
 | 
						|
                            {
 | 
						|
                                GridColumn col = dh.CreateComponent(typeof(GridColumn)) as GridColumn;
 | 
						|
 | 
						|
                                col.Name = "Column1";
 | 
						|
                                panel.Columns.Add(col);
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return (o);
 | 
						|
        }
 | 
						|
 | 
						|
        #region GetPanelName
 | 
						|
 | 
						|
        private string GetPanelName(GridPanel panel)
 | 
						|
        {
 | 
						|
            for (int i = 1; i < 200; i++)
 | 
						|
            {
 | 
						|
                string s = "GridPanel" + i;
 | 
						|
 | 
						|
                if (UnusedPanelName(panel, s) == true)
 | 
						|
                    return (s);
 | 
						|
            }
 | 
						|
 | 
						|
            return ("GridPanel");
 | 
						|
        }
 | 
						|
 | 
						|
        #region UnusedPanelName
 | 
						|
 | 
						|
        private bool UnusedPanelName(GridPanel panel, string s)
 | 
						|
        {
 | 
						|
            foreach (GridContainer row in panel.Rows)
 | 
						|
            {
 | 
						|
                if (row is GridPanel)
 | 
						|
                {
 | 
						|
                    if (s.Equals(((GridPanel) row).Name) == true)
 | 
						|
                        return (false);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return (true);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
    }
 | 
						|
}
 |