MainWindow.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using System;
  2. using Gtk;
  3. using crown_tests.tests;
  4. using Newtonsoft.Json;
  5. using crown_tests.GtkExt;
  6. using crown_tests.ViewModels;
  7. namespace crown_tests
  8. {
  9. public partial class MainWindow : Gtk.Window
  10. {
  11. private TestContainer mContainer;
  12. public MainWindow() :
  13. base(Gtk.WindowType.Toplevel)
  14. {
  15. this.Build();
  16. //Set the ViewModels for each widget
  17. var crownTestsViewModel = new CrownTestsViewModel();
  18. BindingEngine.SetViewModel(this, crownTestsViewModel);
  19. //txtTestFolder and txtCrownTestsExe automatically inherit the view model of the MainWindow because it has not been not specified
  20. //Create and Apply templates for each widget
  21. Templating.ApplyTemplate(twTests,
  22. new TreeViewTemplate()
  23. .AddColumn("Name", new Gtk.CellRendererText())
  24. .AddColumn("State", new Gtk.CellRendererText())
  25. .AddRowTemplate(TreeViewRowTemplate.Create(typeof(TestCategory))
  26. .SetBinding("Name", "Name"))
  27. .AddRowTemplate(TreeViewRowTemplate.Create(typeof(Test))
  28. .SetBinding("Name", "Name")
  29. .SetBinding("State", "LastResult")));
  30. Templating.ApplyTemplate(txtTestFolder,
  31. new EntryTemplate().SetTextBinding("TestFolder"));
  32. Templating.ApplyTemplate(txtCrownTestsExe,
  33. new EntryTemplate().SetTextBinding("CrownTestsExe"));
  34. LoadTestsData();
  35. }
  36. protected void OnDeleteEvent(object sender, DeleteEventArgs a)
  37. {
  38. Application.Quit();
  39. a.RetVal = true;
  40. }
  41. #region "My Code"
  42. private void btnCreate_Click(object o, EventArgs args)
  43. {
  44. var creator = new TestSourceCreator(mContainer, txtTestFolder.Text);
  45. creator.Create();
  46. }
  47. private void btnExecute_Click(object o, EventArgs args)
  48. {
  49. var executor = new TestExecutor(mContainer, txtCrownTestsExe.Text);
  50. executor.ExecuteAll();
  51. }
  52. private void LoadTestsData()
  53. {
  54. var testsJsonFullfileName = System.IO.Path.Combine(txtTestFolder.Text, "tests.json");
  55. if (!System.IO.File.Exists(testsJsonFullfileName)) {
  56. Console.WriteLine("Could not find test data: " + testsJsonFullfileName);
  57. return;
  58. }
  59. mContainer = JsonConvert.DeserializeObject<TestContainer>(System.IO.File.ReadAllText(testsJsonFullfileName));
  60. RefreshData();
  61. }
  62. private void RefreshData()
  63. {
  64. var treeStore = twTests.Model as Gtk.TreeStore;
  65. if (treeStore == null)
  66. treeStore = new Gtk.TreeStore(typeof(object));
  67. treeStore.Clear();
  68. foreach (var category in mContainer.Categories) {
  69. var iter = treeStore.AppendValues(category);
  70. foreach (var test in category.Tests) {
  71. treeStore.AppendValues(iter, test);
  72. }
  73. }
  74. twTests.Model = treeStore;
  75. }
  76. #endregion
  77. }
  78. }