Explorar o código

Converted crown-tests tool to stetic

Dexter89 %!s(int64=12) %!d(string=hai) anos
pai
achega
53454599f2

+ 0 - 1
tools/gui/console/console.csproj

@@ -53,7 +53,6 @@
     <Reference Include="Mono.Posix" />
     <Reference Include="Newtonsoft.Json">
       <HintPath>..\..\..\..\..\Desktop\Net35\Newtonsoft.Json.dll</HintPath>
-      <Package>monodevelop</Package>
     </Reference>
   </ItemGroup>
   <ItemGroup>

+ 72 - 112
tools/gui/crown-tests/MainWindow.cs

@@ -1,118 +1,78 @@
 using System;
 using Gtk;
-using Newtonsoft.Json;
 using crown_tests.tests;
+using Newtonsoft.Json;
 
-public partial class MainWindow : Gtk.Window
+namespace crown_tests
 {
-  Gtk.TreeStore mTreeStore;
-  Gtk.TreeView mTreeView;
-  Gtk.Entry mEntryTestFolder;
-  Gtk.Entry mEntryCrownTestsExe;
-
-  private TestContainer mContainer;
-
-  public MainWindow(): base(Gtk.WindowType.Toplevel)
-  {
-    //Glade.XML gxml = new Glade.XML("main1.glade", "MyWindow", null);
-    //gxml.Autoconnect(this);
-    Title = "Test Browser";
-    SetSizeRequest(500, 300);
-
-    var table = new Gtk.Table(2, 2, false);
-
-    var configTable = new Gtk.Table(1, 1, false);
-    configTable.RowSpacing = 2;
-    configTable.ColumnSpacing = 2;
-    mEntryTestFolder = new Gtk.Entry();
-    configTable.Attach(mEntryTestFolder, 1, 2, 0, 1);
-    mEntryCrownTestsExe = new Gtk.Entry();
-    configTable.Attach(mEntryCrownTestsExe, 1, 2, 1, 2);
-    var label1 = new Gtk.Label("Tests folder");
-    configTable.Attach(label1, 0, 1, 0, 1, AttachOptions.Shrink, AttachOptions.Shrink, 0, 0);
-    var label2 = new Gtk.Label("crown-tests executable");
-    configTable.Attach(label2, 0, 1, 1, 2, AttachOptions.Shrink, AttachOptions.Shrink, 0, 0);
-    table.Attach(configTable, 0, 2, 0, 1, AttachOptions.Expand | AttachOptions.Fill, AttachOptions.Shrink, 10, 10);
-    
-    mTreeView = new Gtk.TreeView();
-    mTreeView.AppendColumn("Name", new Gtk.CellRendererText(), "text", 0);
-    mTreeView.AppendColumn("State", new Gtk.CellRendererText(), "text", 1);
-    //treeview1.AppendColumn("Description", new Gtk.CellRendererText(), "text", 1);
-    
-    table.Attach(mTreeView, 0, 1, 1, 2);
-
-    var frameAlign = new Gtk.Alignment(0, 0, 0, 0);
-    var frame = new Gtk.Frame("Operations");
-    var frameContentVBox = new Gtk.VBox();
-    frame.Child = frameContentVBox;
-    frame.WidthRequest = 120;
-
-    Gtk.Button btnCreate = new Gtk.Button();
-    btnCreate.Label = "Create";
-    btnCreate.Clicked += btnCreate_Click;
-    //table.Attach(btnCreate, 1, 2, 1, 2, AttachOptions.Shrink, AttachOptions.Shrink, 0, 0);
-    frameContentVBox.PackStart(btnCreate);
-
-    Gtk.Button btnExecute = new Gtk.Button();
-    btnExecute.Label = "Execute";
-    btnExecute.Clicked += btnExecute_Click;
-    //table.Attach(btnExecute, 1, 2, 2, 3, AttachOptions.Shrink, AttachOptions.Shrink, 0, 0);
-    frameContentVBox.PackStart(btnExecute);
-    frameAlign.Child = frame;
-    table.Attach(frameAlign, 1, 2, 1, 2, AttachOptions.Shrink, AttachOptions.Expand | AttachOptions.Fill, 10, 0);
-
-    Add(table);
-
-    LoadConfigData();
-    LoadTestsData();
-  }
-
-  private void btnCreate_Click(object o, EventArgs args)
-  {
-    var creator = new TestSourceCreator(mContainer, mEntryTestFolder.Text);
-    creator.Create();
-  }
-
-  private void btnExecute_Click(object o, EventArgs args)
-  {
-    var executor = new TestExecutor(mContainer, mEntryCrownTestsExe.Text);
-    executor.ExecuteAll();
-    RefreshData();
-  }
-
-  private void LoadConfigData()
-  {
-    mEntryTestFolder.Text = @"..\..\..\..\..\tests\";
-    mEntryCrownTestsExe.Text = @"..\..\..\..\..\build\tests\Debug\crown-tests.exe";
-  }
-
-  private void LoadTestsData()
-  {
-    var testsJsonFullfileName = System.IO.Path.Combine(mEntryTestFolder.Text, "tests.json");
-    mContainer = JsonConvert.DeserializeObject<TestContainer>(System.IO.File.ReadAllText(testsJsonFullfileName));
-
-    RefreshData();
-  }
-
-  private void RefreshData()
-  {
-    mTreeStore = new Gtk.TreeStore(typeof(string), typeof(string));
-    //mTreeStore.Clear();
-    foreach (var category in mContainer.Categories)
-    {
-      var iter = mTreeStore.AppendValues(category.Name);
-      foreach (var test in category.Tests)
-      {
-        mTreeStore.AppendValues(iter, test.Name, test.LastResult == 0 ? "Passed" : "Failed");
-      }
-    }
-
-    mTreeView.Model = mTreeStore;
-  }
+	public partial class MainWindow : Gtk.Window
+	{
+		private TestContainer mContainer;
+
+		public MainWindow () : 
+			base (Gtk.WindowType.Toplevel)
+		{
+			this.Build ();
+
+			twTests.AppendColumn("Name", new Gtk.CellRendererText(), "text", 0);
+			twTests.AppendColumn("State", new Gtk.CellRendererText(), "text", 1);
+
+			LoadConfigData ();
+			LoadTestsData ();
+		}
+
+		protected void OnDeleteEvent (object sender, DeleteEventArgs a)
+		{
+			Application.Quit ();
+			a.RetVal = true;
+		}
+
+		#region "My Code"
+		private void btnCreate_Click(object o, EventArgs args)
+		{
+			var creator = new TestSourceCreator(mContainer, txtTestFolder.Text);
+			creator.Create();
+		}
+
+		private void btnExecute_Click(object o, EventArgs args)
+		{
+			var executor = new TestExecutor(mContainer, txtCrownTestsExe.Text);
+			executor.ExecuteAll();
+			RefreshData();
+		}
+
+		private void LoadConfigData()
+		{
+			txtTestFolder.Text = @"..\..\..\..\..\tests\";
+			txtCrownTestsExe.Text = @"..\..\..\..\..\build\tests\Debug\crown-tests.exe";
+		}
+
+		private void LoadTestsData()
+		{
+			var testsJsonFullfileName = System.IO.Path.Combine(txtTestFolder.Text, "tests.json");
+			mContainer = JsonConvert.DeserializeObject<TestContainer>(System.IO.File.ReadAllText(testsJsonFullfileName));
+
+			RefreshData();
+		}
+
+		private void RefreshData()
+		{
+			var treeStore = twTests.Model as Gtk.TreeStore; // new Gtk.TreeStore(typeof(string), typeof(string));
+			if (treeStore == null)
+				treeStore = new Gtk.TreeStore(typeof(string), typeof(string));
+			treeStore.Clear();
+			foreach (var category in mContainer.Categories)
+			{
+				var iter = treeStore.AppendValues(category.Name);
+				foreach (var test in category.Tests)
+				{
+					treeStore.AppendValues(iter, test.Name, test.LastResult == 0 ? "Passed" : "Failed");
+				}
+			}
+
+			twTests.Model = treeStore;
+		}
+		#endregion
+	}
+}
 
-  protected override bool OnDeleteEvent(Gdk.Event evnt)
-  {
-    Application.Quit();
-    return base.OnDeleteEvent(evnt);
-  }
-}

+ 1 - 1
tools/gui/crown-tests/Program.cs

@@ -9,7 +9,7 @@ namespace crown_tests
     public static void Main(string[] args)
     {
       Application.Init();
-      MainWindow win = new MainWindow();
+      var win = new MainWindow();
       win.ShowAll();
       Application.Run();
     }

+ 10 - 1
tools/gui/crown-tests/crown-tests.csproj

@@ -12,6 +12,8 @@
     <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
     <TargetFrameworkProfile />
+    <ProductVersion>12.0.0</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <PlatformTarget>x86</PlatformTarget>
@@ -58,7 +60,6 @@
     <Reference Include="Mono.Posix" />
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="MainWindow.cs" />
     <Compile Include="Program.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="tests\Test.cs" />
@@ -66,6 +67,9 @@
     <Compile Include="tests\TestContainer.cs" />
     <Compile Include="tests\TestExecutor.cs" />
     <Compile Include="tests\TestSourceCreator.cs" />
+    <Compile Include="gtk-gui\generated.cs" />
+    <Compile Include="gtk-gui\crown_tests.MainWindow.cs" />
+    <Compile Include="MainWindow.cs" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
@@ -75,4 +79,9 @@
   <Target Name="AfterBuild">
   </Target>
   -->
+  <ItemGroup>
+    <EmbeddedResource Include="gtk-gui\gui.stetic">
+      <LogicalName>gui.stetic</LogicalName>
+    </EmbeddedResource>
+  </ItemGroup>
 </Project>

+ 170 - 0
tools/gui/crown-tests/gtk-gui/crown_tests.MainWindow.cs

@@ -0,0 +1,170 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace crown_tests
+{
+	public partial class MainWindow
+	{
+		private global::Gtk.VBox vbox1;
+		private global::Gtk.Table table1;
+		private global::Gtk.Label label1;
+		private global::Gtk.Label label2;
+		private global::Gtk.Entry txtCrownTestsExe;
+		private global::Gtk.Entry txtTestFolder;
+		private global::Gtk.HBox hbox2;
+		private global::Gtk.ScrolledWindow GtkScrolledWindow;
+		private global::Gtk.TreeView twTests;
+		private global::Gtk.Alignment alignment1;
+		private global::Gtk.Frame frame1;
+		private global::Gtk.Alignment GtkAlignment;
+		private global::Gtk.VBox vbox3;
+		private global::Gtk.Button btnCreate;
+		private global::Gtk.Button btnExecute;
+		private global::Gtk.Label GtkLabel1;
+
+		protected virtual void Build ()
+		{
+			global::Stetic.Gui.Initialize (this);
+			// Widget crown_tests.MainWindow
+			this.Name = "crown_tests.MainWindow";
+			this.Title = global::Mono.Unix.Catalog.GetString ("Test Browser");
+			this.WindowPosition = ((global::Gtk.WindowPosition)(4));
+			// Container child crown_tests.MainWindow.Gtk.Container+ContainerChild
+			this.vbox1 = new global::Gtk.VBox ();
+			this.vbox1.Name = "vbox1";
+			this.vbox1.Spacing = 6;
+			this.vbox1.BorderWidth = ((uint)(6));
+			// Container child vbox1.Gtk.Box+BoxChild
+			this.table1 = new global::Gtk.Table (((uint)(2)), ((uint)(2)), false);
+			this.table1.Name = "table1";
+			this.table1.RowSpacing = ((uint)(6));
+			this.table1.ColumnSpacing = ((uint)(6));
+			// Container child table1.Gtk.Table+TableChild
+			this.label1 = new global::Gtk.Label ();
+			this.label1.Name = "label1";
+			this.label1.LabelProp = global::Mono.Unix.Catalog.GetString ("Tests folder");
+			this.table1.Add (this.label1);
+			global::Gtk.Table.TableChild w1 = ((global::Gtk.Table.TableChild)(this.table1 [this.label1]));
+			w1.XOptions = ((global::Gtk.AttachOptions)(4));
+			w1.YOptions = ((global::Gtk.AttachOptions)(4));
+			// Container child table1.Gtk.Table+TableChild
+			this.label2 = new global::Gtk.Label ();
+			this.label2.Name = "label2";
+			this.label2.LabelProp = global::Mono.Unix.Catalog.GetString ("crown-tests executable");
+			this.table1.Add (this.label2);
+			global::Gtk.Table.TableChild w2 = ((global::Gtk.Table.TableChild)(this.table1 [this.label2]));
+			w2.TopAttach = ((uint)(1));
+			w2.BottomAttach = ((uint)(2));
+			w2.XOptions = ((global::Gtk.AttachOptions)(4));
+			w2.YOptions = ((global::Gtk.AttachOptions)(4));
+			// Container child table1.Gtk.Table+TableChild
+			this.txtCrownTestsExe = new global::Gtk.Entry ();
+			this.txtCrownTestsExe.CanFocus = true;
+			this.txtCrownTestsExe.Name = "txtCrownTestsExe";
+			this.txtCrownTestsExe.IsEditable = true;
+			this.txtCrownTestsExe.InvisibleChar = '●';
+			this.table1.Add (this.txtCrownTestsExe);
+			global::Gtk.Table.TableChild w3 = ((global::Gtk.Table.TableChild)(this.table1 [this.txtCrownTestsExe]));
+			w3.TopAttach = ((uint)(1));
+			w3.BottomAttach = ((uint)(2));
+			w3.LeftAttach = ((uint)(1));
+			w3.RightAttach = ((uint)(2));
+			w3.YOptions = ((global::Gtk.AttachOptions)(4));
+			// Container child table1.Gtk.Table+TableChild
+			this.txtTestFolder = new global::Gtk.Entry ();
+			this.txtTestFolder.CanFocus = true;
+			this.txtTestFolder.Name = "txtTestFolder";
+			this.txtTestFolder.IsEditable = true;
+			this.txtTestFolder.InvisibleChar = '●';
+			this.table1.Add (this.txtTestFolder);
+			global::Gtk.Table.TableChild w4 = ((global::Gtk.Table.TableChild)(this.table1 [this.txtTestFolder]));
+			w4.LeftAttach = ((uint)(1));
+			w4.RightAttach = ((uint)(2));
+			w4.YOptions = ((global::Gtk.AttachOptions)(4));
+			this.vbox1.Add (this.table1);
+			global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.vbox1 [this.table1]));
+			w5.Position = 0;
+			w5.Expand = false;
+			w5.Fill = false;
+			// Container child vbox1.Gtk.Box+BoxChild
+			this.hbox2 = new global::Gtk.HBox ();
+			this.hbox2.Name = "hbox2";
+			this.hbox2.Spacing = 6;
+			// Container child hbox2.Gtk.Box+BoxChild
+			this.GtkScrolledWindow = new global::Gtk.ScrolledWindow ();
+			this.GtkScrolledWindow.Name = "GtkScrolledWindow";
+			this.GtkScrolledWindow.ShadowType = ((global::Gtk.ShadowType)(1));
+			// Container child GtkScrolledWindow.Gtk.Container+ContainerChild
+			this.twTests = new global::Gtk.TreeView ();
+			this.twTests.CanFocus = true;
+			this.twTests.Name = "twTests";
+			this.GtkScrolledWindow.Add (this.twTests);
+			this.hbox2.Add (this.GtkScrolledWindow);
+			global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.hbox2 [this.GtkScrolledWindow]));
+			w7.Position = 0;
+			// Container child hbox2.Gtk.Box+BoxChild
+			this.alignment1 = new global::Gtk.Alignment (0F, 0F, 1F, 1F);
+			this.alignment1.Name = "alignment1";
+			// Container child alignment1.Gtk.Container+ContainerChild
+			this.frame1 = new global::Gtk.Frame ();
+			this.frame1.WidthRequest = 120;
+			this.frame1.Name = "frame1";
+			this.frame1.ShadowType = ((global::Gtk.ShadowType)(0));
+			// Container child frame1.Gtk.Container+ContainerChild
+			this.GtkAlignment = new global::Gtk.Alignment (0F, 0F, 1F, 1F);
+			this.GtkAlignment.Name = "GtkAlignment";
+			this.GtkAlignment.LeftPadding = ((uint)(12));
+			// Container child GtkAlignment.Gtk.Container+ContainerChild
+			this.vbox3 = new global::Gtk.VBox ();
+			this.vbox3.Name = "vbox3";
+			this.vbox3.Spacing = 6;
+			// Container child vbox3.Gtk.Box+BoxChild
+			this.btnCreate = new global::Gtk.Button ();
+			this.btnCreate.CanFocus = true;
+			this.btnCreate.Name = "btnCreate";
+			this.btnCreate.UseUnderline = true;
+			this.btnCreate.Label = global::Mono.Unix.Catalog.GetString ("Create");
+			this.vbox3.Add (this.btnCreate);
+			global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.vbox3 [this.btnCreate]));
+			w8.Position = 0;
+			w8.Expand = false;
+			w8.Fill = false;
+			// Container child vbox3.Gtk.Box+BoxChild
+			this.btnExecute = new global::Gtk.Button ();
+			this.btnExecute.CanFocus = true;
+			this.btnExecute.Name = "btnExecute";
+			this.btnExecute.UseUnderline = true;
+			this.btnExecute.Label = global::Mono.Unix.Catalog.GetString ("Execute");
+			this.vbox3.Add (this.btnExecute);
+			global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.vbox3 [this.btnExecute]));
+			w9.Position = 1;
+			w9.Expand = false;
+			w9.Fill = false;
+			this.GtkAlignment.Add (this.vbox3);
+			this.frame1.Add (this.GtkAlignment);
+			this.GtkLabel1 = new global::Gtk.Label ();
+			this.GtkLabel1.Name = "GtkLabel1";
+			this.GtkLabel1.LabelProp = global::Mono.Unix.Catalog.GetString ("Operations");
+			this.GtkLabel1.UseMarkup = true;
+			this.frame1.LabelWidget = this.GtkLabel1;
+			this.alignment1.Add (this.frame1);
+			this.hbox2.Add (this.alignment1);
+			global::Gtk.Box.BoxChild w13 = ((global::Gtk.Box.BoxChild)(this.hbox2 [this.alignment1]));
+			w13.Position = 1;
+			w13.Expand = false;
+			w13.Fill = false;
+			this.vbox1.Add (this.hbox2);
+			global::Gtk.Box.BoxChild w14 = ((global::Gtk.Box.BoxChild)(this.vbox1 [this.hbox2]));
+			w14.Position = 1;
+			this.Add (this.vbox1);
+			if ((this.Child != null)) {
+				this.Child.ShowAll ();
+			}
+			this.DefaultWidth = 400;
+			this.DefaultHeight = 300;
+			this.Show ();
+			this.DeleteEvent += new global::Gtk.DeleteEventHandler (this.OnDeleteEvent);
+			this.btnCreate.Clicked += new global::System.EventHandler (this.btnCreate_Click);
+			this.btnExecute.Clicked += new global::System.EventHandler (this.btnExecute_Click);
+		}
+	}
+}

+ 29 - 0
tools/gui/crown-tests/gtk-gui/generated.cs

@@ -0,0 +1,29 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace Stetic
+{
+	internal class Gui
+	{
+		private static bool initialized;
+
+		internal static void Initialize (Gtk.Widget iconRenderer)
+		{
+			if ((Stetic.Gui.initialized == false)) {
+				Stetic.Gui.initialized = true;
+			}
+		}
+	}
+
+	internal class ActionGroups
+	{
+		public static Gtk.ActionGroup GetActionGroup (System.Type type)
+		{
+			return Stetic.ActionGroups.GetActionGroup (type.FullName);
+		}
+
+		public static Gtk.ActionGroup GetActionGroup (string name)
+		{
+			return null;
+		}
+	}
+}

+ 219 - 0
tools/gui/crown-tests/gtk-gui/gui.stetic

@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="utf-8"?>
+<stetic-interface>
+  <configuration>
+    <images-root-path>..</images-root-path>
+  </configuration>
+  <import>
+    <widget-library name="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <widget-library name="../bin/Debug/crown-tests.exe" internal="true" />
+  </import>
+  <widget class="Gtk.Window" id="crown_tests.MainWindow" design-size="400 300">
+    <property name="MemberName" />
+    <property name="Title" translatable="yes">Test Browser</property>
+    <property name="WindowPosition">CenterOnParent</property>
+    <signal name="DeleteEvent" handler="OnDeleteEvent" />
+    <child>
+      <widget class="Gtk.VBox" id="vbox1">
+        <property name="MemberName" />
+        <property name="Spacing">6</property>
+        <property name="BorderWidth">6</property>
+        <child>
+          <widget class="Gtk.Table" id="table1">
+            <property name="MemberName" />
+            <property name="NRows">2</property>
+            <property name="NColumns">2</property>
+            <property name="RowSpacing">6</property>
+            <property name="ColumnSpacing">6</property>
+            <child>
+              <widget class="Gtk.Label" id="label1">
+                <property name="MemberName" />
+                <property name="LabelProp" translatable="yes">Tests folder</property>
+              </widget>
+              <packing>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">False</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Label" id="label2">
+                <property name="MemberName" />
+                <property name="LabelProp" translatable="yes">crown-tests executable</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">1</property>
+                <property name="BottomAttach">2</property>
+                <property name="AutoSize">False</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">False</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Entry" id="txtCrownTestsExe">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="IsEditable">True</property>
+                <property name="InvisibleChar">●</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">1</property>
+                <property name="BottomAttach">2</property>
+                <property name="LeftAttach">1</property>
+                <property name="RightAttach">2</property>
+                <property name="AutoSize">True</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">True</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">False</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Entry" id="txtTestFolder">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="IsEditable">True</property>
+                <property name="InvisibleChar">●</property>
+              </widget>
+              <packing>
+                <property name="LeftAttach">1</property>
+                <property name="RightAttach">2</property>
+                <property name="AutoSize">True</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">True</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">False</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="Position">0</property>
+            <property name="AutoSize">True</property>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.HBox" id="hbox2">
+            <property name="MemberName" />
+            <property name="Spacing">6</property>
+            <child>
+              <widget class="Gtk.ScrolledWindow" id="GtkScrolledWindow">
+                <property name="MemberName" />
+                <property name="ShadowType">In</property>
+                <child>
+                  <widget class="Gtk.TreeView" id="twTests">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="ShowScrollbars">True</property>
+                  </widget>
+                </child>
+              </widget>
+              <packing>
+                <property name="Position">0</property>
+                <property name="AutoSize">True</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Alignment" id="alignment1">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="Yalign">0</property>
+                <child>
+                  <widget class="Gtk.Frame" id="frame1">
+                    <property name="MemberName" />
+                    <property name="WidthRequest">120</property>
+                    <property name="ShadowType">None</property>
+                    <child>
+                      <widget class="Gtk.Alignment" id="GtkAlignment">
+                        <property name="MemberName" />
+                        <property name="Xalign">0</property>
+                        <property name="Yalign">0</property>
+                        <property name="LeftPadding">12</property>
+                        <child>
+                          <widget class="Gtk.VBox" id="vbox3">
+                            <property name="MemberName" />
+                            <property name="Spacing">6</property>
+                            <child>
+                              <widget class="Gtk.Button" id="btnCreate">
+                                <property name="MemberName" />
+                                <property name="CanFocus">True</property>
+                                <property name="Type">TextOnly</property>
+                                <property name="Label" translatable="yes">Create</property>
+                                <property name="UseUnderline">True</property>
+                                <signal name="Clicked" handler="btnCreate_Click" />
+                              </widget>
+                              <packing>
+                                <property name="Position">0</property>
+                                <property name="AutoSize">True</property>
+                                <property name="Expand">False</property>
+                                <property name="Fill">False</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="Gtk.Button" id="btnExecute">
+                                <property name="MemberName" />
+                                <property name="CanFocus">True</property>
+                                <property name="Type">TextOnly</property>
+                                <property name="Label" translatable="yes">Execute</property>
+                                <property name="UseUnderline">True</property>
+                                <signal name="Clicked" handler="btnExecute_Click" />
+                              </widget>
+                              <packing>
+                                <property name="Position">1</property>
+                                <property name="AutoSize">True</property>
+                                <property name="Expand">False</property>
+                                <property name="Fill">False</property>
+                              </packing>
+                            </child>
+                          </widget>
+                        </child>
+                      </widget>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Label" id="GtkLabel1">
+                        <property name="MemberName" />
+                        <property name="LabelProp" translatable="yes">Operations</property>
+                        <property name="UseMarkup">True</property>
+                      </widget>
+                      <packing>
+                        <property name="type">label_item</property>
+                      </packing>
+                    </child>
+                  </widget>
+                </child>
+              </widget>
+              <packing>
+                <property name="Position">1</property>
+                <property name="AutoSize">True</property>
+                <property name="Expand">False</property>
+                <property name="Fill">False</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="Position">1</property>
+            <property name="AutoSize">False</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+</stetic-interface>

+ 29 - 13
tools/gui/toolbox.sln

@@ -17,16 +17,6 @@ Global
 		Release|x86 = Release|x86
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Debug|Any CPU.ActiveCfg = Debug|x86
-		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
-		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Debug|Mixed Platforms.Build.0 = Debug|x86
-		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Debug|x86.ActiveCfg = Debug|x86
-		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Debug|x86.Build.0 = Debug|x86
-		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Release|Any CPU.ActiveCfg = Release|x86
-		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Release|Mixed Platforms.ActiveCfg = Release|x86
-		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Release|Mixed Platforms.Build.0 = Release|x86
-		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Release|x86.ActiveCfg = Release|x86
-		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Release|x86.Build.0 = Release|x86
 		{1307AAA0-BFB8-494C-83CB-A4171C2E87F1}.Debug|Any CPU.ActiveCfg = Debug|x86
 		{1307AAA0-BFB8-494C-83CB-A4171C2E87F1}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
 		{1307AAA0-BFB8-494C-83CB-A4171C2E87F1}.Debug|Mixed Platforms.Build.0 = Debug|x86
@@ -47,11 +37,37 @@ Global
 		{4E5F6C4E-8C96-4903-B6AE-5C9ADCFC2C20}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
 		{4E5F6C4E-8C96-4903-B6AE-5C9ADCFC2C20}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{4E5F6C4E-8C96-4903-B6AE-5C9ADCFC2C20}.Release|x86.ActiveCfg = Release|Any CPU
+		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Debug|x86.ActiveCfg = Debug|x86
+		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Debug|x86.Build.0 = Debug|x86
+		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Release|Any CPU.ActiveCfg = Release|x86
+		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Release|Mixed Platforms.Build.0 = Release|x86
+		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Release|x86.ActiveCfg = Release|x86
+		{7FF1E014-7560-481E-B919-080C42F4C6EC}.Release|x86.Build.0 = Release|x86
+	EndGlobalSection
+	GlobalSection(MonoDevelopProperties) = preSolution
+		StartupItem = crown-tests\crown-tests.csproj
+		Policies = $0
+		$0.TextStylePolicy = $1
+		$1.inheritsSet = null
+		$1.scope = text/x-csharp
+		$0.CSharpFormattingPolicy = $2
+		$2.AfterDelegateDeclarationParameterComma = True
+		$2.inheritsSet = Mono
+		$2.inheritsScope = text/x-csharp
+		$2.scope = text/x-csharp
+		$0.TextStylePolicy = $3
+		$3.FileWidth = 120
+		$3.TabWidth = 2
+		$3.IndentWidth = 2
+		$3.inheritsSet = Mono
+		$3.inheritsScope = text/plain
+		$3.scope = text/plain
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 	EndGlobalSection
-	GlobalSection(MonoDevelopProperties) = preSolution
-		StartupItem = console\console.csproj
-	EndGlobalSection
 EndGlobal