private void spreadButton_Click(object sender, EventArgs e)
        {
            var  nodes        = GetNodes(resultsTreeView);
            bool didSomething = false;

            foreach (var node in nodes)
            {
                if (node.Checked)
                {
                    var variable = node.Tag as IVariable;
                    if (variable != null)
                    {
                        if (variable.DataType.IsInteger())
                        {
                            var metaData = ainFile.MetadataFile.Metadata.GetOrAddNew(variable);
                            metaData.EnumerationType = this.enumerationType;
                            didSomething             = true;
                        }
                    }
                }
            }
            if (didSomething)
            {
                ainFile.SaveMetadata();
            }
        }
        public void FindFunctionTypes()
        {
            FindFunctionTypesMain(false);
            FindFunctionTypesRemaining(false);
            FindFunctionTypesMain(true);
            FindFunctionTypesRemaining(true);

            SetMetadata(ainFile.Functions.Cast <IVariable>());
            SetMetadata(ainFile.Globals.Cast <IVariable>());
            SetMetadata(ainFile.Structs.Cast <IVariable>());
            ainFile.SaveMetadata();
        }
        bool SaveEnumeration()
        {
            string          newName = RemoveIllegalCharacters(EnumerationNameTextBox.Text);
            var             types   = ainFile.MetadataFile.EnumerationTypes;
            EnumerationType enumerationType;

            if (EnumerationName != newName)
            {
                if (types.ContainsKey(newName))
                {
                    var result = MessageBox.Show("Overwrite existing enumeration type, \"" + newName + "\"", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                    if (result == DialogResult.No)
                    {
                        return(false);
                    }
                }
                if (String.IsNullOrEmpty(EnumerationName))
                {
                    enumerationType      = types.GetOrAddNew(newName);
                    enumerationType.Name = newName;
                    enumerationType.Clear();
                }
                else
                {
                    enumerationType = types.GetOrAddNew(EnumerationName);
                    types.Remove(EnumerationName);
                    enumerationType.Name = newName;
                    types.Set(newName, enumerationType);
                    enumerationType.Clear();
                }
            }
            else
            {
                enumerationType      = types.GetOrAddNew(newName);
                enumerationType.Name = newName;
                enumerationType.Clear();
            }
            this.EnumerationName = newName;

            var lines = scintilla1.Lines.OfType <ScintillaNET.Line>().Select(l => l.Text).ToArray();

            foreach (var line in lines)
            {
                var fields = line.Split('\t');
                if (fields.Length >= 2)
                {
                    string number = fields[0];
                    string name   = fields[1];
                    name = RemoveIllegalCharacters(name);
                    int value;
                    if (int.TryParse(number, out value) && name != "")
                    {
                        enumerationType.Set(value, name);
                    }
                }
            }

            if (!ainFile.SaveMetadata())
            {
                MessageBox.Show("Unable to write metadata file!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                return(false);
            }
            return(true);
        }
        bool SetMetadata()
        {
            //quit if we're not attached to anything
            if (variable == null || ainFile == null)
            {
                return(false);
            }

            bool dirty = false;

            //Alternative name
            string   defaultAlternativeName = ainFile.AlternativeNames.GetOrNull(variable.Name);
            Metadata metaData        = ainFile.MetadataFile.Metadata.GetOrNew(variable);
            string   alternativeName = AlternativeNameTextBox.Text;

            if (alternativeName == defaultAlternativeName || alternativeName == "")
            {
                alternativeName = null;
            }
            if (metaData.ReplacementName != alternativeName)
            {
                dirty = true;
            }
            metaData.ReplacementName = alternativeName;

            //default value
            if (findDefaultValueButton.Enabled == true)
            {
                var defaultValue = metaData.DefaultValue;
                if (defaultValue == null)
                {
                    if (currentDefaultValue != null)
                    {
                        dirty = true;
                    }
                    metaData.DefaultValue = currentDefaultValue;
                }
                else
                {
                    if (!defaultValue.Equals(currentDefaultValue))
                    {
                        dirty = true;
                        metaData.DefaultValue = currentDefaultValue;
                    }
                }
            }

            //enumeration type
            if (variable.DataType.GetTypeOfArrayElement().IsInteger())
            {
                var enumerationType = GetSelectedEnumerationType();
                if (metaData.EnumerationType != enumerationType)
                {
                    dirty = true;
                }
                metaData.EnumerationType = enumerationType;
            }
            else if (variable.DataType.IsFunction())
            {
                int functionTypeIndex = GetSelectedFunctionType();
                if (metaData.FuncTypeIndex != functionTypeIndex)
                {
                    dirty = true;
                }
                metaData.FuncTypeIndex = functionTypeIndex;
            }

            string description = DescriptionTextBox.Text;

            if (String.IsNullOrEmpty(description))
            {
                description = null;
            }
            if (metaData.Description != description)
            {
                dirty = true;
            }
            metaData.Description = description;

            //set the member
            if (metaData.DefaultValue == null && metaData.Description == null && metaData.EnumerationType == null && metaData.ReplacementName == null && metaData.FuncTypeIndex == -1)
            {
                if (ainFile.MetadataFile.Metadata.ContainsKey(variable))
                {
                    ainFile.MetadataFile.Metadata.Remove(variable);
                }
            }
            else
            {
                ainFile.MetadataFile.Metadata.Set(variable, metaData);
            }

            if (dirty)
            {
                ainFile.SaveMetadata();
            }
            return(dirty);
        }