14 using System.Collections.Generic;
15 using System.ComponentModel;
20 using System.Windows.Forms;
21 using System.Reflection;
25 namespace Irony.GrammarExplorer {
28 InitializeComponent();
32 var fromGrammars = LoadGrammars(assemblyPath);
33 if (fromGrammars == null)
37 var listbox = form.lstGrammars;
38 listbox.Sorted =
false;
40 listbox.Items.Add(item);
41 if (!ContainsGrammar(loadedGrammars, item))
42 listbox.SetItemChecked(listbox.Items.Count - 1,
true);
44 listbox.Sorted =
true;
46 if (form.ShowDialog() != DialogResult.OK)
return null;
48 for (
int i = 0; i < listbox.Items.Count; i++) {
49 if (listbox.GetItemChecked(i)) {
51 item._loading =
false;
62 asm = Assembly.LoadFrom(assemblyPath);
66 MessageBox.Show(
"Failed to load assembly: " + ex.Message);
69 var types = asm.GetTypes();
70 var grammars =
new GrammarItemList();
71 foreach (Type t
in types) {
72 if (!t.IsSubclassOf(typeof(
Parsing.Grammar)))
continue;
73 grammars.Add(
new GrammarItem(t, assemblyPath));
75 if (grammars.Count == 0) {
76 MessageBox.Show(
"No classes derived from Irony.Grammar were found in the assembly.");
82 private static bool ContainsGrammar(GrammarItemList items, GrammarItem item) {
83 foreach (var listItem
in items)
84 if (listItem.TypeName == item.TypeName && listItem.Location == item.Location)
89 private void btnCheckUncheck_Click(
object sender,
EventArgs e) {
90 bool check = sender == btnCheckAll;
91 for (
int i = 0; i < lstGrammars.Items.Count; i++)
92 lstGrammars.SetItemChecked(i, check);
static GrammarItemList SelectGrammars(string assemblyPath, GrammarItemList loadedGrammars)