private void UpdateEnumType()
 {
     foreach (ListViewItem item in listViewMembers.Items)
     {
         EnumParserTypeEntry entry = (EnumParserTypeEntry)item.Tag;
         item.Text = entry.Name;
         if (_enumType.IsFlags)
         {
             item.SubItems[1].Text = String.Format("0x{0:X}", entry.Value);
         }
         else
         {
             item.SubItems[1].Text = entry.Value.ToString();
         }
     }
 }
 private void listViewMembers_AfterLabelEdit(object sender, LabelEditEventArgs e)
 {
     if (e.Label != null)
     {
         try
         {
             EnumParserTypeEntry entry = (EnumParserTypeEntry)listViewMembers.Items[e.Item].Tag;
             entry.Name = e.Label;
             propertyGrid.SelectedObject = entry;
         }
         catch (ArgumentException ex)
         {
             MessageBox.Show(this, ex.Message, CANAPE.Properties.Resources.MessageBox_ErrorString,
                             MessageBoxButtons.OK, MessageBoxIcon.Error);
             e.CancelEdit = true;
         }
     }
 }
        private void AddEnumEntryToList(EnumParserTypeEntry entry, bool editName)
        {
            ListViewItem item = listViewMembers.Items.Add(entry.Name);

            if (_enumType.IsFlags)
            {
                item.SubItems.Add(String.Format("0x{0:X}", entry.Value));
            }
            else
            {
                item.SubItems.Add(entry.Value.ToString());
            }
            item.Tag = entry;

            if (editName)
            {
                item.BeginEdit();
            }
        }
        private void addEntryToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (_enumType != null)
            {
                long           value  = 0;
                HashSet <long> values = new HashSet <long>();
                string         name   = GenerateName();

                if (name != null)
                {
                    foreach (EnumParserTypeEntry ent in _enumType.Entries)
                    {
                        if (!values.Contains(ent.Value))
                        {
                            values.Add(ent.Value);
                        }
                    }

                    if (!_enumType.IsFlags)
                    {
                        if (values.Count > 0)
                        {
                            value = values.Max() + 1;
                        }
                    }
                    else
                    {
                        // Find the next positive enum value for simplicity
                        for (value = 1; value < 0x4000000000000001L; value <<= 1)
                        {
                            if (!values.Contains(value))
                            {
                                break;
                            }
                        }
                    }

                    EnumParserTypeEntry entry = new EnumParserTypeEntry(name, value);
                    _enumType.AddEntry(entry);
                    AddEnumEntryToList(entry, true);
                }
            }
        }