private void tsmiAddDefinition_Click(object sender, EventArgs e) { var definitionViewItem = new DefinitionViewItem(); lvDefinitions.Items.Add(definitionViewItem); using (var dialog = new EditWordDefinitionForm(WordInfo.Entries.Count, tbInputWord.Text)) { if (dialog.ShowDialog() != DialogResult.OK || string.IsNullOrWhiteSpace(dialog.Definition)) { RemoveDefinitionViewItem(definitionViewItem); return; } ProcessEditWordDefinitionDialog(dialog); var definition = new CambridgeWordInfo.Block() { Definition = dialog.Definition }; WordInfo.Entries[dialog.EntryIndex].Definitions.Add(definition); WordInfo.Entries[dialog.EntryIndex].Label = dialog.Label; definitionViewItem.EntryIndex = dialog.EntryIndex; definitionViewItem.DefinitionIndex = WordInfo.Entries[dialog.EntryIndex].Definitions.Count - 1; definitionViewItem.Tag = lvDefinitions.Items.Count - 1; definitionViewItem.WordInfo = WordInfo; ChangeMade = true; } }
private void RemoveDefinitionViewItem(DefinitionViewItem definitionViewItem) { var entryIndex = definitionViewItem.EntryIndex; var definitionIndex = definitionViewItem.DefinitionIndex; WordInfo.Entries[entryIndex].Definitions.RemoveAt(definitionIndex); lvDefinitions.Items.Remove(definitionViewItem); if (WordInfo.Entries[entryIndex].Definitions.Count == 0) { WordInfo.Entries.RemoveAt(entryIndex); } for (int currentIndex = 0; currentIndex < lvDefinitions.Items.Count; currentIndex++) { definitionViewItem = lvDefinitions.Items[currentIndex] as DefinitionViewItem; var currentEntryIndex = definitionViewItem.EntryIndex; if (currentEntryIndex > entryIndex) { definitionViewItem.EntryIndex--; } var currentDefinitionIndex = definitionViewItem.DefinitionIndex; if (currentDefinitionIndex > definitionIndex) { definitionViewItem.DefinitionIndex--; } } if (lvExamples.Items.Count > 0 && (lvExamples.Items[0] as ExampleViewItem).DefinitionIndex == definitionIndex) { lvExamples.Items.Clear(); } rtbOutput.Text = string.Empty; ChangeMade = true; }