using System; using System.ComponentModel; using System.ComponentModel.Design; using System.Drawing; using System.Windows.Forms; using DevComponents.DotNetBar.SuperGrid; namespace DevComponents.SuperGrid.Design { /// /// GridRowCollectionEditor /// 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 } }