Ejemplo n.º 1
0
        /// <summary>
        /// Create a new enum choice with a specified value.
        /// </summary>
        /// <param name="i">The specified value for this enum choice.</param>
        /// <param name="propertyName">The name of the enum choice.</param>
        internal EnumClass(int i, string propertyName)
        {
            Name = propertyName;
            EnumMetaData meta = getMetaData();

            Value = this.AddEnum(i, meta);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Create a new enum choice. It will automatically be assigned a value, starting at 0 or the next
        /// available value above the previous enum's choice.
        /// </summary>
        /// <param name="propertyName">The name of the enum choice.</param>
        internal EnumClass(string propertyName)
        {
            Name = propertyName;
            EnumMetaData meta = getMetaData();

            Value = this.AddEnum(meta.NextValue, meta);
        }
Ejemplo n.º 3
0
        public void ChangeEnum(EnumMetaData @enum)
        {
            Contract.Requires(@enum != null);

            MetaData = @enum;

            GetParentContainer()?.ChildHasChanged(this);
        }
Ejemplo n.º 4
0
        private int AddEnum(int number, EnumMetaData meta)
        {
            dataForTypes[GetType()] = meta;

            while (meta.EnumOptions.ContainsKey(number))
            {
                number++;
            }
            meta.EnumOptions.Add(number, this);
            meta.NextValue = number + 1;

            meta.EnumNames.Add(Name, this);
            return(number);
        }
Ejemplo n.º 5
0
        private void addEnumIconButton_Click(object sender, EventArgs e)
        {
            var @enum = new EnumMetaData
            {
                Name = "Enum"
            };

            using (var eef = new EnumEditorForm(@enum))
            {
                if (eef.ShowDialog() == DialogResult.OK)
                {
                    project.AddEnum(@enum);

                    ShowFilteredEnums();
                }
            }
        }
Ejemplo n.º 6
0
        public EnumEditorForm(EnumMetaData @enum)
        {
            Contract.Requires(@enum != null);

            InitializeComponent();

            this.@enum = @enum;

            enumNameTextBox.Text = @enum.Name;
            enumUnderlyingTypeSizeComboBox.SelectedValue = @enum.Size;
            enumFlagCheckBox.Checked = @enum.UseFlagsMode;

            foreach (var kv in @enum.Values)
            {
                enumDataGridView.Rows.Add(kv.Key, kv.Value);
            }
        }
Ejemplo n.º 7
0
        private EnumMetaData getMetaData()
        {
            EnumMetaData data = metaData;

            if (data != null)
            {
                return(data);
            }
            lock (dataForTypes)
            {
                if (!dataForTypes.TryGetValue(this.GetType(), out data))
                {
                    data = new EnumMetaData();
                    dataForTypes[this.GetType()] = data;
                }
            }
            return(data);
        }
Ejemplo n.º 8
0
 public EnumNode()
 {
     MetaData = new EnumMetaData
     {
         Name = "TestEnum"
     };
     MetaData.SetData(true, 4, new SortedDictionary <long, string>
     {
         { 0, "Val0" },
         { 1, "Val1" },
         { 2, "Val2" },
         { 4, "Val4" },
         { 8, "Val8" },
         { 16, "Val16" },
         { 32, "Val32" },
         { 64, "Val64" },
         { 128, "Val128" },
         { 256, "Val256" },
         { 512, "Val512" },
         { 1024, "Val1024" }
     });
 }
Ejemplo n.º 9
0
        public void Load(Stream input, ILogger logger)
        {
            Contract.Requires(input != null);
            Contract.Requires(logger != null);

            using (var archive = new ZipArchive(input, ZipArchiveMode.Read))
            {
                var dataEntry = archive.GetEntry(DataFileName);
                if (dataEntry == null)
                {
                    throw new FormatException();
                }
                using (var entryStream = dataEntry.Open())
                {
                    var document = XDocument.Load(entryStream);
                    if (document.Root?.Element(XmlClassesElement) == null)
                    {
                        throw new FormatException("The data has not the correct format.");
                    }

                    uint.TryParse(document.Root.Attribute(XmlVersionAttribute)?.Value, out var fileVersion);
                    if ((fileVersion & FileVersionCriticalMask) > (FileVersion & FileVersionCriticalMask))
                    {
                        throw new FormatException($"The file version is unsupported. A newer {Constants.ApplicationName} version is required to read it.");
                    }

                    var platform = document.Root.Attribute(XmlPlatformAttribute)?.Value;
                    if (platform != Constants.Platform)
                    {
                        logger.Log(LogLevel.Warning, $"The platform of the file ({platform}) doesn't match the program platform ({Constants.Platform}).");
                    }

                    var customDataElement = document.Root.Element(XmlCustomDataElement);
                    if (customDataElement != null)
                    {
                        project.CustomData.Deserialize(customDataElement);
                    }

                    var typeMappingElement = document.Root.Element(XmlTypeMappingElement);
                    if (typeMappingElement != null)
                    {
                        project.TypeMapping.Deserialize(typeMappingElement);
                    }

                    var enumsElement = document.Root.Element(XmlEnumsElement);
                    if (enumsElement != null)
                    {
                        foreach (var enumElement in enumsElement.Elements(XmlEnumElement))
                        {
                            var name         = enumElement.Attribute(XmlNameAttribute)?.Value ?? string.Empty;
                            var useFlagsMode = (bool?)enumElement.Attribute(XmlFlagsAttribute) ?? false;
                            var size         = enumElement.Attribute(XmlSizeAttribute).GetEnumValue <EnumMetaData.UnderlyingTypeSize>();

                            var values = new Dictionary <string, long>();
                            foreach (var itemElement in enumElement.Elements(XmlItemElement))
                            {
                                var itemName  = itemElement.Attribute(XmlNameAttribute)?.Value ?? string.Empty;
                                var itemValue = (long?)itemElement.Attribute(XmlValueAttribute) ?? 0L;

                                values.Add(itemName, itemValue);
                            }

                            var @enum = new EnumMetaData
                            {
                                Name = name
                            };
                            @enum.SetData(useFlagsMode, size, values);

                            project.AddEnum(@enum);
                        }
                    }

                    var classes = new List <Tuple <XElement, ClassNode> >();

                    var classesElement = document.Root.Element(XmlClassesElement);
                    if (classesElement != null)
                    {
                        foreach (var element in classesElement
                                 .Elements(XmlClassElement)
                                 .DistinctBy(e => e.Attribute(XmlUuidAttribute)?.Value))
                        {
                            var node = new ClassNode(false)
                            {
                                Uuid           = NodeUuid.FromBase64String(element.Attribute(XmlUuidAttribute)?.Value, true),
                                Name           = element.Attribute(XmlNameAttribute)?.Value ?? string.Empty,
                                Comment        = element.Attribute(XmlCommentAttribute)?.Value ?? string.Empty,
                                AddressFormula = element.Attribute(XmlAddressAttribute)?.Value ?? string.Empty
                            };

                            if (!project.ContainsClass(node.Uuid))
                            {
                                project.AddClass(node);

                                classes.Add(Tuple.Create(element, node));
                            }
                        }
                    }

                    foreach (var t in classes)
                    {
                        var nodes = t.Item1.Elements(XmlNodeElement)
                                    .Select(e => CreateNodeFromElement(e, t.Item2, logger))
                                    .Where(n => n != null);

                        foreach (var node in nodes)
                        {
                            t.Item2.AddNode(node);
                        }
                    }
                }
            }
        }