public CecilPropertyDescriptor(XmlElement elem, Stetic.ItemGroup group, Stetic.ClassDescriptor klass, PropertyDescriptor prop) : base(elem, group, klass) { this.name = prop.Name; this.type = prop.PropertyType; this.canWrite = prop.CanWrite; if (type.IsValueType) { initialValue = Activator.CreateInstance(type); } this.label = prop.Label; this.description = prop.Description; this.maximum = prop.Maximum; this.minimum = prop.Minimum; this.initWithName = prop.InitWithName; this.translatable = prop.Translatable; }
public CecilPropertyDescriptor(CecilWidgetLibrary lib, XmlElement elem, Stetic.ItemGroup group, Stetic.ClassDescriptor klass, PropertyDefinition pinfo) : base(elem, group, klass) { string tname; if (pinfo != null) { name = pinfo.Name; tname = pinfo.PropertyType.FullName; canWrite = pinfo.SetMethod != null; } else { name = elem.GetAttribute("name"); tname = elem.GetAttribute("type"); canWrite = elem.Attributes ["canWrite"] == null; } Load(elem); type = Stetic.Registry.GetType(tname, false); if (type == null) { Console.WriteLine("Could not find type: " + tname); type = typeof(string); } if (type.IsValueType) { initialValue = Activator.CreateInstance(type); } // Consider all properties runtime-properties, since they have been created // from class properties. isRuntimeProperty = true; if (pinfo != null) { SaveCecilXml(elem); } }
protected override Stetic.ItemDescriptor CreateItemDescriptor(XmlElement elem, Stetic.ItemGroup group) { string mname = elem.GetAttribute("name"); if (elem.Name == "property") { if (type != null) { PropertyDefinition propInfo = FindProperty(type, mname); if (propInfo != null) { return(new CecilPropertyDescriptor(cecilLib, elem, group, this, propInfo)); } } else { return(new CecilPropertyDescriptor(cecilLib, elem, group, this, null)); } } else if (elem.Name == "signal") { if (type != null) { EventDefinition signalInfo = FindEvent(type, mname); if (signalInfo != null) { return(new CecilSignalDescriptor(cecilLib, elem, group, this, signalInfo)); } } else { return(new CecilSignalDescriptor(cecilLib, elem, group, this, null)); } } else { return(base.CreateItemDescriptor(elem, group)); } return(null); }
public CecilSignalDescriptor(CecilWidgetLibrary lib, XmlElement elem, Stetic.ItemGroup group, Stetic.ClassDescriptor klass, EventDefinition sinfo) : base(elem, group, klass) { if (sinfo != null) { string handler = sinfo.EventType.FullName; handlerTypeName = handler.Replace('/', '+'); Type t = Registry.GetType(handler, false); if (t != null) { MethodInfo mi = t.GetMethod("Invoke"); handlerReturnTypeName = mi.ReturnType.FullName; ParameterInfo[] pars = mi.GetParameters(); handlerParameters = new ParameterDescriptor [pars.Length]; for (int n = 0; n < pars.Length; n++) { handlerParameters [n] = new ParameterDescriptor(pars[n].Name, pars[n].ParameterType.FullName); } } else { // If the type is generic, the type arguments must be ignored when looking for the type string tn = handler; int i = handler.IndexOf('<'); if (i != -1) { tn = handler.Substring(0, i); // Convert the type name to a type reference handler = handler.Replace('<', '['); handler = handler.Replace('>', ']'); } TypeDefinition td = lib.FindTypeDefinition(tn); if (td != null) { MethodDefinition mi = null; foreach (MethodDefinition md in td.Methods) { if (md.Name == "Invoke") { mi = md; break; } } if (mi != null) { handlerReturnTypeName = CecilWidgetLibrary.GetInstanceType(td, sinfo.EventType, mi.ReturnType.ReturnType); handlerParameters = new ParameterDescriptor [mi.Parameters.Count]; for (int n = 0; n < handlerParameters.Length; n++) { ParameterDefinition par = mi.Parameters [n]; handlerParameters [n] = new ParameterDescriptor(par.Name, CecilWidgetLibrary.GetInstanceType(td, sinfo.EventType, par.ParameterType)); } } } else { handlerParameters = new ParameterDescriptor [0]; } } SaveCecilXml(elem); } else { handlerTypeName = elem.GetAttribute("handlerTypeName"); handlerReturnTypeName = elem.GetAttribute("handlerReturnTypeName"); ArrayList list = new ArrayList(); foreach (XmlNode npar in elem.ChildNodes) { XmlElement epar = npar as XmlElement; if (epar == null) { continue; } list.Add(new ParameterDescriptor(epar.GetAttribute("name"), epar.GetAttribute("type"))); } handlerParameters = (ParameterDescriptor[])list.ToArray(typeof(ParameterDescriptor)); } Load(elem); }