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);
            }
        }
示例#3
0
        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);
        }