Exemple #1
0
        protected override void ParseAnnotations(
            XmlSchemaSet schemaSet,
            IDictionary<NamedMetadata, IList<XmlNode>> annotations)
        {
            base.ParseAnnotations(schemaSet, annotations);

            foreach (var kv in annotations)
            {                               
                DomNodeType nodeType = kv.Key as DomNodeType;
                if (nodeType == null || kv.Value.Count == 0) continue;

                // create a hash of hidden attributes                
                HashSet<string> hiddenprops = new HashSet<string>();
                foreach (XmlNode xmlnode in kv.Value)
                {
                    
                    if (xmlnode.LocalName == "scea.dom.editors.attribute")
                    {
                        XmlAttribute hiddenAttrib = xmlnode.Attributes["hide"];
                        if (hiddenAttrib != null && hiddenAttrib.Value == "true")
                        {
                            XmlAttribute nameAttrib = xmlnode.Attributes["name"];
                            string name = (nameAttrib != null) ? nameAttrib.Value : null;
                            if (!string.IsNullOrWhiteSpace(name))
                            {
                                hiddenprops.Add(name);
                            }                            
                        }
                    }
                }
                if (hiddenprops.Count > 0)
                {
                    nodeType.SetTag(HiddenProperties, hiddenprops);
                }
                
                PropertyDescriptorCollection localDescriptor = nodeType.GetTagLocal<PropertyDescriptorCollection>();
                PropertyDescriptorCollection annotationDescriptor = Sce.Atf.Dom.PropertyDescriptor.ParseXml(nodeType, kv.Value);
                
                // if the type already have local property descriptors 
                // then add annotation driven property descriptors to it.
                if (localDescriptor != null)
                {
                    foreach (System.ComponentModel.PropertyDescriptor propDecr in annotationDescriptor)
                    {
                        localDescriptor.Add(propDecr);
                    }
                }
                else
                {
                    localDescriptor = annotationDescriptor;
                }
               
                if (localDescriptor.Count > 0)
                    nodeType.SetTag<PropertyDescriptorCollection>(localDescriptor);


                // annotations resourceReferenceTypes.
                XmlNode rfNode = FindElement(kv.Value, Annotations.ReferenceConstraint.Name);
                if (rfNode != null)
                {
                    string exts = FindAttribute(rfNode, Annotations.ReferenceConstraint.ValidResourceFileExts);
                    char[] sep = { ';' };
                    HashSet<string> extSet = new HashSet<string>(exts.Split(sep,StringSplitOptions.RemoveEmptyEntries));
                    nodeType.SetTag(Annotations.ReferenceConstraint.ValidResourceFileExts, extSet);
                }
                                             
                // todo use schema annotation to mark  Palette types.                    
                XmlNode xmlNode = FindElement(kv.Value, "scea.dom.editors");
                if (xmlNode != null)
                {
                    string name = FindAttribute(xmlNode, "name");
                    string description = FindAttribute(xmlNode, "description");
                    string image = FindAttribute(xmlNode, "image");
                    string category = FindAttribute(xmlNode, "category");
                    string menuText = FindAttribute(xmlNode, "menuText");
                    NodeTypePaletteItem item = new NodeTypePaletteItem(nodeType, name, description, image, category,
                                                                       menuText);
                    nodeType.SetTag<NodeTypePaletteItem>(item);
                }
            }           
        }
Exemple #2
0
        /// <summary>
        /// Finishes initializing component by adding palette information and defining module types</summary>
        public virtual void Initialize()
        {
            // add palette info to annotation type, and register with palette
            var annotationItem = new NodeTypePaletteItem(
                Schema.annotationType.Type,
                "Comment".Localize(),
                "Create a moveable resizable comment on the circuit canvas".Localize(),
                Resources.AnnotationImage);

            m_paletteService.AddItem(
                annotationItem, "Misc".Localize("abbreviation for miscellaneous"), this);

            // define editable properties on annotation
            Schema.annotationType.Type.SetTag(
                new PropertyDescriptorCollection(
                    new PropertyDescriptor[] {
                            new AttributePropertyDescriptor(
                                "Text".Localize(),
                                Schema.annotationType.textAttribute,
                                null,
                                "Comment Text".Localize(),
                                false),
                            new AttributePropertyDescriptor(
                                "Background Color".Localize(),  // name
                                Schema.annotationType.backcolorAttribute, //AttributeInfo
                                null, // category
                                "Comment's background color".Localize(), //description
                                false, //isReadOnly
                                new Sce.Atf.Controls.PropertyEditing.ColorEditor(), // editor
                                new Sce.Atf.Controls.PropertyEditing.IntColorConverter() // typeConverter
                                ),
                           new AttributePropertyDescriptor(
                                "Foreground Color".Localize(),  // name
                                Schema.annotationType.foreColorAttribute, //AttributeInfo
                                null, // category
                                "Comment's foreground color".Localize(), //description
                                false, //isReadOnly
                                new Sce.Atf.Controls.PropertyEditing.ColorEditor(), // editor
                                new Sce.Atf.Controls.PropertyEditing.IntColorConverter() // typeConverter
                                ),
                   }));

            // define module types

            DefineModuleType(
                new XmlQualifiedName("buttonType", Schema.NS),
                "Button".Localize(),
                "On/Off Button".Localize(),
                Resources.ButtonImage,
                EmptyArray<ElementType.Pin>.Instance,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("Out".Localize(), BooleanPinTypeName, 0)
                },
                m_schemaLoader);

            var lightType = DefineModuleType(
                new XmlQualifiedName("lightType", Schema.NS),
                "Light".Localize(),
                "Light source".Localize(),
                Resources.LightImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("In".Localize(), BooleanPinTypeName, 0)
                },
                EmptyArray<ElementType.Pin>.Instance,
                m_schemaLoader);

            // define and add new attribute to light type.
            var featuresAttribute = new AttributeInfo("features".Localize(), AttributeType.IntType);
            featuresAttribute.DefaultValue = 3;
            lightType.Define(featuresAttribute);
            // create property descriptor for the above attribute.
            FlagsUITypeEditor featuresEditor = new FlagsUITypeEditor(new[] { "ENERGY STAR", "High CRI" }, new[] { 1, 2 });
            FlagsTypeConverter featuresConverter = new FlagsTypeConverter(new[] { "Energy Star", "High CRI" }, new[] { 1, 2 });
            lightType.SetTag(
               new PropertyDescriptorCollection(
                   new PropertyDescriptor[] {
                        new AttributePropertyDescriptor(
                            "Features".Localize(),
                            featuresAttribute,
                            null, //category
                            "Features".Localize(), //description
                            false,
                            featuresEditor,
                            featuresConverter) //is not read-only
                    }));

            


            DomNodeType speakerNodeType = DefineModuleType(
                new XmlQualifiedName("speakerType", Schema.NS),
                "Speaker".Localize("an electronic speaker, for playing sounds"),
                "Speaker".Localize("an electronic speaker, for playing sounds"),
                Resources.SpeakerImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("In".Localize(), FloatPinTypeName, 0),
                },
                EmptyArray<ElementType.Pin>.Instance,
                m_schemaLoader);
            var speakerManufacturerInfo = new AttributeInfo("Manufacturer".Localize(), AttributeType.StringType);

            // add bass level attribute to demo/test BoundedFloatEditor()
            float bassMin = -1;
            float bassMax = 1;
            var bassLevel = new AttributeInfo("bassLevel".Localize("bass level"), AttributeType.FloatType);
            bassLevel.AddRule(new NumericMinRule(bassMin, true));
            bassLevel.AddRule(new NumericMaxRule(bassMax, true));
            bassLevel.DefaultValue = 0.1f;
            //bassLevel.def
            speakerNodeType.Define(bassLevel);

            speakerNodeType.Define(speakerManufacturerInfo);
            speakerNodeType.SetTag(
                new PropertyDescriptorCollection(
                    new PropertyDescriptor[] {
                        new AttributePropertyDescriptor(
                            "Manufacturer".Localize(),
                            speakerManufacturerInfo,
                            null, //category
                            "Manufacturer".Localize(), //description
                            false),
             
                        new AttributePropertyDescriptor(
                            "Bass Level".Localize(),
                            bassLevel,
                            null, //category
                            "Bass Level".Localize(), //description
                            false,
                            new BoundedFloatEditor(bassMin,bassMax))
                    }));

            DefineModuleType(
                new XmlQualifiedName("soundType", Schema.NS),
                "Sound".Localize(),
                "Sound Player".Localize(),
                Resources.SoundImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("On".Localize(), "boolean", 0),
                    new ElementType.Pin("Reset".Localize(), "boolean", 1),
                    new ElementType.Pin("Pause".Localize(), "boolean", 2),
                },
                new ElementType.Pin[]
                {
                    new ElementType.Pin("Out".Localize(), "float", 0),
                },
                m_schemaLoader);

            DefineModuleType(
                new XmlQualifiedName("andType", Schema.NS),
                "And".Localize(),
                "Logical AND".Localize(),
                Resources.AndImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("In1".Localize("input pin #1"), "boolean", 0),
                    new ElementType.Pin("In2".Localize("input pin #2"), "boolean", 1),
                },
                new ElementType.Pin[]
                {
                    new ElementType.Pin("Out".Localize(), "boolean", 0),
                },
                m_schemaLoader);

            DefineModuleType(
                new XmlQualifiedName("orType", Schema.NS),
                "Or".Localize(),
                "Logical OR".Localize(),
                Resources.OrImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("In1".Localize("input pin #1"), "boolean", 0),
                    new ElementType.Pin("In2".Localize("input pin #2"), "boolean", 1),
                },
                new ElementType.Pin[]
                {
                    new ElementType.Pin("Out".Localize(), "boolean", 0),
                },
                m_schemaLoader);

            DefineModuleType(
                new XmlQualifiedName("16To1MultiplexerType", Schema.NS),
                "16-to-1 Multiplexer".Localize(),
                "16-to-1 Multiplexer".Localize(),
                Resources.AndImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("In1".Localize("input pin #1"), "boolean", 0),
                    new ElementType.Pin("In2".Localize("input pin #2"), "boolean", 1),
                    new ElementType.Pin("In3".Localize(), "boolean", 2),
                    new ElementType.Pin("In4".Localize(), "boolean", 3),
                    new ElementType.Pin("In5".Localize(), "boolean", 4),
                    new ElementType.Pin("In6".Localize(), "boolean", 5),
                    new ElementType.Pin("In7".Localize(), "boolean", 6),
                    new ElementType.Pin("In8".Localize(), "boolean", 7),
                    new ElementType.Pin("In9".Localize(), "boolean", 8),
                    new ElementType.Pin("In10".Localize(), "boolean", 9),
                    new ElementType.Pin("In11".Localize(), "boolean", 10),
                    new ElementType.Pin("In12".Localize(), "boolean", 11),
                    new ElementType.Pin("In13".Localize(), "boolean", 12),
                    new ElementType.Pin("In14".Localize(), "boolean", 13),
                    new ElementType.Pin("In15".Localize(), "boolean", 14),
                    new ElementType.Pin("In16".Localize(), "boolean", 15),
                    new ElementType.Pin("Select1".Localize("The name of a pin on a circuit element"), "boolean", 16),
                    new ElementType.Pin("Select2".Localize("The name of a pin on a circuit element"), "boolean", 17),
                    new ElementType.Pin("Select3".Localize("The name of a pin on a circuit element"), "boolean", 18),
                    new ElementType.Pin("Select4".Localize("The name of a pin on a circuit element"), "boolean", 19),
                },
                new ElementType.Pin[]
                {
                    new ElementType.Pin("Out".Localize(), "boolean", 0),
                },
                m_schemaLoader);

            DefineModuleType(
                new XmlQualifiedName("1To16DemultiplexerType", Schema.NS),
                "1-to-16 Demultiplexer".Localize(),
                "1-to-16 Demultiplexer".Localize(),
                Resources.OrImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("Data".Localize(), "boolean", 0),
                    new ElementType.Pin("Select1".Localize("The name of a pin on a circuit element"), "boolean", 1),
                    new ElementType.Pin("Select2".Localize("The name of a pin on a circuit element"), "boolean", 2),
                    new ElementType.Pin("Select3".Localize("The name of a pin on a circuit element"), "boolean", 3),
                    new ElementType.Pin("Select4".Localize("The name of a pin on a circuit element"), "boolean", 4),
                },
                new ElementType.Pin[]
                {
                    new ElementType.Pin("Out1".Localize(), "boolean", 0),
                    new ElementType.Pin("Out2".Localize(), "boolean", 1),
                    new ElementType.Pin("Out3".Localize(), "boolean", 2),
                    new ElementType.Pin("Out4".Localize(), "boolean", 3),
                    new ElementType.Pin("Out5".Localize(), "boolean", 4),
                    new ElementType.Pin("Out6".Localize(), "boolean", 5),
                    new ElementType.Pin("Out7".Localize(), "boolean", 6),
                    new ElementType.Pin("Out8".Localize(), "boolean", 7),
                    new ElementType.Pin("Out9".Localize(), "boolean", 8),
                    new ElementType.Pin("Out10".Localize(), "boolean", 9),
                    new ElementType.Pin("Out11".Localize(), "boolean", 10),
                    new ElementType.Pin("Out12".Localize(), "boolean", 11),
                    new ElementType.Pin("Out13".Localize(), "boolean", 12),
                    new ElementType.Pin("Out14".Localize(), "boolean", 13),
                    new ElementType.Pin("Out15".Localize(), "boolean", 14),
                    new ElementType.Pin("Out16".Localize(), "boolean", 15),
                },
                m_schemaLoader);
        }
Exemple #3
0
        /// <summary>
        /// Finishes initializing component by adding palette information and defining module types</summary>
        public virtual void Initialize()
        {
            // add palette info to annotation type, and register with palette
            var annotationItem = new NodeTypePaletteItem(
                Schema.annotationType.Type,
                "Comment".Localize(),
                "Create a moveable resizable comment on the circuit canvas".Localize(),
                Resources.AnnotationImage);

            m_paletteService.AddItem(
                annotationItem, "Misc".Localize("abbreviation for miscellaneous"), this);

            // define editable properties on annotation
            Schema.annotationType.Type.SetTag(
                new PropertyDescriptorCollection(
                    new PropertyDescriptor[] {
                            new AttributePropertyDescriptor(
                                "Text".Localize(),
                                Schema.annotationType.textAttribute,
                                null,
                                "Comment Text".Localize(),
                                false),
                            new AttributePropertyDescriptor(
                                "BackColor".Localize(),  // name
                                Schema.annotationType.backcolorAttribute, //AttributeInfo
                                null, // category
                                "Comment background color".Localize(), //description
                                false, //isReadOnly
                                new Sce.Atf.Controls.PropertyEditing.ColorEditor(), // editor
                                new Sce.Atf.Controls.PropertyEditing.IntColorConverter() // typeConverter
                                ),
                           new AttributePropertyDescriptor(
                                "ForeColor".Localize(),  // name
                                Schema.annotationType.foreColorAttribute, //AttributeInfo
                                null, // category
                                "Comment foreground color".Localize(), //description
                                false, //isReadOnly
                                new Sce.Atf.Controls.PropertyEditing.ColorEditor(), // editor
                                new Sce.Atf.Controls.PropertyEditing.IntColorConverter() // typeConverter
                                ),
                   }));

            // define module types

            DefineModuleType(
                new XmlQualifiedName("buttonType", Schema.NS),
                "Button".Localize(),
                "On/Off Button".Localize(),
                Resources.ButtonImage,
                EmptyArray<ElementType.Pin>.Instance,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("Out".Localize(), BooleanPinTypeName, 0)
                },
                m_schemaLoader);

            DefineModuleType(
                new XmlQualifiedName("lightType", Schema.NS),
                "Light".Localize(),
                "Light source".Localize(),
                Resources.LightImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("In".Localize(), BooleanPinTypeName, 0)
                },
                EmptyArray<ElementType.Pin>.Instance,
                m_schemaLoader);

            DomNodeType speakerNodeType = DefineModuleType(
                new XmlQualifiedName("speakerType", Schema.NS),
                "Speaker".Localize("an electronic speaker, for playing sounds"),
                "Speaker".Localize("an electronic speaker, for playing sounds"),
                Resources.SpeakerImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("In".Localize(), FloatPinTypeName, 0),
                },
                EmptyArray<ElementType.Pin>.Instance,
                m_schemaLoader);
            var speakerManufacturerInfo = new AttributeInfo("Manufacturer".Localize(), AttributeType.StringType);
            speakerNodeType.Define(speakerManufacturerInfo);
            speakerNodeType.SetTag(
                new PropertyDescriptorCollection(
                    new PropertyDescriptor[] {
                        new AttributePropertyDescriptor(
                            "Manufacturer".Localize(),
                            speakerManufacturerInfo,
                            null, //category
                            "Manufacturer".Localize(), //description
                            false) //is not read-only
                    }));

            DefineModuleType(
                new XmlQualifiedName("soundType", Schema.NS),
                "Sound".Localize(),
                "Sound Player".Localize(),
                Resources.SoundImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("On".Localize(), "boolean", 0),
                    new ElementType.Pin("Reset".Localize(), "boolean", 1),
                    new ElementType.Pin("Pause".Localize(), "boolean", 2),
                },
                new ElementType.Pin[]
                {
                    new ElementType.Pin("Out".Localize(), "float", 0),
                },
                m_schemaLoader);

            DefineModuleType(
                new XmlQualifiedName("andType", Schema.NS),
                "And".Localize(),
                "Logical AND".Localize(),
                Resources.AndImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("In1".Localize("input pin #1"), "boolean", 0),
                    new ElementType.Pin("In2".Localize("input pin #2"), "boolean", 1),
                },
                new ElementType.Pin[]
                {
                    new ElementType.Pin("Out".Localize(), "boolean", 0),
                },
                m_schemaLoader);

            DefineModuleType(
                new XmlQualifiedName("orType", Schema.NS),
                "Or".Localize(),
                "Logical OR".Localize(),
                Resources.OrImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("In1".Localize("input pin #1"), "boolean", 0),
                    new ElementType.Pin("In2".Localize("input pin #2"), "boolean", 1),
                },
                new ElementType.Pin[]
                {
                    new ElementType.Pin("Out".Localize(), "boolean", 0),
                },
                m_schemaLoader);

            DefineModuleType(
                new XmlQualifiedName("16To1MultiplexerType", Schema.NS),
                "16-to-1 Multiplexer".Localize(),
                "16-to-1 Multiplexer".Localize(),
                Resources.AndImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("In1".Localize(), "boolean", 0),
                    new ElementType.Pin("In2".Localize(), "boolean", 1),
                    new ElementType.Pin("In3".Localize(), "boolean", 2),
                    new ElementType.Pin("In4".Localize(), "boolean", 3),
                    new ElementType.Pin("In5".Localize(), "boolean", 4),
                    new ElementType.Pin("In6".Localize(), "boolean", 5),
                    new ElementType.Pin("In7".Localize(), "boolean", 6),
                    new ElementType.Pin("In8".Localize(), "boolean", 7),
                    new ElementType.Pin("In9".Localize(), "boolean", 8),
                    new ElementType.Pin("In10".Localize(), "boolean", 9),
                    new ElementType.Pin("In11".Localize(), "boolean", 10),
                    new ElementType.Pin("In12".Localize(), "boolean", 11),
                    new ElementType.Pin("In13".Localize(), "boolean", 12),
                    new ElementType.Pin("In14".Localize(), "boolean", 13),
                    new ElementType.Pin("In15".Localize(), "boolean", 14),
                    new ElementType.Pin("In16".Localize(), "boolean", 15),
                    new ElementType.Pin("Select1".Localize(), "boolean", 16),
                    new ElementType.Pin("Select2".Localize(), "boolean", 17),
                    new ElementType.Pin("Select3".Localize(), "boolean", 18),
                    new ElementType.Pin("Select4".Localize(), "boolean", 19),
                },
                new ElementType.Pin[]
                {
                    new ElementType.Pin("Out".Localize(), "boolean", 0),
                },
                m_schemaLoader);

            DefineModuleType(
                new XmlQualifiedName("1To16DemultiplexerType", Schema.NS),
                "1-to-16 Demultiplexer".Localize(),
                "1-to-16 Demultiplexer".Localize(),
                Resources.OrImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("Data".Localize(), "boolean", 0),
                    new ElementType.Pin("Select1".Localize(), "boolean", 1),
                    new ElementType.Pin("Select2".Localize(), "boolean", 2),
                    new ElementType.Pin("Select3".Localize(), "boolean", 3),
                    new ElementType.Pin("Select4".Localize(), "boolean", 4),
                },
                new ElementType.Pin[]
                {
                    new ElementType.Pin("Out1".Localize(), "boolean", 0),
                    new ElementType.Pin("Out2".Localize(), "boolean", 1),
                    new ElementType.Pin("Out3".Localize(), "boolean", 2),
                    new ElementType.Pin("Out4".Localize(), "boolean", 3),
                    new ElementType.Pin("Out5".Localize(), "boolean", 4),
                    new ElementType.Pin("Out6".Localize(), "boolean", 5),
                    new ElementType.Pin("Out7".Localize(), "boolean", 6),
                    new ElementType.Pin("Out8".Localize(), "boolean", 7),
                    new ElementType.Pin("Out9".Localize(), "boolean", 8),
                    new ElementType.Pin("Out10".Localize(), "boolean", 9),
                    new ElementType.Pin("Out11".Localize(), "boolean", 10),
                    new ElementType.Pin("Out12".Localize(), "boolean", 11),
                    new ElementType.Pin("Out13".Localize(), "boolean", 12),
                    new ElementType.Pin("Out14".Localize(), "boolean", 13),
                    new ElementType.Pin("Out15".Localize(), "boolean", 14),
                    new ElementType.Pin("Out16".Localize(), "boolean", 15),
                },
                m_schemaLoader);
        }
Exemple #4
0
        protected override void ParseAnnotations(
            XmlSchemaSet schemaSet,
            IDictionary<NamedMetadata, IList<XmlNode>> annotations)
        {
            base.ParseAnnotations(schemaSet, annotations);

            foreach (var kv in annotations)
            {
                DomNodeType nodeType = kv.Key as DomNodeType;
                if (kv.Value.Count == 0) continue;

                // create a hash of hidden attributes
                HashSet<string> hiddenprops = new HashSet<string>();
                foreach (XmlNode xmlnode in kv.Value)
                {

                    if (xmlnode.LocalName == "scea.dom.editors.attribute")
                    {
                        XmlAttribute hiddenAttrib = xmlnode.Attributes["hide"];
                        if (hiddenAttrib != null && hiddenAttrib.Value == "true")
                        {
                            XmlAttribute nameAttrib = xmlnode.Attributes["name"];
                            string name = (nameAttrib != null) ? nameAttrib.Value : null;
                            if (!string.IsNullOrWhiteSpace(name))
                            {
                                hiddenprops.Add(name);
                            }
                        }
                    }
                }
                if (hiddenprops.Count > 0)
                {
                    nodeType.SetTag(HiddenProperties, hiddenprops);
                }

                PropertyDescriptorCollection localDescriptor = nodeType.GetTagLocal<PropertyDescriptorCollection>();
                PropertyDescriptorCollection annotationDescriptor = Sce.Atf.Dom.PropertyDescriptor.ParseXml(nodeType, kv.Value);

                // if the type already have local property descriptors
                // then add annotation driven property descriptors to it.
                if (localDescriptor != null)
                {
                    foreach (System.ComponentModel.PropertyDescriptor propDecr in annotationDescriptor)
                    {
                        localDescriptor.Add(propDecr);
                    }
                }
                else
                {
                    localDescriptor = annotationDescriptor;
                }

                if (localDescriptor.Count > 0)
                    nodeType.SetTag<PropertyDescriptorCollection>(localDescriptor);

                // process annotations resourceReferenceTypes.
                XmlNode rfNode = FindElement(kv.Value, Annotations.ReferenceConstraint.Name);
                if (rfNode != null)
                {
                    HashSet<string> extSet = null;
                    string exts = FindAttribute(rfNode, Annotations.ReferenceConstraint.ValidResourceFileExts);
                    if (!string.IsNullOrWhiteSpace(exts))
                    {
                        exts = exts.ToLower();
                        char[] sep = { ',' };
                        extSet = new HashSet<string>(exts.Split(sep, StringSplitOptions.RemoveEmptyEntries));

                    }
                    else if(m_gameEngine != null)
                    {
                        string restype = FindAttribute(rfNode, Annotations.ReferenceConstraint.ResourceType);
                        ResourceInfo resInfo = m_gameEngine.Info.ResourceInfos.GetByType(restype);
                        if (resInfo != null)
                            extSet = new HashSet<string>(resInfo.FileExts);
                    }

                    if(extSet != null)
                        nodeType.SetTag(Annotations.ReferenceConstraint.ValidResourceFileExts, extSet);

                    nodeType.SetTag(
                        Annotations.ReferenceConstraint.ResourceType,
                        FindAttribute(rfNode, Annotations.ReferenceConstraint.ResourceType));
                }

                // todo use schema annotation to mark  Palette types.
                XmlNode xmlNode = FindElement(kv.Value, "scea.dom.editors");
                if (xmlNode != null)
                {
                    string name = FindAttribute(xmlNode, "name");
                    string description = FindAttribute(xmlNode, "description");
                    string image = FindAttribute(xmlNode, "image");
                    string category = FindAttribute(xmlNode, "category");
                    string menuText = FindAttribute(xmlNode, "menuText");
                    if (!string.IsNullOrEmpty(category))
                    {
                        NodeTypePaletteItem item = new NodeTypePaletteItem(nodeType, name, description, image, category, menuText);
                        nodeType.SetTag<NodeTypePaletteItem>(item);
                    }
                }

                // handle special extensions
                foreach (XmlNode annot in kv.Value)
                {
                    if (annot.LocalName == "LeGe.OpaqueListable")
                    {
                        var labelAttrib = annot.Attributes["label"];
                        if (labelAttrib != null) {
                            string label = labelAttrib.Value;
                            nodeType.SetTag("OpaqueListable", label);
                        }
                        nodeType.Define(new ExtensionInfo<DomNodeAdapters.OpaqueListable>());
                    }
                    else if (annot.LocalName == "LeGe.GameObjectProperties")
                    {
                        nodeType.Define(new ExtensionInfo<DomNodeAdapters.GameObjectProperties>());
                    }
                    else if (annot.LocalName == "LeGe.TransformUpdater")
                    {
                        nodeType.Define(new ExtensionInfo<DomNodeAdapters.TransformUpdater>());
                    }
                    else if (annot.LocalName == "LeGe.TransformObject")
                    {
                        nodeType.Define(new ExtensionInfo<DomNodeAdapters.TransformObject>());
                    }
                    else if (annot.LocalName == "LeGe.GameContext")
                    {
                        nodeType.Define(new ExtensionInfo<GameContext>());
                    }
                }
            }
        }
Exemple #5
0
        void IInitializable.Initialize()
        {
            // add palette info to annotation type, and register with palette
            var annotationItem = new NodeTypePaletteItem(
                Schema.annotationType.Type,
                "Comment".Localize(),
                "Create a moveable resizable comment on the circuit canvas".Localize(),
                Resources.AnnotationImage);

            m_paletteService.AddItem(annotationItem, PaletteCategory, this);

            // define editable properties on annotation
            Schema.annotationType.Type.SetTag(
                new PropertyDescriptorCollection(
                    new PropertyDescriptor[] {
                            new AttributePropertyDescriptor(
                                "Text".Localize(),
                                Schema.annotationType.textAttribute,
                                null,
                                "Comment Text".Localize(),
                                false),
                            new AttributePropertyDescriptor(
                                "Comment Color".Localize(),  // name
                                Schema.annotationType.backcolorAttribute, //AttributeInfo
                                null, // category
                                "Comment background color".Localize(), //description
                                false, //isReadOnly
                                new Sce.Atf.Controls.PropertyEditing.ColorEditor(), // editor
                                new Sce.Atf.Controls.PropertyEditing.IntColorConverter() // typeConverter
                                ),
                    }));

            // define pin/connection pens

            m_diagramTheme.RegisterCustomPen(BooleanPinTypeName, new Pen(Color.LightSeaGreen, 2));
            m_diagramTheme.RegisterCustomPen(FloatPinTypeName, new Pen(Color.LightSeaGreen, 2));

            // define module types

            DefineModuleType(
                new XmlQualifiedName("buttonType", Schema.NS),
                "Button".Localize(),
                "On/Off Button".Localize(),
                Resources.ButtonImage,
                EmptyArray<ElementType.Pin>.Instance,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("Out".Localize(), BooleanPinTypeName, 0)
                },
                m_schemaLoader);

            DefineModuleType(
                new XmlQualifiedName("lightType", Schema.NS),
                "Light".Localize(),
                "Light source".Localize(),
                Resources.LightImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("In".Localize(), BooleanPinTypeName, 0)
                },
                EmptyArray<ElementType.Pin>.Instance,
                m_schemaLoader);

            DefineModuleType(
                new XmlQualifiedName("speakerType", Schema.NS),
                "Speaker".Localize("an electronic speaker, for playing sounds"),
                "Speaker".Localize("an electronic speaker, for playing sounds"),
                Resources.SpeakerImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("In".Localize(), FloatPinTypeName, 0)
                },
                EmptyArray<ElementType.Pin>.Instance,
                m_schemaLoader);

            DefineModuleType(
                new XmlQualifiedName("andType", Schema.NS),
                "And".Localize(),
                "Logical AND".Localize(),
                Resources.AndImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("In1".Localize("input pin #1"), "boolean", 0),
                    new ElementType.Pin("In2".Localize("input pin #2"), "boolean", 1),
                },
                new ElementType.Pin[]
                {
                    new ElementType.Pin("Out".Localize(), "boolean", 0),
                },
                m_schemaLoader);

            DefineModuleType(
                new XmlQualifiedName("orType", Schema.NS),
                "Or".Localize(),
                "Logical OR".Localize(),
                Resources.OrImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("In1".Localize("input pin #1"), "boolean", 0),
                    new ElementType.Pin("In2".Localize("input pin #2"), "boolean", 1),
                },
                new ElementType.Pin[]
                {
                    new ElementType.Pin("Out".Localize(), "boolean", 0),
                },
                m_schemaLoader);

            DefineModuleType(
                new XmlQualifiedName("soundType", Schema.NS),
                "Sound".Localize(),
                "Sound Player".Localize(),
                Resources.SoundImage,
                new ElementType.Pin[]
                {
                    new ElementType.Pin("On".Localize(), "boolean", 0),
                    new ElementType.Pin("Reset".Localize(), "boolean", 1),
                    new ElementType.Pin("Pause".Localize(), "boolean", 2),
                },
                new ElementType.Pin[]
                {
                    new ElementType.Pin("Out".Localize(), "float", 0),
                },
                m_schemaLoader);
        }
Exemple #6
0
        /// <summary>
        /// Parses annotations in schema sets. Override this to handle custom annotations.
        /// Supports annotations for property descriptors and palette items.</summary>
        /// <param name="schemaSet">XML schema sets being loaded</param>
        /// <param name="annotations">Dictionary of annotations in schema</param>
        protected override void ParseAnnotations(
            XmlSchemaSet schemaSet,
            IDictionary<NamedMetadata, IList<XmlNode>> annotations)
        {
            base.ParseAnnotations(schemaSet, annotations);

            IList<XmlNode> xmlNodes;

            foreach (DomNodeType nodeType in m_typeCollection.GetNodeTypes())
            {
                // parse XML annotation for property descriptors
                if (annotations.TryGetValue(nodeType, out xmlNodes))
                {
                    PropertyDescriptorCollection propertyDescriptors = Sce.Atf.Dom.PropertyDescriptor.ParseXml(nodeType, xmlNodes);

                    // Customizations
                    // The flags and enum support from annotation used to be in ATF 2.8.
                    //  Please request this feature from the ATF team if you need it and a ParseXml overload
                    //  can probably be created.
                    System.ComponentModel.PropertyDescriptor gameFlow = propertyDescriptors["Special Event"];
                    if (gameFlow != null)
                    {
                        FlagsUITypeEditor editor = (FlagsUITypeEditor)gameFlow.GetEditor(typeof(FlagsUITypeEditor));
                        editor.DefineFlags( new string[] {
                            "Reward==Give player the reward",
                            "Trophy==Give player the trophy",
                            "LevelUp==Level up",
                            "BossDies==Boss dies",
                            "PlayerDies==Player dies",
                            "EndCinematic==End cinematic",
                            "EndGame==End game",
                         });
                    }

                    nodeType.SetTag<PropertyDescriptorCollection>(propertyDescriptors);

                    // parse type annotation to create palette items
                    XmlNode xmlNode = FindElement(xmlNodes, "scea.dom.editors");
                    if (xmlNode != null)
                    {
                        string menuText = FindAttribute(xmlNode, "menuText");
                        if (menuText != null) // must have menu text and category
                        {
                            string description = FindAttribute(xmlNode, "description");
                            string image = FindAttribute(xmlNode, "image");
                            NodeTypePaletteItem item = new NodeTypePaletteItem(nodeType, menuText, description, image);
                            nodeType.SetTag<NodeTypePaletteItem>(item);
                        }
                    }
                }
            }
        }