public object Clone() { if (_pointer != null) { return(new ComponentPointer(_pointer)); } if (_memberPointer != null) { return(new ComponentPointer(_memberPointer)); } ComponentPointer c = new ComponentPointer(); c._memberId = _memberId; return(c); }
public override object OnGetDropDownControl(ITypeDescriptorContext context, IServiceProvider provider, IWindowsFormsEditorService service, object value) { ComponentPointer cp = (ComponentPointer)value; IComponent h = context.Instance as IComponent; if (h == null || h.Site == null) { h = VPL.VPLUtil.GetObject(context.Instance) as IComponent; } if (h == null || h.Site == null) { ClassPointer root = context.Instance as ClassPointer; if (root != null) { h = root.ObjectInstance as IComponent; } } if (h == null || h.Site == null) { IObjectPointer op = context.Instance as IObjectPointer; if (op != null) { ClassPointer root = op.RootPointer; if (root != null) { h = root.ObjectInstance as IComponent; } } } if (h != null && h.Site != null) { ListBox list = new ListBox(); list.Tag = service; list.Click += new EventHandler(list_Click); list.KeyPress += new KeyPressEventHandler(list_KeyPress); foreach (IComponent ic in h.Site.Container.Components) { if (ic is T) { list.Items.Add(new ComponentName(ic)); } else { Type t = VPL.VPLUtil.GetObjectType(ic); if (typeof(T).IsAssignableFrom(t)) { int n = list.Items.Add(new ComponentName(ic)); if (cp != null && list.SelectedIndex < 0 && ic.Site != null) { if (cp.Name == ic.Site.Name) { list.SelectedIndex = n; } } } } } if (list.Items.Count > 0) { service.DropDownControl(list); if (list.SelectedIndex >= 0) { ComponentName c = list.Items[list.SelectedIndex] as ComponentName; if (c != null) { ILimnorDesignerLoader loader = LimnorProject.ActiveDesignerLoader as ILimnorDesignerLoader; UInt32 memberId = loader.ObjectMap.GetObjectID(c.Component); if (memberId != 0) { XmlNode nodeCr = SerializeUtil.GetClassRefNodeByObjectId(loader.Node, memberId); if (nodeCr != null) { loader.Reader.ResetErrors(); ClassInstancePointer cr = loader.Reader.ReadObject <ClassInstancePointer>(nodeCr, loader.GetRootId()); if (loader.Reader.HasErrors) { MathNode.Log(loader.Reader.Errors); } ComponentPointer pt = new ComponentPointer(cr); value = pt; } else { MemberComponentId cid = new MemberComponentId(loader.GetRootId(), c.Component, memberId); ComponentPointer pt = new ComponentPointer(cid); value = pt; } } } } } } return(value); }