Selaa lähdekoodia

add CSharp version of the UIPeriodicTable

JimMarlowe 8 vuotta sitten
vanhempi
sitoutus
319ff5aa6e
100 muutettua tiedostoa jossa 3985 lisäystä ja 0 poistoa
  1. 13 0
      UIPeriodicTable/CSharp/Resources/Components/Spinner.cs
  2. 175 0
      UIPeriodicTable/CSharp/Resources/Components/code_table.cs
  3. 32 0
      UIPeriodicTable/CSharp/Resources/Components/code_uibargraph.cs
  4. 48 0
      UIPeriodicTable/CSharp/Resources/Components/code_uibutton.cs
  5. 54 0
      UIPeriodicTable/CSharp/Resources/Components/code_uicheckbox.cs
  6. 45 0
      UIPeriodicTable/CSharp/Resources/Components/code_uiclicklabel.cs
  7. 42 0
      UIPeriodicTable/CSharp/Resources/Components/code_uicolorwheel.cs
  8. 51 0
      UIPeriodicTable/CSharp/Resources/Components/code_uicolorwidget.cs
  9. 32 0
      UIPeriodicTable/CSharp/Resources/Components/code_uicontainer.cs
  10. 65 0
      UIPeriodicTable/CSharp/Resources/Components/code_uieditfield.cs
  11. 53 0
      UIPeriodicTable/CSharp/Resources/Components/code_uifinderwindow.cs
  12. 49 0
      UIPeriodicTable/CSharp/Resources/Components/code_uifontdescription.cs
  13. 43 0
      UIPeriodicTable/CSharp/Resources/Components/code_uiimagewidget.cs
  14. 55 0
      UIPeriodicTable/CSharp/Resources/Components/code_uiinlineselect.cs
  15. 300 0
      UIPeriodicTable/CSharp/Resources/Components/code_uilayout.cs
  16. 32 0
      UIPeriodicTable/CSharp/Resources/Components/code_uilayoutparams.cs
  17. 74 0
      UIPeriodicTable/CSharp/Resources/Components/code_uimenuitem.cs
  18. 55 0
      UIPeriodicTable/CSharp/Resources/Components/code_uimenuwindow.cs
  19. 73 0
      UIPeriodicTable/CSharp/Resources/Components/code_uimessagewindow.cs
  20. 46 0
      UIPeriodicTable/CSharp/Resources/Components/code_uipromptwindow.cs
  21. 57 0
      UIPeriodicTable/CSharp/Resources/Components/code_uipulldownmenu.cs
  22. 54 0
      UIPeriodicTable/CSharp/Resources/Components/code_uiradiobutton.cs
  23. 64 0
      UIPeriodicTable/CSharp/Resources/Components/code_uisceneview.cs
  24. 47 0
      UIPeriodicTable/CSharp/Resources/Components/code_uiscrollbar.cs
  25. 32 0
      UIPeriodicTable/CSharp/Resources/Components/code_uiscrollcontainer.cs
  26. 47 0
      UIPeriodicTable/CSharp/Resources/Components/code_uisection.cs
  27. 47 0
      UIPeriodicTable/CSharp/Resources/Components/code_uiselectdropdown.cs
  28. 94 0
      UIPeriodicTable/CSharp/Resources/Components/code_uiselectitem.cs
  29. 69 0
      UIPeriodicTable/CSharp/Resources/Components/code_uiselectlist.cs
  30. 32 0
      UIPeriodicTable/CSharp/Resources/Components/code_uiseparator.cs
  31. 32 0
      UIPeriodicTable/CSharp/Resources/Components/code_uiskinimage.cs
  32. 48 0
      UIPeriodicTable/CSharp/Resources/Components/code_uislider.cs
  33. 99 0
      UIPeriodicTable/CSharp/Resources/Components/code_uitabcontainer.cs
  34. 32 0
      UIPeriodicTable/CSharp/Resources/Components/code_uitextfield.cs
  35. 91 0
      UIPeriodicTable/CSharp/Resources/Components/code_uitexturewidget.cs
  36. 32 0
      UIPeriodicTable/CSharp/Resources/Components/code_uiwidget.cs
  37. 71 0
      UIPeriodicTable/CSharp/Resources/Components/code_uiwindow.cs
  38. 9 0
      UIPeriodicTable/CSharp/Resources/Materials/planet.material
  39. BIN
      UIPeriodicTable/CSharp/Resources/Models/Sphere.mdl
  40. 14 0
      UIPeriodicTable/CSharp/Resources/Scenes/Scene.scene
  41. 23 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uibargraph.ui.txt
  42. 20 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uibutton.ui.txt
  43. 16 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uicheckbox.ui.txt
  44. 16 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uiclicklabel.ui.txt
  45. 18 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uicolorwheel.ui.txt
  46. 16 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uicolorwidget.ui.txt
  47. 15 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uicontainer.ui.txt
  48. 19 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uieditfield.ui.txt
  49. 13 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uifinderwindow.ui.txt
  50. 20 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uifontdescription.ui.txt
  51. 14 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uiimagewidget.ui.txt
  52. 16 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uiinlineselect.ui.txt
  53. 5 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uilayout.ui.txt
  54. 34 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uilayoutparams.ui.txt
  55. 19 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uimenuitem.ui.txt
  56. 12 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uimenuwindow.ui.txt
  57. 15 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uimessagewindow.ui.txt
  58. 12 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uipromptwindow.ui.txt
  59. 36 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uipulldownmenu.ui.txt
  60. 16 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uiradiobutton.ui.txt
  61. 12 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uisceneview.ui.txt
  62. 14 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uiscrollbar.ui.txt
  63. 26 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uiscrollcontainer.ui.txt
  64. 18 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uisection.ui.txt
  65. 18 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uiselectdropdown.ui.txt
  66. 18 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uiselectitem.ui.txt
  67. 23 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uiselectlist.ui.txt
  68. 17 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uiseparator.ui.txt
  69. 20 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uiskinimage.ui.txt
  70. 13 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uislider.ui.txt
  71. 32 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uitabcontainer.ui.txt
  72. 16 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uitextfield.ui.txt
  73. 12 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uitexturewidget.ui.txt
  74. 14 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uiwidget.ui.txt
  75. 13 0
      UIPeriodicTable/CSharp/Resources/Scenes/layout_uiwindow.ui.txt
  76. 11 0
      UIPeriodicTable/CSharp/Resources/Scenes/login_dialog.ui.txt
  77. 62 0
      UIPeriodicTable/CSharp/Resources/Scenes/main_atomic_layout.ui.txt
  78. 59 0
      UIPeriodicTable/CSharp/Resources/Scenes/main_layout.ui.txt
  79. 69 0
      UIPeriodicTable/CSharp/Resources/Scenes/main_more_layout.ui.txt
  80. 69 0
      UIPeriodicTable/CSharp/Resources/Scenes/main_primary_layout.ui.txt
  81. 69 0
      UIPeriodicTable/CSharp/Resources/Scenes/main_support_layout.ui.txt
  82. 96 0
      UIPeriodicTable/CSharp/Resources/Scenes/main_table.ui.txt
  83. 81 0
      UIPeriodicTable/CSharp/Resources/Scenes/sceneview.scene
  84. 108 0
      UIPeriodicTable/CSharp/Resources/Scenes/sheet.ui.txt
  85. 8 0
      UIPeriodicTable/CSharp/Resources/Scenes/simp_button.ui.txt
  86. 10 0
      UIPeriodicTable/CSharp/Resources/Scenes/view_code.ui.txt
  87. 55 0
      UIPeriodicTable/CSharp/Resources/Scenes/view_layout.ui.txt
  88. 279 0
      UIPeriodicTable/CSharp/Resources/Scripts/AtomicMain.cs
  89. BIN
      UIPeriodicTable/CSharp/Resources/Textures/AtomicLogo32.png
  90. BIN
      UIPeriodicTable/CSharp/Resources/Textures/BrokenGlass.ttf
  91. BIN
      UIPeriodicTable/CSharp/Resources/Textures/HSV21.png
  92. 22 0
      UIPeriodicTable/CSharp/Resources/Textures/License.txt
  93. 3 0
      UIPeriodicTable/CSharp/Resources/Textures/Readme.txt
  94. BIN
      UIPeriodicTable/CSharp/Resources/Textures/arrow_left.png
  95. BIN
      UIPeriodicTable/CSharp/Resources/Textures/arrow_right.png
  96. BIN
      UIPeriodicTable/CSharp/Resources/Textures/color_button.png
  97. BIN
      UIPeriodicTable/CSharp/Resources/Textures/color_button_pressed.png
  98. 55 0
      UIPeriodicTable/CSharp/Resources/Textures/desktop.tb.txt
  99. BIN
      UIPeriodicTable/CSharp/Resources/Textures/gauge.png
  100. BIN
      UIPeriodicTable/CSharp/Resources/Textures/graph.png

+ 13 - 0
UIPeriodicTable/CSharp/Resources/Components/Spinner.cs

@@ -0,0 +1,13 @@
+using System;
+using AtomicEngine;
+
+public class Spinner : CSComponent {
+    float speed = 1.0f;
+
+    void Update(float timeStep)
+    {
+        Node.Yaw(speed * timeStep * 75.0f);
+    }
+
+}
+

+ 175 - 0
UIPeriodicTable/CSharp/Resources/Components/code_table.cs

@@ -0,0 +1,175 @@
+// handle the periodic table jumps
+using System;
+using AtomicEngine;
+
+public class code_table : CSComponent {
+
+    public void Setup( UILayout mylayout )
+    {
+        UILayout pgtable = (UILayout) mylayout.GetWidget("pagetable");
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        pgtable.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {  // set bulk event handlers on all buttons -- boom!
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleTableEvent);
+        }
+    }
+
+    // handle table clicks
+    private static void HandleTableEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            UITabContainer  maintb = (UITabContainer)widget.FindWidget("maintabs");
+            UITabContainer  acttb = (UITabContainer)widget.FindWidget("primarytabs");
+            UITabContainer  semitb = (UITabContainer)widget.FindWidget("moretabs");
+            UITabContainer  viewtb = (UITabContainer)widget.FindWidget("supporttabs");
+            UITabContainer  supporttb = (UITabContainer)widget.FindWidget("atomictabs");
+
+            if (widget.GetId() ==  "A1" ) {
+                maintb.SetCurrentPage(1);
+                acttb.SetCurrentPage(0);
+            }
+            if (widget.GetId() ==  "A2" ) {
+                maintb.SetCurrentPage(1);
+                acttb.SetCurrentPage(1);
+            }
+            if (widget.GetId() ==  "A3" ) {
+                maintb.SetCurrentPage(1);
+                acttb.SetCurrentPage(2);
+            }
+            if (widget.GetId() ==  "A4" ) {
+                maintb.SetCurrentPage(1);
+                acttb.SetCurrentPage(3);
+            }
+            if (widget.GetId() ==  "A5" ) {
+                maintb.SetCurrentPage(1);
+                acttb.SetCurrentPage(4);
+            }
+            if (widget.GetId() ==  "A6" ) {
+                maintb.SetCurrentPage(1);
+                acttb.SetCurrentPage(5);
+            }
+            if (widget.GetId() ==  "A7" ) {
+                maintb.SetCurrentPage(1);
+                acttb.SetCurrentPage(6);
+            }
+            if (widget.GetId() ==  "A8" ) {
+                maintb.SetCurrentPage(1);
+                acttb.SetCurrentPage(7);
+            }
+            if (widget.GetId() ==  "A9" ) {
+                maintb.SetCurrentPage(1);
+                acttb.SetCurrentPage(8);
+            }
+
+            if (widget.GetId() ==  "B1" ) {
+                maintb.SetCurrentPage(2);
+                semitb.SetCurrentPage(0);
+            }
+            if (widget.GetId() ==  "B2" ) {
+                maintb.SetCurrentPage(2);
+                semitb.SetCurrentPage(1);
+            }
+            if (widget.GetId() ==  "B3" ) {
+                maintb.SetCurrentPage(2);
+                semitb.SetCurrentPage(2);
+            }
+            if (widget.GetId() ==  "B4" ) {
+                maintb.SetCurrentPage(2);
+                semitb.SetCurrentPage(3);
+            }
+            if (widget.GetId() ==  "B5" ) {
+                maintb.SetCurrentPage(2);
+                semitb.SetCurrentPage(4);
+            }
+            if (widget.GetId() ==  "B6" ) {
+                maintb.SetCurrentPage(2);
+                semitb.SetCurrentPage(5);
+            }
+            if (widget.GetId() ==  "B7" ) {
+                maintb.SetCurrentPage(2);
+                semitb.SetCurrentPage(6);
+            }
+            if (widget.GetId() ==  "B8" ) {
+                maintb.SetCurrentPage(2);
+                semitb.SetCurrentPage(7);
+            }
+            if (widget.GetId() ==  "B9" ) {
+                maintb.SetCurrentPage(2);
+                semitb.SetCurrentPage(8);
+            }
+
+            if (widget.GetId() ==  "C1" ) {
+                maintb.SetCurrentPage(3);
+                viewtb.SetCurrentPage(0);
+            }
+            if (widget.GetId() ==  "C2" ) {
+                maintb.SetCurrentPage(3);
+                viewtb.SetCurrentPage(1);
+            }
+            if (widget.GetId() ==  "C3" ) {
+                maintb.SetCurrentPage(3);
+                viewtb.SetCurrentPage(2);
+            }
+            if (widget.GetId() ==  "C4" ) {
+                maintb.SetCurrentPage(3);
+                viewtb.SetCurrentPage(3);
+            }
+            if (widget.GetId() ==  "C5" ) {
+                maintb.SetCurrentPage(3);
+                viewtb.SetCurrentPage(4);
+            }
+            if (widget.GetId() ==  "C6" ) {
+                maintb.SetCurrentPage(3);
+                viewtb.SetCurrentPage(5);
+            }
+            if (widget.GetId() ==  "C7" ) {
+                maintb.SetCurrentPage(3);
+                viewtb.SetCurrentPage(6);
+            }
+            if (widget.GetId() ==  "C8" ) {
+                maintb.SetCurrentPage(3);
+                viewtb.SetCurrentPage(7);
+            }
+            if (widget.GetId() ==  "C9" ) {
+                maintb.SetCurrentPage(3);
+                viewtb.SetCurrentPage(8);
+            }
+
+            if (widget.GetId() ==  "D2" ) {
+                maintb.SetCurrentPage(4);
+                supporttb.SetCurrentPage(0);
+            }
+            if (widget.GetId() ==  "D3" ) {
+                maintb.SetCurrentPage(4);
+                supporttb.SetCurrentPage(1);
+            }
+            if (widget.GetId() ==  "D4" ) {
+                maintb.SetCurrentPage(4);
+                supporttb.SetCurrentPage(2);
+            }
+            if (widget.GetId() ==  "D5" ) {
+                maintb.SetCurrentPage(4);
+                supporttb.SetCurrentPage(3);
+            }
+            if (widget.GetId() ==  "D6" ) {
+                maintb.SetCurrentPage(4);
+                supporttb.SetCurrentPage(4);
+            }
+            if (widget.GetId() ==  "D7" ) {
+                maintb.SetCurrentPage(4);
+                supporttb.SetCurrentPage(5);
+            }
+            if (widget.GetId() ==  "D8" ) {
+                maintb.SetCurrentPage(4);
+                supporttb.SetCurrentPage(6);
+            }
+            if (widget.GetId() ==  "D9" ) {
+                maintb.SetCurrentPage(4);
+                supporttb.SetCurrentPage(7);
+            }
+        }
+    }
+}
+

+ 32 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uibargraph.cs

@@ -0,0 +1,32 @@
+// UIBargraph application source code
+using System;
+using AtomicEngine;
+
+public class code_uibargraph  : CSComponent {
+
+    public void Setup( UIWidget layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {  // set bulk event handlers on all buttons -- boom!
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUibargraphEvent );
+        }
+    }
+
+    private static void HandleUibargraphEvent( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uibargraphcode" ) {
+                AtomicMain.AppLog( "UIBargraph support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uibargraph.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uibargraphlayout" ) {
+                AtomicMain.AppLog( "UIBargraph support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uibargraph.ui.txt", widget.GetParent() );
+            }
+        }
+    }
+}
+

+ 48 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uibutton.cs

@@ -0,0 +1,48 @@
+// UIButton application source code
+using System;
+using AtomicEngine;
+
+public class code_uibutton : CSComponent {
+
+    public void Setup( UIWidget layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {  // set bulk event handlers on all buttons -- boom!
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUibuttonEvent );
+        }
+    }
+
+    private static void HandleUibuttonEvent( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uibuttoncode" ) {
+                AtomicMain.AppLog( "UIButton support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uibutton.cs", widget.GetParent() );
+            }
+            if (widget.GetId() == "uibuttonlayout" ) {
+                AtomicMain.AppLog( "UIButton support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uibutton.ui.txt", widget.GetParent() );
+            }
+
+            if (widget.GetId() == "demobutton" ) {
+                AtomicMain.AppLog( "UIButton action : " + widget.GetId() + " was pressed ");
+            }
+            if (widget.GetId() == "buttonducky" ) {
+                AtomicMain.AppLog( "UIButton action : " + widget.GetId() + " was pressed ");
+            }
+            if (widget.GetId() == "buttonready" ) {
+                AtomicMain.AppLog( "UIButton action : " + widget.GetId() + " was pressed ");
+            }
+            if (widget.GetId() == "buttonatomic" ) {
+                AtomicMain.AppLog( "UIButton action : " + widget.GetId() + " was pressed ");
+            }
+            if (widget.GetId() == "buttongreen" ) {
+                AtomicMain.AppLog( "UIButton action : " + widget.GetId() + " was pressed ");
+            }
+        }
+    }
+}
+

+ 54 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uicheckbox.cs

@@ -0,0 +1,54 @@
+// UICheckBox application source code
+using System;
+using AtomicEngine;
+
+public class code_uicheckbox : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUicheckboxEvent );
+        }
+        UIWidget demochk = layout.GetWidget ("democheck");
+        if ( !demochk.Equals(null))
+            demochk.SubscribeToEvent<WidgetEvent> ( demochk, HandleUicheckboxEvent );
+    }
+
+    private static void HandleUicheckboxEvent( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uicheckboxcode" ) {
+                AtomicMain.AppLog( "UICheckBox support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uicheckbox.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uicheckboxlayout" ) {
+                AtomicMain.AppLog( "UICheckBox support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uicheckbox.ui.txt", widget.GetParent() );
+            }
+
+            if (widget.GetId() ==  "democheck" ) {
+                AtomicMain.AppLog( "UICheckBox event : " + widget.GetId() + " was pressed, state = " + widget.GetValue().ToString() );
+            }
+
+            if (widget.GetId() ==  "checkset" ) {
+                UIWidget demochk = widget.FindWidget ("democheck");
+                if ( !demochk.Equals(null)) {
+                    demochk.SetValue (1);
+                    AtomicMain.AppLog( "UICheckBox action : " + widget.GetId() + " was pressed, set state to 1" );
+                }
+            }
+            if (widget.GetId() ==  "checkunset" ) {
+                UIWidget demochk = widget.FindWidget ("democheck");
+                if ( !demochk.Equals(null)) {
+                    demochk.SetValue (0);
+                    AtomicMain.AppLog( "UICheckBox action : " + widget.GetId() + " was pressed, set state to 0" );
+                }
+            }
+        }
+    }
+}
+

+ 45 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uiclicklabel.cs

@@ -0,0 +1,45 @@
+// UIClickLabel application source code
+using System;
+using AtomicEngine;
+
+public class code_uiclicklabel : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUiclicklabelEvent );
+        }
+        UIWidget demochk = layout.GetWidget ("somecheck");
+        if ( !demochk.Equals(null))
+            demochk.SubscribeToEvent<WidgetEvent> ( demochk, HandleUiclicklabelEvent );
+        UIWidget demorad = layout.GetWidget ("someradio");
+        if ( !demorad.Equals(null))
+            demorad.SubscribeToEvent<WidgetEvent> ( demorad, HandleUiclicklabelEvent );
+    }
+
+    private static void HandleUiclicklabelEvent( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uiclicklabelcode" ) {
+                AtomicMain.AppLog( "UIClickLabel support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uiclicklabel.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uiclicklabellayout" ) {
+                AtomicMain.AppLog( "UIClickLabel support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uiclicklabel.ui.txt", widget.GetParent() );
+            }
+
+            if (widget.GetId() == "somecheck" ) {
+                AtomicMain.AppLog( "UIClickLabel event : " + widget.GetId() + " was pressed, state = " +  widget.GetValue().ToString() );
+            }
+            if (widget.GetId() == "someradio" ) {
+                AtomicMain.AppLog( "UIClickLabel event : " + widget.GetId() + " was pressed, state = " + widget.GetValue().ToString() );
+            }
+        }
+    }
+}
+

+ 42 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uicolorwheel.cs

@@ -0,0 +1,42 @@
+// UIColorWheel application source code
+using System;
+using AtomicEngine;
+
+public class code_uicolorwheel : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUicolorwheelEvent );
+        }
+        UIWidget demo = layout.GetWidget ("colorwheeldemo");
+        if ( !demo.Equals(null))
+            demo.SubscribeToEvent<WidgetEvent> ( demo, HandleUicolorwheelEvent );
+    }
+
+    private static void HandleUicolorwheelEvent( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() ==  "uicolorwheelcode" ) {
+                AtomicMain.AppLog( "UIColorWheel support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uicolorwheel.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uicolorwheellayout" ) {
+                AtomicMain.AppLog( "UIColorWheel support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uicolorwheel.ui.txt", widget.GetParent() );
+            }
+        } else if (  ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CHANGED ) {
+            if (widget.GetId() ==  "colorwheeldemo" ) {
+                UIColorWheel cwx = (UIColorWheel)widget; // collect click color info
+                if ( !cwx.Equals(null)) {
+                    AtomicMain.AppLog( "UIColorWheel event : " + widget.GetId() + " hue = " + cwx.GetHue().ToString() + " saturation = " + cwx.GetSaturation().ToString() );
+                }
+            }
+        }
+    }
+}
+

+ 51 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uicolorwidget.cs

@@ -0,0 +1,51 @@
+// UIColorWidget application source code
+using System;
+using AtomicEngine;
+
+public class code_uicolorwidget : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUicolorwidgetEvent );
+        }
+    }
+
+    private static void HandleUicolorwidgetEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uicolorwidgetcode" ) {
+                AtomicMain.AppLog( "UIColorWidget support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uicolorwidget.cs", widget.GetParent() );
+            }
+            if (widget.GetId() == "uicolorwidgetlayout" ) {
+                AtomicMain.AppLog( "UIColorWidget support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uicolorwidget.ui.txt", widget.GetParent() );
+            }
+
+            if (widget.GetId() == "uicolorwidgetred" ) {
+                AtomicMain.AppLog( "UIColorWidget action : " + widget.GetId() + " was pressed ");
+                UIColorWidget clw = (UIColorWidget)widget.FindWidget("colorwidgetdemo");
+                if ( !clw.Equals(null))
+                    clw.SetColorString("#FF1111");
+            }
+            if (widget.GetId() == "uicolorwidgetgreen" ) {
+                AtomicMain.AppLog( "UIColorWidget action : " + widget.GetId() + " was pressed ");
+                UIColorWidget clw = (UIColorWidget)widget.FindWidget("colorwidgetdemo");
+                if ( !clw.Equals(null))
+                    clw.SetColorString("#11FF11");
+            }
+            if (widget.GetId() == "uicolorwidgetblue" ) {
+                AtomicMain.AppLog( "UIColorWidget action : " + widget.GetId() + " was pressed ");
+                UIColorWidget clw = (UIColorWidget)widget.FindWidget("colorwidgetdemo");
+                if ( !clw.Equals(null))
+                    clw.SetColorString("#1111FF");
+            }
+        }
+    }
+}
+

+ 32 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uicontainer.cs

@@ -0,0 +1,32 @@
+// UIContainer application source code
+using System;
+using AtomicEngine;
+
+public class code_uicontainer : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUicontainerEvent );
+        }
+    }
+
+    private static void HandleUicontainerEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uicontainercode" ) {
+                AtomicMain.AppLog( "UIContainer support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uicontainer.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uicontainerlayout" ) {
+                AtomicMain.AppLog( "UIContainer support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uicontainer.ui.txt", widget.GetParent() );
+            }
+        }
+    }
+}
+

+ 65 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uieditfield.cs

@@ -0,0 +1,65 @@
+// UIEditField application source code
+using System;
+using AtomicEngine;
+
+public class code_uieditfield  : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUieditfieldEvent );
+        }
+        UIWidget demo1 = layout.GetWidget ("editfieldsingle");
+        if ( !demo1.Equals(null))
+            demo1.SubscribeToEvent<WidgetEvent> ( demo1, HandleUieditfieldEvent );
+        UIWidget demo2 = layout.GetWidget ("editfieldmulti");
+        if ( !demo2.Equals(null))
+            demo2.SubscribeToEvent<WidgetEvent> ( demo2, HandleUieditfieldEvent );
+    }
+
+    private static void HandleUieditfieldEvent( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uieditfieldcode" ) {
+                AtomicMain.AppLog( "UIEditField support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uieditfield.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uieditfieldlayout" ) {
+                AtomicMain.AppLog( "UIEditField support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uieditfield.ui.txt", widget.GetParent() );
+            }
+
+            if (widget.GetId() ==  "editfieldadd" ) {
+                AtomicMain.AppLog( "UIEditField action : " + widget.GetId() + " was pressed ");
+                UIEditField ef1 = (UIEditField)widget.FindWidget("editfieldmulti");
+                if ( !ef1.Equals(null)) {
+                    var  cache = GetSubsystem<ResourceCache>();
+                    File filex = cache.GetFile("Scenes/layout_uieditfield.ui.txt");
+                    String textx = filex.ReadText();
+                    filex.Close();
+                    ef1.SetText(textx);
+                }
+            }
+            if (widget.GetId() ==  "editfieldclr" ) {
+                AtomicMain.AppLog( "UIEditField action : " + widget.GetId() + " was pressed ");
+                UIEditField ef1 = (UIEditField)widget.FindWidget("editfieldmulti");
+                if ( !ef1.Equals(null))
+                    ef1.SetText("");
+            }
+        } else {
+            if ( widget.GetId() ==  "editfieldsingle" ) {
+                UIEditField efx = (UIEditField)widget;
+                AtomicMain.AppLog( "UIEditField event : " + widget.GetId() + " text = `" + efx.GetText() + "` event type = " + AtomicMain.EventReport((int)ev.Type));
+            }
+            if ( widget.GetId() ==  "editfieldmulti" ) {
+                UIEditField efx = (UIEditField)widget;
+                AtomicMain.AppLog( "UIEditField event : " + widget.GetId() + " text = `" + efx.GetText() + "` event type = " + AtomicMain.EventReport((int)ev.Type) );
+            }
+        }
+    }
+}
+

+ 53 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uifinderwindow.cs

@@ -0,0 +1,53 @@
+// UIFinderWindow application source code
+using System;
+using AtomicEngine;
+
+public class code_uifinderwindow  : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUifinderwindowEvent );
+        }
+    }
+
+    private static void HandleFinderCompleteEvent ( UIFinderCompleteEvent ev )
+    {
+        AtomicMain.AppLog( "UIFinderWindow event : the window " + ev.Title
+                           + " file was " + ev.Selected  + ", the button pressed was " + ev.Reason);
+    }
+
+    private static void HandleUifinderwindowEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uifinderwindowcode" ) {
+                AtomicMain.AppLog( "UIFinderWindow support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uifinderwindow.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uifinderwindowlayout" ) {
+                AtomicMain.AppLog( "UIFinderWindow support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uifinderwindow.ui.txt", widget.GetParent() );
+            }
+
+            if (widget.GetId() == "filefinder" ) {
+                AtomicMain.AppLog( "UIFinderWindow action : " + widget.GetId() + " was pressed ");
+                UIWidget someview = (UIWidget)widget.GetView();
+                UIFinderWindow windowf = new UIFinderWindow(someview, widget.GetId());
+                windowf.SubscribeToEvent<UIFinderCompleteEvent> (windowf, HandleFinderCompleteEvent );
+                windowf.FindFile("Find a File", "", 0, 0, 0);
+            }
+            if (widget.GetId() ==  "folderfinder" ) {
+                AtomicMain.AppLog( "UIFinderWindow action : " + widget.GetId() + " was pressed ");
+                UIWidget  someview = (UIWidget)widget.GetView();
+                UIFinderWindow  windowd = new UIFinderWindow( someview, widget.GetId() );
+                windowd.SubscribeToEvent<UIFinderCompleteEvent> (windowd, HandleFinderCompleteEvent );
+                windowd.FindPath("Find a Folder", "", 0, 0, 0);
+            }
+        }
+    }
+}
+

+ 49 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uifontdescription.cs

@@ -0,0 +1,49 @@
+// UIFontdescription application source code
+using System;
+using AtomicEngine;
+
+public class code_uifontdescription  : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUifontdescriptionEvent );
+        }
+        UIWidget demo = layout.GetWidget ("fontstep");
+        if ( !demo.Equals(null))
+            demo.SubscribeToEvent<WidgetEvent> ( demo, HandleUifontdescriptionEvent );
+    }
+
+    private static void HandleUifontdescriptionEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uifontdescriptioncode" ) {
+                AtomicMain.AppLog( "UIFontdescription support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uifontdescription.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uifontdescriptionlayout" ) {
+                AtomicMain.AppLog( "UIFontdescription support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uifontdescription.ui.txt", widget.GetParent() );
+            }
+        } else if (ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CHANGED ) {
+            if ( widget.GetId() ==  "fontstep" ) {
+                UISlider uis = (UISlider)widget;
+                if ( !uis.Equals(null)) {
+                    UITextField mytext = (UITextField)widget.FindWidget("changetext");
+                    UIFontDescription myfont = new UIFontDescription();
+                    int mysize = (int)uis.GetValue();
+                    myfont.SetSize( mysize );
+                    myfont.SetId("Vera");
+                    mytext.SetFontDescription (myfont);
+                    mytext.SetText ( "Size " + mysize);
+                    AtomicMain.AppLog( "UIFontdescription action : " + widget.GetId() + " step size changed to " + mysize );
+                }
+            }
+        }
+    }
+}
+

+ 43 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uiimagewidget.cs

@@ -0,0 +1,43 @@
+// UIImageWidget application source code
+using System;
+using AtomicEngine;
+
+public class code_uiimagewidget : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUiimagewidgetEvent );
+        }
+    }
+
+    private static void HandleUiimagewidgetEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uiimagewidgetcode" ) {
+                AtomicMain.AppLog( "UIImageWidget support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uiimagewidget.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uiimagewidgetlayout" ) {
+                AtomicMain.AppLog( "UIImageWidget support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uiimagewidget.ui.txt", widget.GetParent() );
+            }
+
+            if (widget.GetId() ==  "imagecolor" ) {
+                AtomicMain.AppLog( "UIImageWidget action : " + widget.GetId() + " was pressed ");
+                UIImageWidget img1 = (UIImageWidget)widget.FindWidget("imagewidgetdemo");
+                img1.SetImage("Textures/HSV21.png");
+            }
+            if (widget.GetId() ==  "imagenewbuild" ) {
+                AtomicMain.AppLog( "UIImageWidget action : " + widget.GetId() + " was pressed ");
+                UIImageWidget img1 = (UIImageWidget)widget.FindWidget("imagewidgetdemo");
+                img1.SetImage("Textures/newbuilddetected_header.jpg");
+            }
+        }
+    }
+}
+

+ 55 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uiinlineselect.cs

@@ -0,0 +1,55 @@
+// UIInlineSelect application source code
+using System;
+using AtomicEngine;
+
+public class code_uiinlineselect  : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUiinlineselectEvent );
+        }
+        UIWidget demo1 = layout.GetWidget ("ilsstep");
+        if ( !demo1.Equals(null))
+            demo1.SubscribeToEvent<WidgetEvent> ( demo1, HandleUiinlineselectEvent );
+        UIWidget demo2 = layout.GetWidget ("inlineselectdemo");
+        if ( !demo2.Equals(null))
+            demo2.SubscribeToEvent<WidgetEvent> ( demo2, HandleUiinlineselectEvent );
+    }
+
+    private static void HandleUiinlineselectEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uiinlineselectcode" ) {
+                AtomicMain.AppLog( "UIInlineSelect support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uiinlineselect.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uiinlineselectlayout" ) {
+                AtomicMain.AppLog( "UIInlineSelect support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uiinlineselect.ui.txt", widget.GetParent() );
+            }
+        } else if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CHANGED ) {
+            if (widget.GetId() == "inlineselectdemo" ) {
+                UIInlineSelect  ils = (UIInlineSelect)widget;
+                if ( !ils.Equals(null)) {
+                    AtomicMain.AppLog( "UIInlineSelect event : " + widget.GetId() + " changed value to " + ils.GetValue().ToString() );
+                }
+            }
+            if (widget.GetId() == "ilsstep" ) {
+                UISlider  steps = (UISlider)widget;
+                if ( !steps.Equals(null)) {
+                    UIInlineSelect  ils = (UIInlineSelect)widget.FindWidget("inlineselectdemo");
+                    if ( !ils.Equals(null)) {
+                        ils.SetStepSize (steps.GetValue());
+                    }
+                    AtomicMain.AppLog( "UIInlineSelect event : " + widget.GetId() + " step size changed to " + steps.GetValue().ToString() );
+                }
+            }
+        }
+    }
+}
+

+ 300 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uilayout.cs

@@ -0,0 +1,300 @@
+// UILayout application source code
+using System;
+using AtomicEngine;
+
+public class code_uilayout : CSComponent {
+
+    private static string layoutomaticstr; // LAYOUT-O-MATIC string
+
+    private static void ReplaceChar( int index, char newChar)
+    {
+        char[] array = layoutomaticstr.ToCharArray();
+        array[index] =  newChar;
+        layoutomaticstr  = new string(array);
+    }
+
+    public void Setup( UIWidget  layout )
+    {
+
+        layoutomaticstr = "XGCPC";
+
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUilayoutEvent );
+        }
+
+        UILayout  myc = (UILayout)layout.GetWidget("uilayoutcontainer"); // get the container layout
+        UIButton  tf0 = new UIButton();  // the layout-o-matic spawner
+        tf0.SetText( "LAYOUT-O-MATIC");
+        tf0.SetId( "go_layout_config");
+        UILayout lo0 = new UILayout();
+        lo0.SetId( "target_layout");
+        lo0.SetLayoutConfig ( "-----" );
+        lo0.Load("Scenes/simp_button.ui.txt");
+        lo0.AddChildBefore(tf0, lo0.GetFirstChild() );
+        myc.AddChild(lo0);  // drop it in
+        tf0.SubscribeToEvent<WidgetEvent> (tf0, HandleUilayoutEvent );
+
+        UITextField  tf1 = new UITextField();
+        tf1.SetText( "layout config XACAC");
+        UILayout  lo1 = new UILayout();
+        lo1.SetLayoutConfig ( "XACAC" );
+        lo1.Load("Scenes/simp_button.ui.txt");
+        lo1.AddChildBefore(tf1, lo1.GetFirstChild() );
+        myc.AddChild(lo1);
+
+        UITextField  tf2 = new UITextField();
+        tf2.SetText( "layout config XGCAC");
+        UILayout  lo2 = new UILayout();
+        lo2.SetLayoutConfig ( "XGCAC" );
+        lo2.Load("Scenes/simp_button.ui.txt");
+        lo2.AddChildBefore(tf2, lo2.GetFirstChild() );
+        myc.AddChild(lo2);
+
+        UITextField  tf3 = new UITextField();
+        tf3.SetText( "layout config XPCAC");
+        UILayout  lo3 = new UILayout();
+        lo3.SetLayoutConfig ( "XPCAC" );
+        lo3.Load("Scenes/simp_button.ui.txt");
+        lo3.AddChildBefore(tf3, lo3.GetFirstChild() );
+        myc.AddChild(lo3);
+
+        UITextField  tf4 = new UITextField();
+        tf4.SetText( "layout config XACGC");
+        UILayout  lo4 = new UILayout();
+        lo4.SetLayoutConfig ( "XACGC" );
+        lo4.Load("Scenes/simp_button.ui.txt");
+        lo4.AddChildBefore(tf4, lo4.GetFirstChild() );
+        myc.AddChild(lo4);
+
+        UITextField  tf5 = new UITextField();
+        tf5.SetText( "layout config XGRGC");
+        UILayout  lo5 = new UILayout();
+        lo5.SetLayoutConfig ( "XGRGC" );
+        lo5.Load("Scenes/simp_button.ui.txt");
+        lo5.AddChildBefore(tf5, lo5.GetFirstChild() );
+        myc.AddChild(lo5);
+
+        UITextField  tf6 = new UITextField();
+        tf6.SetText( "layout config XPLGC");
+        UILayout  lo6 = new UILayout();
+        lo6.SetLayoutConfig ( "XPLGC" );
+        lo6.Load("Scenes/simp_button.ui.txt");
+        lo6.AddChildBefore(tf6, lo6.GetFirstChild() );
+        myc.AddChild(lo6);
+
+        UITextField  tf7 = new UITextField();
+        tf7.SetText( "layout config XACPC");
+        UILayout  lo7 = new UILayout();
+        lo7.SetLayoutConfig ( "XACPC" );
+        lo7.Load("Scenes/simp_button.ui.txt");
+        lo7.AddChildBefore(tf7, lo7.GetFirstChild() );
+        myc.AddChild(lo7);
+
+        UITextField  tf8 = new UITextField();
+        tf8.SetText( "layout config XGLPL");
+        UILayout  lo8 = new UILayout();
+        lo8.SetLayoutConfig ( "XGLPL" );
+        lo8.Load("Scenes/simp_button.ui.txt");
+        lo8.AddChildBefore(tf8, lo8.GetFirstChild() );
+        myc.AddChild(lo8);
+
+        UITextField  tf9 = new UITextField();
+        tf9.SetText( "layout config XPCPR");
+        UILayout  lo9 = new UILayout();
+        lo9.SetLayoutConfig ( "XPCPR" );
+        lo9.Load("Scenes/simp_button.ui.txt");
+        lo9.AddChildBefore(tf9, lo9.GetFirstChild() );
+        myc.AddChild(lo9);
+    }
+
+    private static void HandleUilayoutEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "go_layout_config" ) { // its LAYOUT-O-MATIC time.
+                AtomicMain.AppLog( "UILayout action : " + widget.GetId() + " was pressed, its LAYOUT-O-MATIC time");
+                UIView someview = widget.GetView();
+                UIWindow  window = new UIWindow();
+                window.SetSettings ( UI_WINDOW_SETTINGS.UI_WINDOW_SETTINGS_DEFAULT );
+                window.SetText( "LAYOUT-O-MATIC(tm)");
+                window.Load("Scenes/view_layout.ui.txt");
+                window.ResizeToFitContent();
+                someview.AddChild(window);
+
+                UIWidget okbutt = window.GetWidget("ok");
+                okbutt.SubscribeToEvent<WidgetEvent> (okbutt, HandleUilayoutEvent );
+
+                var lox = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+                window.SearchWidgetClass( "TBRadioButton", lox );
+                for (var ii = 0; ii < lox.Size; ii++) {
+                    lox[ii].SubscribeToEvent<WidgetEvent> (lox [ii],HandleUilayoutEvent  );
+                }
+            }
+            if (widget.GetId() ==  "ok" ) {
+                UIWindow mywindow = (UIWindow)AtomicMain.FindTheWindowParent(widget);
+                if (!mywindow.Equals(null))
+                    mywindow.Close();
+            }
+            if (widget.GetId() ==  "set_ax" ) {
+                UILayout targetl = (UILayout)widget.FindWidget("target_layout"); // who to operate on.
+                UIRadioButton setla = (UIRadioButton)widget; // who we are
+                if (!targetl.Equals(null) && !setla.Equals(null)) {
+                    if ( setla.GetValue() == 1 ) {
+                        ReplaceChar(0, 'X');
+                        targetl.SetLayoutConfig(layoutomaticstr);
+                    }
+                }
+            }
+            if (widget.GetId() ==  "set_ay" ) {
+                UILayout targetl = (UILayout)widget.FindWidget("target_layout"); // who to operate on.
+                UIRadioButton  setla = (UIRadioButton)widget; // who we are
+                if (!targetl.Equals(null) && !setla.Equals(null)) {
+                    if ( setla.GetValue() == 1) {
+                        ReplaceChar(0, 'Y');
+                        targetl.SetLayoutConfig(layoutomaticstr);
+                    }
+                }
+            }
+
+            if (widget.GetId() ==  "set_sza" ) {
+                UILayout targetl = (UILayout)widget.FindWidget("target_layout"); // who to operate on.
+                UIRadioButton  setla = (UIRadioButton)widget; // who we are
+                if (!targetl.Equals(null) && !setla.Equals(null)) {
+                    if ( setla.GetValue() == 1) {
+                        ReplaceChar( 1, 'A');
+                        targetl.SetLayoutConfig(layoutomaticstr);
+                    }
+                }
+            }
+            if (widget.GetId() ==  "set_szg" ) {
+                UILayout targetl = (UILayout)widget.FindWidget("target_layout"); // who to operate on.
+                UIRadioButton  setla = (UIRadioButton)widget; // who we are
+                if (!targetl.Equals(null) && !setla.Equals(null)) {
+                    if ( setla.GetValue() == 1) {
+                        ReplaceChar( 1, 'G');
+                        targetl.SetLayoutConfig(layoutomaticstr);
+                    }
+                }
+            }
+            if (widget.GetId() ==  "set_szp" ) {
+                UILayout targetl = (UILayout)widget.FindWidget("target_layout"); // who to operate on.
+                UIRadioButton  setla = (UIRadioButton)widget; // who we are
+                if (!targetl.Equals(null) && !setla.Equals(null)) {
+                    if ( setla.GetValue() == 1) {
+                        ReplaceChar(  1, 'P');
+                        targetl.SetLayoutConfig(layoutomaticstr);
+                    }
+                }
+            }
+
+
+            if (widget.GetId() ==  "set_posc" ) {
+                UILayout targetl = (UILayout)widget.FindWidget("target_layout"); // who to operate on.
+                UIRadioButton  setla = (UIRadioButton)widget; // who we are
+                if (!targetl.Equals(null) && !setla.Equals(null)) {
+                    if ( setla.GetValue() == 1) {
+                        ReplaceChar( 2, 'C');
+                        targetl.SetLayoutConfig(layoutomaticstr);
+                    }
+                }
+            }
+            if (widget.GetId() ==  "set_posg" ) {
+                UILayout targetl = (UILayout)widget.FindWidget("target_layout"); // who to operate on.
+                UIRadioButton  setla = (UIRadioButton)widget; // who we are
+                if (!targetl.Equals(null) && !setla.Equals(null)) {
+                    if ( setla.GetValue() == 1) {
+                        ReplaceChar( 2, 'G');
+                        targetl.SetLayoutConfig(layoutomaticstr);
+                    }
+                }
+            }
+            if (widget.GetId() ==  "set_posl" ) {
+                UILayout targetl = (UILayout)widget.FindWidget("target_layout"); // who to operate on.
+                UIRadioButton  setla = (UIRadioButton)widget; // who we are
+                if (!targetl.Equals(null) && !setla.Equals(null)) {
+                    if ( setla.GetValue() == 1) {
+                        ReplaceChar( 2, 'L');
+                        targetl.SetLayoutConfig(layoutomaticstr);
+                    }
+                }
+            }
+            if (widget.GetId() ==  "set_posr" ) {
+                UILayout targetl = (UILayout)widget.FindWidget("target_layout"); // who to operate on.
+                UIRadioButton  setla = (UIRadioButton)widget; // who we are
+                if (!targetl.Equals(null) && !setla.Equals(null)) {
+                    if ( setla.GetValue() == 1) {
+                        ReplaceChar( 2, 'R');
+                        targetl.SetLayoutConfig(layoutomaticstr);
+                    }
+                }
+            }
+
+            if (widget.GetId() ==  "set_dista" ) {
+                UILayout targetl = (UILayout)widget.FindWidget("target_layout"); // who to operate on.
+                UIRadioButton  setla = (UIRadioButton)widget; // who we are
+                if (!targetl.Equals(null) && !setla.Equals(null)) {
+                    if ( setla.GetValue() == 1) {
+                        ReplaceChar(3, 'A');
+                        targetl.SetLayoutConfig(layoutomaticstr);
+                    }
+                }
+            }
+            if (widget.GetId() ==  "set_distg" ) {
+                UILayout targetl = (UILayout)widget.FindWidget("target_layout"); // who to operate on.
+                UIRadioButton  setla = (UIRadioButton)widget; // who we are
+                if (!targetl.Equals(null) && !setla.Equals(null)) {
+                    if ( setla.GetValue() == 1) {
+                        ReplaceChar(3, 'G');
+                        targetl.SetLayoutConfig(layoutomaticstr);
+                    }
+                }
+            }
+            if (widget.GetId() ==  "set_distp" ) {
+                UILayout targetl = (UILayout)widget.FindWidget("target_layout"); // who to operate on.
+                UIRadioButton  setla = (UIRadioButton)widget; // who we are
+                if (!targetl.Equals(null) && !setla.Equals(null)) {
+                    if ( setla.GetValue() == 1) {
+                        ReplaceChar(3, 'P');
+                        targetl.SetLayoutConfig(layoutomaticstr);
+                    }
+                }
+            }
+
+            if (widget.GetId() ==  "set_dpc" ) {
+                UILayout targetl = (UILayout)widget.FindWidget("target_layout"); // who to operate on.
+                UIRadioButton  setla = (UIRadioButton)widget; // who we are
+                if (!targetl.Equals(null) && !setla.Equals(null)) {
+                    if ( setla.GetValue() == 1) {
+                        ReplaceChar( 4, 'C');
+                        targetl.SetLayoutConfig(layoutomaticstr);
+                    }
+                }
+            }
+            if (widget.GetId() ==  "set_dpl" ) {
+                UILayout targetl = (UILayout)widget.FindWidget("target_layout"); // who to operate on.
+                UIRadioButton  setla = (UIRadioButton)widget; // who we are
+                if (!targetl.Equals(null) && !setla.Equals(null)) {
+                    if ( setla.GetValue() == 1) {
+                        ReplaceChar( 4, 'L');
+                        targetl.SetLayoutConfig(layoutomaticstr);
+                    }
+                }
+            }
+            if (widget.GetId() ==  "set_dpr" ) {
+                UILayout targetl = (UILayout)widget.FindWidget("target_layout"); // who to operate on.
+                UIRadioButton  setla = (UIRadioButton)widget; // who we are
+                if (!targetl.Equals(null) && !setla.Equals(null)) {
+                    if ( setla.GetValue() == 1) {
+                        ReplaceChar( 4, 'R');
+                        targetl.SetLayoutConfig(layoutomaticstr);
+
+                    }
+                }
+            }
+        }
+    }
+}
+

+ 32 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uilayoutparams.cs

@@ -0,0 +1,32 @@
+// UILayoutParams application source code
+using System;
+using AtomicEngine;
+
+public class code_uilayoutparams  : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUilayoutparamsEvent );
+        }
+    }
+
+    private static void HandleUilayoutparamsEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uilayoutparamscode" ) {
+                AtomicMain.AppLog( "UILayoutParams support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uilayoutparams.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uilayoutparamslayout" ) {
+                AtomicMain.AppLog( "UILayoutParams support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uilayoutparams.ui.txt", widget.GetParent() );
+            }
+        }
+    }
+}
+

+ 74 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uimenuitem.cs

@@ -0,0 +1,74 @@
+// UIMenuItem and UIMenuItemSource application source code
+using System;
+using AtomicEngine;
+
+public class code_uimenuitem  : CSComponent {
+
+    private static UIMenuItemSource mis;
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUimenuitemEvent );
+        }
+
+        mis = new UIMenuItemSource();
+        mis.AddItem( new UIMenuItem( "UISelectItem1", "item1" ) );
+        mis.AddItem( new UIMenuItem( "UISelectItem2", "item2", "Ctrl+." ) );
+        mis.AddItem( new UIMenuItem( "UISelectItem3", "item3", "Ctrl+A", "DuckButton" ) );
+        mis.AddItem( new UIMenuItem( "UISelectItem4", "item4", "Ctrl+O", "LogoAtomic" ) );
+    }
+
+    private static void HandleUimenuitemEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        string refid  = (string)ev.RefID;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uimenuitemcode" ) {
+                AtomicMain.AppLog( "UIMenuItem support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uimenuitem.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uimenuitemlayout" ) {
+                AtomicMain.AppLog( "UIMenuItem support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uimenuitem.ui.txt", widget.GetParent() );
+            }
+
+            if (widget.GetId() ==  "uimenuitempush" ) {
+                UIMenuWindow  mymenuwindow = new UIMenuWindow( widget, "MenuItemDemo");
+                int xx = widget.GetX() + (widget.GetWidth()/2);
+                int yy = widget.GetY() + (widget.GetHeight()/2);
+                mymenuwindow.SubscribeToEvent<WidgetEvent> (mymenuwindow, HandleUimenuitemEvent );
+                mymenuwindow.Show(mis, xx, yy);
+            }
+
+            if (widget.GetId() ==  "MenuItemDemo" ) {
+                AtomicMain.AppLog( "UIMenuItem event : " + widget.GetId() + " and " + refid + " was selected ");
+            }
+
+            if (widget.GetId() ==  "uimi1" ) {
+                AtomicMain.AppLog( "UIMenuItem action : " + widget.GetId() + " was pressed ");
+                mis.AddItem( new UIMenuItem( "New UIMenuItem") );
+            }
+            if (widget.GetId() ==  "uimi2" ) {
+                AtomicMain.AppLog( "UIMenuItem action : " + widget.GetId() + " was pressed ");
+                mis.AddItem( new UIMenuItem( "Newer UIMenuItem", "neweritem" ) );
+            }
+            if (widget.GetId() ==  "uimi3" ) {
+                AtomicMain.AppLog( "UIMenuItem action : " + widget.GetId() + " was pressed ");
+                mis.AddItem( new UIMenuItem( "A Duck", "aduck", "", "DuckButton" ) );
+            }
+            if (widget.GetId() ==  "uimi4" ) {
+                AtomicMain.AppLog( "UIMenuItem action : " + widget.GetId() + " was pressed ");
+                mis.AddItem( new UIMenuItem( "Atomic!", "atomic", "", "LogoAtomic" ) );
+            }
+            if (widget.GetId() ==  "uimi5" ) {
+                AtomicMain.AppLog( "UIMenuItem action : " + widget.GetId() + " was pressed ");
+                mis.Clear();
+            }
+        }
+    }
+}
+

+ 55 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uimenuwindow.cs

@@ -0,0 +1,55 @@
+// UIMenuWindow application source code
+using System;
+using AtomicEngine;
+
+public class code_uimenuwindow  : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUimenuwindowEvent );
+        }
+    }
+
+    private static void HandleUimenuwindowEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        string refid  = (string)ev.RefID;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uimenuwindowcode" ) {
+                AtomicMain.AppLog( "UIMenuWindow support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uimenuwindow.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uimenuwindowlayout" ) {
+                AtomicMain.AppLog( "UIMenuWindow support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uimenuwindow.ui.txt", widget.GetParent() );
+            }
+
+            if (widget.GetId() ==  "uimenuwindowpush" ) {
+                AtomicMain.AppLog( "UIMenuWindow action : " + widget.GetId() + " was pressed " );
+                UIMenuWindow  mymenuwindow = new UIMenuWindow( widget, "MenuWindowDemo");
+                UIMenuItemSource  mis = new UIMenuItemSource();
+                mis.AddItem( new UIMenuItem( "UISelectItem1", "item1" ) );
+                mis.AddItem( new UIMenuItem( "UISelectItem2", "item2", "Ctrl+C" ) );
+                mis.AddItem( new UIMenuItem( "UISelectItem3", "item3", "Ctrl+A", "DuckButton" ) );
+                mis.AddItem( new UIMenuItem( "UISelectItem4", "item4", "Ctrl+O", "LogoAtomic" ) );
+                int xx = widget.GetX() + (widget.GetWidth()/2);
+                int yy = widget.GetY() + (widget.GetHeight()/2);
+                mymenuwindow.SubscribeToEvent<WidgetEvent> (mymenuwindow, HandleUimenuwindowEvent );
+                mymenuwindow.Show(mis, xx, yy);
+            }
+
+            if (widget.GetId() ==  "MenuWindowDemo" ) {
+                AtomicMain.AppLog( "UIMenuWindow event : " + widget.GetId() + " and " + refid + " was selected ");
+            }
+        } else {
+            if (widget.GetId() ==  "MenuWindowDemo" ) {
+                AtomicMain.AppLog( "UIMenuWindow event : " + widget.GetId() +  " refid=" + refid + " event type=" + AtomicMain.EventReport((int)ev.Type));
+            }
+        }
+    }
+}
+

+ 73 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uimessagewindow.cs

@@ -0,0 +1,73 @@
+// UIMessageWindow application source code
+using System;
+using AtomicEngine;
+
+public class code_uimessagewindow : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUimessagewindowEvent );
+        }
+    }
+
+    private static void HandleUimessagewindowEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        string refid  = (string)ev.RefID;
+        if ( widget.Equals(null)) return;
+        UIWidget  mylayout = (UIWidget)widget.FindWidget("pageuimessagewindow");
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uimessagewindowcode" ) {
+                AtomicMain.AppLog( "UIMessageWindow support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uimessagewindow.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uimessagewindowlayout" ) {
+                AtomicMain.AppLog( "UIMessageWindow support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uimessagewindow.ui.txt", widget.GetParent() );
+            }
+
+            if (widget.GetId() ==  "msgnone" ) {
+                AtomicMain.AppLog( "UIMessageWindow support : " + widget.GetId() + " was pressed ");
+                UIMessageWindow  mess1 = new UIMessageWindow( mylayout, "mymess1");
+                mess1.Show("MessageWindow - NONE", "this is a MessageWindow - None button", (UI_MESSAGEWINDOW_SETTINGS)0, false, 0, 0);
+            }
+            if (widget.GetId() ==  "msgok" ) {
+                AtomicMain.AppLog( "UIMessageWindow support : " + widget.GetId() + " was pressed ");
+                UIMessageWindow  mess2 = new UIMessageWindow( mylayout, "mymess2");
+                mess2.SubscribeToEvent<WidgetEvent> (mess2, HandleUimessagewindowEvent );
+                mess2.Show("MessageWindow - OK", "this is a MessageWindow - OK button", UI_MESSAGEWINDOW_SETTINGS.UI_MESSAGEWINDOW_SETTINGS_OK, false, 0, 0);
+            }
+            if (widget.GetId() ==  "msgkcancel" ) {
+                AtomicMain.AppLog( "UIMessageWindow support : " + widget.GetId() + " was pressed ");
+                UIMessageWindow  mess3 = new UIMessageWindow( mylayout, "mymess3");
+                mess3.SubscribeToEvent<WidgetEvent> (mess3, HandleUimessagewindowEvent );
+                mess3.Show("MessageWindow - OK CANCEL", "this is a MessageWindow - OK CANCEL buttons", UI_MESSAGEWINDOW_SETTINGS.UI_MESSAGEWINDOW_SETTINGS_OK_CANCEL, false, 0, 0);
+            }
+            if (widget.GetId() ==  "msgyesno" ) {
+                AtomicMain.AppLog( "UIMessageWindow support : " + widget.GetId() + " was pressed ");
+                UIMessageWindow  mess4 = new UIMessageWindow( mylayout, "mymess4");
+                mess4.SubscribeToEvent<WidgetEvent> (mess4, HandleUimessagewindowEvent );
+                mess4.Show( "MessageWindow - YES NO", "this is a MessageWindow - YES NO buttons", UI_MESSAGEWINDOW_SETTINGS.UI_MESSAGEWINDOW_SETTINGS_YES_NO, false, 0, 0);
+            }
+
+            if (refid ==  "TBMessageWindow.ok" ) {
+                AtomicMain.AppLog( "UIMessageWindow event : " + refid + " closed the UIMessageWindow");
+            }
+            if (refid ==  "TBMessageWindow.cancel" ) {
+                AtomicMain.AppLog( "UIMessageWindow event : " + refid + " closed the UIMessageWindow");
+            }
+            if (refid ==  "TBMessageWindow.yes" ) {
+                AtomicMain.AppLog( "UIMessageWindow event : " + refid + " closed the UIMessageWindow");
+            }
+            if (refid ==  "TBMessageWindow.no" ) {
+                AtomicMain.AppLog( "UIMessageWindow event : " + refid + " closed the UIMessageWindow");
+            }
+        } else {
+            AtomicMain.AppLog( "UIMessageWindow event : " + widget.GetId() + " event type = " + AtomicMain.EventReport((int)ev.Type));
+        }
+    }
+}
+

+ 46 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uipromptwindow.cs

@@ -0,0 +1,46 @@
+// UIPromptWindow application source code
+using System;
+using AtomicEngine;
+
+public class code_uipromptwindow : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUipromptwindowEvent );
+        }
+    }
+
+    private static void HandlePromptCompleteEvent ( UIPromptCompleteEvent ev )
+    {
+        AtomicMain.AppLog( "UIPromptWindow event : the window " + ev.Title
+                           + " file was " + ev.Selected  + ", the button pressed was " + ev.Reason);
+    }
+
+    private static void HandleUipromptwindowEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uipromptwindowcode" ) {
+                AtomicMain.AppLog( "UIPromptWindow support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uipromptwindow.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uipromptwindowlayout" ) {
+                AtomicMain.AppLog( "UIPromptWindow support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uipromptwindow.ui.txt", widget.GetParent() );
+            }
+
+            if (widget.GetId() == "stringfinder" ) {
+                AtomicMain.AppLog( "UIPromptWindow action : " + widget.GetId() + " was pressed ");
+                UIWidget someview = (UIWidget  )widget.GetView();
+                UIPromptWindow  windowp = new  UIPromptWindow( someview, widget.GetId());
+                windowp.SubscribeToEvent<UIPromptCompleteEvent> (windowp, HandlePromptCompleteEvent );
+                windowp.Show( "WindowTitle", "Message in window", "preset value", 0, 0, 0);
+            }
+        }
+    }
+}
+

+ 57 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uipulldownmenu.cs

@@ -0,0 +1,57 @@
+// UIPulldownMenu application source code
+using System;
+using AtomicEngine;
+
+public class code_uipulldownmenu  : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUipulldownmenuEvent );
+        }
+        layout.SearchWidgetClass( "TBPulldownMenu", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUipulldownmenuEvent );
+        }
+    }
+
+    private static void HandleUipulldownmenuEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uipulldownmenucode" ) {
+                AtomicMain.AppLog( "UIPulldownMenu support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uipulldownmenu.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uipulldownmenulayout" ) {
+                AtomicMain.AppLog( "UIPulldownMenu support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uipulldownmenu.ui.txt", widget.GetParent() );
+            }
+        } else if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CHANGED ) {
+            if (widget.GetId() ==  "FileMenu" ) {
+                UIPulldownMenu  pdm = (UIPulldownMenu)widget;
+                if ( !pdm.Equals(null))
+                    AtomicMain.AppLog( "UIPulldownMenu event : " + widget.GetId() + " selected entry = " + pdm.GetSelectedId() );
+            }
+            if (widget.GetId() ==  "EditMenu" ) {
+                UIPulldownMenu  pdm = (UIPulldownMenu)widget;
+                if ( !pdm.Equals(null))
+                    AtomicMain.AppLog( "UIPulldownMenu event : " + widget.GetId() + " selected entry = " + pdm.GetSelectedId() );
+            }
+            if (widget.GetId() ==  "ViewMenu" ) {
+                UIPulldownMenu  pdm = (UIPulldownMenu)widget;
+                if ( !pdm.Equals(null))
+                    AtomicMain.AppLog( "UIPulldownMenu event : " + widget.GetId() + " selected entry = " +  pdm.GetSelectedId() );
+            }
+            if (widget.GetId() ==  "HelpMenu" ) {
+                UIPulldownMenu  pdm = (UIPulldownMenu)widget;
+                if ( !pdm.Equals(null))
+                    AtomicMain.AppLog( "UIPulldownMenu event : " + widget.GetId() + " selected entry = " + pdm.GetSelectedId() );
+            }
+        }
+    }
+}
+

+ 54 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uiradiobutton.cs

@@ -0,0 +1,54 @@
+// UIRadioButton application source code
+using System;
+using AtomicEngine;
+
+public class code_uiradiobutton  : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUiradiobuttonEvent );
+        }
+        UIWidget demochk = layout.GetWidget ("demoradio");
+        if ( !demochk.Equals(null))
+            demochk.SubscribeToEvent<WidgetEvent> ( demochk, HandleUiradiobuttonEvent );
+    }
+
+    private static void HandleUiradiobuttonEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uiradiobuttoncode" ) {
+                AtomicMain.AppLog( "UIRadioButton support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uiradiobutton.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uiradiobuttonlayout" ) {
+                AtomicMain.AppLog( "UIRadioButton support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uiradiobutton.ui.txt", widget.GetParent() );
+            }
+
+            if (widget.GetId() == "demoradio" ) {
+                AtomicMain.AppLog( "UIRadioButton event : " + widget.GetId() + " was pressed, state = " + widget.GetValue().ToString());
+            }
+
+            if (widget.GetId() ==  "radioset" ) {
+                UIWidget demochk = widget.FindWidget ("demoradio");
+                if (!demochk.Equals(null)) {
+                    demochk.SetValue (1);
+                    AtomicMain.AppLog( "UIRadioButton action : " + widget.GetId() + " was pressed, set state to 1" );
+                }
+            }
+            if (widget.GetId() ==  "radiounset" ) {
+                UIWidget demochk = widget.FindWidget ("demoradio");
+                if (!demochk.Equals(null)) {
+                    demochk.SetValue (0);
+                    AtomicMain.AppLog( "UIRadioButton action : " + widget.GetId() + " was pressed, set state to 0" );
+                }
+            }
+        }
+    }
+}
+

+ 64 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uisceneview.cs

@@ -0,0 +1,64 @@
+// UISceneView application source code
+// some code from UISceneview2D sample program
+using System;
+using AtomicEngine;
+
+public class code_uisceneview  : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUisceneviewEvent );
+        }
+
+        UISceneView mysceneview = new UISceneView();  // make a scene...view
+        mysceneview.SetId( "UISceneViewDemo"); // tag it, in case we want to get it again later
+        mysceneview.SubscribeToEvent<WidgetEvent> (mysceneview, HandleUisceneviewEvent );
+
+        var cache = GetSubsystem<ResourceCache>();
+        Scene  myscene = new Scene();
+        if ( !myscene.Equals(null) ) {
+            if ( myscene.LoadXML( (cache.GetFile("Scenes/sceneview.scene")))) {
+                Node cameraNode = myscene.GetChild("Camera", true);
+                Camera mycamera = cameraNode.GetComponent<Camera>();
+                mysceneview.SetView(myscene, mycamera);
+                mysceneview.SetAutoUpdate(true);
+            }
+        }
+
+        UILayoutParams lpx = new UILayoutParams();
+        lpx.SetWidth (640);
+        lpx.SetHeight(320);
+        lpx.SetMinWidth(640);
+        lpx.SetMinHeight(320);
+        lpx.SetMaxWidth (640);
+        lpx.SetMaxHeight(320);
+        mysceneview.SetLayoutParams(lpx);
+
+        UIWidget lower = layout.GetWidget("uisceneviewlower");
+        UIWidget mysvc = layout.GetWidget("sceneviewcontainer");
+        mysvc.AddChildBefore(mysceneview, lower);
+    }
+
+    private static void HandleUisceneviewEvent( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uisceneviewcode" ) {
+                AtomicMain.AppLog( "UISceneView support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uisceneview.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uisceneviewlayout" ) {
+                AtomicMain.AppLog( "UISceneView support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uisceneview.ui.txt", widget.GetParent() );
+            }
+        }
+        if ( widget.GetId() ==  "UISceneViewDemo" ) {
+            AtomicMain.AppLog( "UISceneView event : " + widget.GetId() + " got event= "+ AtomicMain.EventReport((int)ev.Type) );
+        }
+    }
+}
+

+ 47 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uiscrollbar.cs

@@ -0,0 +1,47 @@
+// UIScrollBar application source code
+using System;
+using AtomicEngine;
+
+public class code_uiscrollbar  : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUiscrollbarEvent );
+        }
+        UIWidget demo = layout.GetWidget ("scrollbardemo");
+        if ( !demo.Equals(null))
+            demo.SubscribeToEvent<WidgetEvent> ( HandleAllScrollcontainerEvent );
+    }
+
+    private static void HandleAllScrollcontainerEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CHANGED ) {
+            if (widget.GetId() ==  "scrollbardemo" ) {
+                AtomicMain.AppLog( "UIScrollBar action : " + widget.GetId() + " changed value to " + widget.GetValue().ToString());
+            }
+        }
+    }
+
+    private static void HandleUiscrollbarEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uiscrollbarcode" ) {
+                AtomicMain.AppLog( "UIScrollBar support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uiscrollbar.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uiscrollbarlayout" ) {
+                AtomicMain.AppLog( "UIScrollBar support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uiscrollbar.ui.txt", widget.GetParent() );
+            }
+        }
+    }
+}
+

+ 32 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uiscrollcontainer.cs

@@ -0,0 +1,32 @@
+// UIScrollContainer application source code
+using System;
+using AtomicEngine;
+
+public class code_uiscrollcontainer  : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUiscrollcontainerEvent );
+        }
+    }
+
+    private static void HandleUiscrollcontainerEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uiscrollcontainercode" ) {
+                AtomicMain.AppLog( " support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uiscrollcontainer.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uiscrollcontainerlayout" ) {
+                AtomicMain.AppLog( " support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uiscrollcontainer.ui.txt", widget.GetParent() );
+            }
+        }
+    }
+}
+

+ 47 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uisection.cs

@@ -0,0 +1,47 @@
+// UISection application source code
+using System;
+using AtomicEngine;
+
+public class code_uisection : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUisectionEvent );
+        }
+        UIWidget  sec1 = layout.GetWidget("UISectionDemo");
+        if ( !sec1.Equals(null))
+            sec1.SubscribeToEvent<WidgetEvent> (sec1, HandleUisectionEvent );
+        UIWidget  sec2 = layout.GetWidget("UISection2Demo");
+        if ( !sec2.Equals(null))
+            sec2.SubscribeToEvent<WidgetEvent> (sec2, HandleUisectionEvent );
+    }
+
+    private static void HandleUisectionEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uisectioncode" ) {
+                AtomicMain.AppLog( "UISection support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uisection.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uisectionlayout" ) {
+                AtomicMain.AppLog( "UISection support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uisection.ui.txt", widget.GetParent() );
+            }
+        }
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CHANGED ) {
+            UIWidget  demo1 = widget.FindWidget("UISectionDemo"); // event comes in on child widget!
+            if ( demo1.IsAncestorOf(widget) )
+                AtomicMain.AppLog( "UISection event : " +  demo1.GetId() + " changed to value = " + demo1.GetValue().ToString());
+
+            UIWidget  demo2 = widget.FindWidget("UISection2Demo");
+            if ( demo2.IsAncestorOf(widget)  )
+                AtomicMain.AppLog( "UISection event : " +  demo2.GetId() + " changed to value = " + demo2.GetValue().ToString());
+        }
+    }
+}
+

+ 47 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uiselectdropdown.cs

@@ -0,0 +1,47 @@
+// UISelectDropdown application source code
+using System;
+using AtomicEngine;
+
+public class code_uiselectdropdown  : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUiselectdropdownEvent );
+        }
+        UIWidget demo = layout.GetWidget("selectdropdowndemo");
+        if ( !demo.Equals(null))
+            demo.SubscribeToEvent<WidgetEvent> ( HandleAllSelectdropdownEvent );
+    }
+
+    private static void HandleAllSelectdropdownEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CHANGED) {
+            if (widget.GetId() ==  "selectdropdowndemo" ) {
+                AtomicMain.AppLog( "UISelectDropdown event : " + widget.GetId() + " changed value to " + widget.GetText());
+            }
+        }
+    }
+
+    private static void HandleUiselectdropdownEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uiselectdropdowncode" ) {
+                AtomicMain.AppLog( "UISelectDropdown support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uiselectdropdown.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uiselectdropdownlayout" ) {
+                AtomicMain.AppLog( "UISelectDropdown support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uiselectdropdown.ui.txt", widget.GetParent() );
+            }
+        }
+    }
+}
+

+ 94 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uiselectitem.cs

@@ -0,0 +1,94 @@
+// UISelectItem and UISelectItemSource application source code
+using System;
+using AtomicEngine;
+
+public class code_uiselectitem  : CSComponent {
+
+    private static UISelectItemSource sis;
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUiselectitemEvent );
+        }
+
+        UISelectList  mylist = new UISelectList();
+        mylist.SetId( "UISelectItemList"); // tag it, in case we want to get it again later
+        UILayoutParams lpx = new UILayoutParams();
+        lpx.SetWidth (200);
+        lpx.SetHeight(256);
+        lpx.SetMinWidth(200);
+        lpx.SetMinHeight(256);
+        lpx.SetMaxWidth (200);
+        lpx.SetMaxHeight(256);
+        mylist.SetLayoutParams(lpx);
+        UIWidget lower = layout.GetWidget("selectitemlower");
+        UIWidget mysvc = layout.GetWidget("selectitemlayout");
+        mysvc.AddChildBefore(mylist, lower);
+        mylist.SubscribeToEvent<WidgetEvent> (mylist, HandleUiselectitemEvent );
+
+        sis = new UISelectItemSource();
+        sis.AddItem( new UISelectItem( "UISelectItem1", "sitem1" ) );
+        sis.AddItem( new UISelectItem( "UISelectItem2", "sitem2" ) );
+        sis.AddItem( new UISelectItem( "UISelectItem3", "sitem3", "DuckButton" ) );
+        sis.AddItem( new UISelectItem( "UISelectItem4", "sitem4", "LogoAtomic" ) );
+
+        mylist.SetSource(sis); // assign this into the list
+    }
+
+
+    private static void HandleUiselectitemEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        string refid  = (string)ev.RefID;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uiselectitemcode" ) {
+                AtomicMain.AppLog( "UISelectItem support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uiselectitem.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uiselectitemlayout" ) {
+                AtomicMain.AppLog( "UISelectItem support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uiselectitem.ui.txt", widget.GetParent() );
+            }
+
+            if (widget.GetId() ==  "UISelectItemList" ) {
+                AtomicMain.AppLog( "UISelectItem event : " + widget.GetId() + " and " + refid + " was selected ");
+            }
+
+            if (widget.GetId() ==  "uisi1" ) {
+                AtomicMain.AppLog( "UISelectItem action : " + widget.GetId() + " was pressed ");
+                UISelectList  slist = (UISelectList)widget.FindWidget("UISelectItemList");
+                sis.AddItem( new UISelectItem( "New UISelectItem") );
+                slist.SetSource(sis);
+            }
+            if (widget.GetId() ==  "uisi2" ) {
+                AtomicMain.AppLog( "UISelectItem action : " + widget.GetId() + " was pressed ");
+                UISelectList  slist = (UISelectList)widget.FindWidget("UISelectItemList");
+                sis.AddItem( new UISelectItem( "Newer UISelectItem", "neweritem" ) );
+                slist.SetSource(sis);
+            }
+            if (widget.GetId() ==  "uisi3" ) {
+                AtomicMain.AppLog( "UISelectItem action : " + widget.GetId() + " was pressed ");
+                UISelectList  slist = (UISelectList)widget.FindWidget("UISelectItemList");
+                sis.AddItem( new UISelectItem( "A Duck", "aduck", "DuckButton" ) );
+                slist.SetSource(sis);
+            }
+            if (widget.GetId() ==  "uisi4" ) {
+                AtomicMain.AppLog( "UISelectItem action : " + widget.GetId() + " was pressed ");
+                UISelectList  slist = (UISelectList)widget.FindWidget("UISelectItemList");
+                sis.AddItem( new UISelectItem( "Atomic!", "atomic", "LogoAtomic" ) );
+                slist.SetSource(sis);
+            }
+            if (widget.GetId() ==  "uisi5" ) {
+                AtomicMain.AppLog( "UISelectItem action : " + widget.GetId() + " was pressed ");
+                UISelectList  slist = (UISelectList)widget.FindWidget("UISelectItemList");
+                sis.Clear();
+                slist.SetSource(sis);
+            }
+        }
+    }
+}
+

+ 69 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uiselectlist.cs

@@ -0,0 +1,69 @@
+// UISelectList application source code
+using System;
+using AtomicEngine;
+
+public class code_uiselectlist  : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUiselectlistEvent );
+        }
+        UIWidget demo = layout.GetWidget("UISelectListDemo");
+        if ( !demo.Equals(null))
+            demo.SubscribeToEvent<WidgetEvent> (demo, HandleUiselectlistEvent );
+    }
+
+    private static void HandleUiselectlistEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        string refid  = (string)ev.RefID;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uiselectlistcode" ) {
+                AtomicMain.AppLog( "UISelectList support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uiselectlist.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uiselectlistlayout" ) {
+                AtomicMain.AppLog( "UISelectList support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uiselectlist.ui.txt", widget.GetParent() );
+            }
+
+            if (widget.GetId() ==  "UISelectListDemo" ) {
+                AtomicMain.AppLog( "UISelectList event : " + widget.GetId() + " and " + refid + " was selected ");
+            }
+
+            if (widget.GetId() ==  "selectlistadd" ) {
+                AtomicMain.AppLog( "UISelectList action : " + widget.GetId() + " was pressed ");
+                UISelectList  slist = (UISelectList)widget.FindWidget("UISelectListDemo");
+                slist.AddItem(slist.GetNumItems(), "New Entry");
+            }
+            if (widget.GetId() ==  "selectlistdel" ) {
+                AtomicMain.AppLog( "UISelectList action : " + widget.GetId() + " was pressed ");
+                UISelectList  slist = (UISelectList)widget.FindWidget("UISelectListDemo");
+                int si = (int)slist.GetValue(); // this is the selected index
+                slist.DeleteItem(si);
+            }
+            if (widget.GetId() ==  "selectlistdelall" ) {
+                AtomicMain.AppLog( "UISelectList action : " + widget.GetId() + " was pressed ");
+                UISelectList  slist = (UISelectList)widget.FindWidget("UISelectListDemo");
+                slist.DeleteAllItems();
+            }
+            if (widget.GetId() ==  "selectlistnew" ) {
+                AtomicMain.AppLog( "UISelectList action : " + widget.GetId() + " was pressed ");
+                UISelectList  slist = (UISelectList)widget.FindWidget("UISelectListDemo");
+                UISelectItemSource  sis = new UISelectItemSource();
+                sis.AddItem( new UISelectItem( "list 1","list1", "LogoAtomic" ));
+                sis.AddItem( new UISelectItem( "list 2","list2", "" ));
+                sis.AddItem( new UISelectItem( "list 3","list3", "" ));
+                sis.AddItem( new UISelectItem( "list 4","list4", "" ));
+                sis.AddItem( new UISelectItem( "list 5","list5", "" ));
+                sis.AddItem( new UISelectItem( "list 6","list6", "" ));
+                slist.SetSource(sis);
+            }
+        }
+    }
+}
+

+ 32 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uiseparator.cs

@@ -0,0 +1,32 @@
+// UISeparator application source code
+using System;
+using AtomicEngine;
+
+public class code_uiseparator  : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUiseparatorEvent );
+        }
+    }
+
+    private static void HandleUiseparatorEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uiseparatorcode" ) {
+                AtomicMain.AppLog( "UISeparator support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uiseparator.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uiseparatorlayout" ) {
+                AtomicMain.AppLog( "UISeparator support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uiseparator.ui.txt", widget.GetParent() );
+            }
+        }
+    }
+}
+

+ 32 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uiskinimage.cs

@@ -0,0 +1,32 @@
+// UISkinImage application source code
+using System;
+using AtomicEngine;
+
+public class code_uiskinimage  : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUiskinimageEvent );
+        }
+    }
+
+    private static void HandleUiskinimageEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uiskinimagecode" ) {
+                AtomicMain.AppLog( "UISkinImage support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uiskinimage.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uiskinimagelayout" ) {
+                AtomicMain.AppLog( "UISkinImage support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uiskinimage.ui.txt", widget.GetParent() );
+            }
+        }
+    }
+}
+

+ 48 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uislider.cs

@@ -0,0 +1,48 @@
+// UISlider application source code
+using System;
+using AtomicEngine;
+
+public class code_uislider : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUisliderEvent );
+        }
+        UIWidget demo = layout.GetWidget ("sliderdemo");
+        if ( !demo.Equals(null))
+            demo.SubscribeToEvent<WidgetEvent> ( demo, HandleAllSliderEvent );
+    }
+
+    private static void HandleAllSliderEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CHANGED ) {
+            if (widget.GetId() ==  "sliderdemo" ) {
+                AtomicMain.AppLog( "UISlider action : " + widget.GetId() + " changed value to " + widget.GetValue().ToString());
+            }
+        }
+    }
+
+    private static void HandleUisliderEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+
+            if (widget.GetId() == "uislidercode" ) {
+                AtomicMain.AppLog( "UISlider support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uislider.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uisliderlayout" ) {
+                AtomicMain.AppLog( "UISlider support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uislider.ui.txt", widget.GetParent() );
+            }
+        }
+    }
+}
+

+ 99 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uitabcontainer.cs

@@ -0,0 +1,99 @@
+// UITabContainer application source code
+using System;
+using AtomicEngine;
+
+public class code_uitabcontainer  : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUitabcontainerEvent );
+        }
+        UITabContainer demo = (UITabContainer)layout.GetWidget ("UITabContainerDemo");
+        if ( !demo.Equals(null)) {
+            demo.SetCurrentPage(0);
+            //spammy    demo.SubscribeToEvent<WidgetEvent>( HandleAllTabcontainerEvent );
+        }
+    }
+
+    private static void HandleAllTabcontainerEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+
+        if (widget.GetId() ==  "UITabContainerDemo" && ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_TAB_CHANGED ) {
+            UITabContainer  tcx = (UITabContainer)widget;  // check the focus & stuff, or it gets a little spammy
+            AtomicMain.AppLog( "UITabContainer event : " + widget.GetId() + " UI_EVENT_TYPE_TAB_CHANGED to " + tcx.GetCurrentPage().ToString()
+                               + " id: " + tcx.GetCurrentPageWidget().GetId() );
+        }
+    }
+
+    private static void HandleUitabcontainerEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        string refid  = (string)ev.RefID;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uitabcontainercode" ) {
+                AtomicMain.AppLog( "UITabContainer support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uitabcontainer.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uitabcontainerlayout" ) {
+                AtomicMain.AppLog( "UITabContainer support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uitabcontainer.ui.txt", widget.GetParent() );
+            }
+
+
+            if (widget.GetId() ==  "uitabcontainerremove" ) {
+                AtomicMain.AppLog( "UITabContainer action : " + widget.GetId() + " was pressed ");
+                UITabContainer  tcx = (UITabContainer)widget.FindWidget("UITabContainerDemo");
+                int current = tcx.GetCurrentPage();
+                tcx.DeletePage(current);
+            }
+            if (widget.GetId() ==  "uitabcontaineradd" ) {
+                AtomicMain.AppLog( "UITabContainer action : " + widget.GetId() + " was pressed ");
+                UITabContainer  tcx = (UITabContainer)widget.FindWidget("UITabContainerDemo");
+                tcx.AddTabPageFile("New File", "Scenes/sheet.ui.txt" );
+            }
+            if (widget.GetId() ==  "uitabcontainermake" ) {
+                AtomicMain.AppLog( "UITabContainer action : " + widget.GetId() + " was pressed ");
+                var cache = GetSubsystem<ResourceCache>();
+                UITabContainer  tcx = (UITabContainer)widget.FindWidget("UITabContainerDemo");
+                UILayout  lo = new UILayout();
+                lo.SetLayoutConfig ( "YAGAC" );  // YACAC!
+                UIEditField  myeditfield = new UIEditField();
+                myeditfield.SetGravity( UI_GRAVITY.UI_GRAVITY_ALL);
+                myeditfield.SetMultiline(true);
+                File filex = cache.GetFile("Components/code_uitabcontainer.cs");
+                String textx = filex.ReadText();
+                filex.Close();
+                myeditfield.SetText(textx);
+                UIFontDescription  myfont = new UIFontDescription(); // put in a coder font
+                myfont.SetSize(16);
+                myfont.SetId("Vera");
+                myeditfield.SetFontDescription (myfont);
+                lo.AddChild (myeditfield);
+                tcx.AddTabPageWidget("New Code", lo);
+            }
+            if (widget.GetId() ==  "uitabcontainerundock" ) {
+                AtomicMain.AppLog( "UITabContainer action : " + widget.GetId() + " was pressed ");
+                UITabContainer  tcx = (UITabContainer)widget.FindWidget("UITabContainerDemo");
+                int current = tcx.GetCurrentPage();
+                tcx.UndockPage(current);
+            }
+            if (widget.GetId() ==  "uitabcontainerredock" ) {
+                AtomicMain.AppLog( "UITabContainer action : " + widget.GetId() + " was pressed ");
+                UITabContainer  tcx = (UITabContainer)widget.FindWidget("UITabContainerDemo");
+                if ( !tcx.DockWindow ( "tab1" ) )
+                    if ( !tcx.DockWindow ( "tab2" ) )
+                        if ( !tcx.DockWindow ( "tab3" ) )
+                            if ( !tcx.DockWindow ( "New File" ) )
+                                if ( !tcx.DockWindow ( "New Code" ) )
+                                    AtomicMain.AppLog( "UITabContainer action : no more windows to dock.");
+            }
+        }
+    }
+}
+

+ 32 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uitextfield.cs

@@ -0,0 +1,32 @@
+// UITextField application source code
+using System;
+using AtomicEngine;
+
+public class code_uitextfield  : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUitextfieldEvent );
+        }
+    }
+
+    private static void HandleUitextfieldEvent( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uitextfieldcode" ) {
+                AtomicMain.AppLog( " support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uitextfield.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uitextfieldlayout" ) {
+                AtomicMain.AppLog( " support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uitextfield.ui.txt", widget.GetParent() );
+            }
+        }
+    }
+}
+

+ 91 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uitexturewidget.cs

@@ -0,0 +1,91 @@
+// UITextureWidget application source code
+using System;
+using AtomicEngine;
+
+public class code_uitexturewidget : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUitexturewidgetEvent );
+        }
+
+        var cache = GetSubsystem<ResourceCache>();
+        UITextureWidget  mytexturewidget = new UITextureWidget();
+        mytexturewidget.SetId( "UITextureWidgetDemo");
+        Texture2D  mytex = new Texture2D();
+        if ( !mytex.Equals(null) ) {
+            mytex = cache.GetResource<Texture2D>("Textures/planet.jpg");
+            mytexturewidget.SetTexture(mytex);
+        }
+        mytexturewidget.SubscribeToEvent<WidgetEvent> ( mytexturewidget, HandleUitexturewidgetEvent );
+        UILayoutParams  lpx = new UILayoutParams();
+        lpx.SetWidth (256);
+        lpx.SetHeight(256);
+        lpx.SetMinWidth(256);
+        lpx.SetMinHeight(256);
+        lpx.SetMaxWidth (256);
+        lpx.SetMaxHeight(256);
+        mytexturewidget.SetLayoutParams(lpx);
+        UIWidget  lower = layout.GetWidget("uitexturewidgetlower");
+        UIWidget  mysvc = layout.GetWidget("uitwcontainer");
+        mysvc.AddChildBefore( mytexturewidget, lower);
+
+        UILayout  lo1 = new UILayout();
+        mysvc.AddChildBefore(lo1, lower);
+
+        UIButton  b1 = new UIButton();
+        b1.SetId( "uitexturewidgetch1");
+        b1.SetText("Change texture to new build");
+        lo1.AddChild(b1);
+        b1.SubscribeToEvent<WidgetEvent> ( b1, HandleUitexturewidgetEvent );
+        UIButton  b2 = new UIButton();
+        b2.SetId( "uitexturewidgetch2");
+        b2.SetText("Change texture to colorwheel");
+        lo1.AddChild(b2);
+        b2.SubscribeToEvent<WidgetEvent> ( b2, HandleUitexturewidgetEvent );
+        UIButton  b3 = new UIButton();
+        b3.SetId( "uitexturewidgetch3");
+        b3.SetText("Change texture to planet");
+        lo1.AddChild(b3);
+        b3.SubscribeToEvent<WidgetEvent> ( b3, HandleUitexturewidgetEvent );
+    }
+
+    private static void HandleUitexturewidgetEvent( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uitexturewidgetcode" ) {
+                AtomicMain.AppLog( "UITextureWidget support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uitexturewidget.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uitexturewidgetlayout" ) {
+                AtomicMain.AppLog( "UITextureWidget support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uitexturewidget.ui.txt", widget.GetParent() );
+            }
+
+            if (widget.GetId() ==  "uitexturewidgetch1" ) {
+                AtomicMain.AppLog( "UITextureWidget support : " + widget.GetId() + " was pressed ");
+                var cache = GetSubsystem<ResourceCache>();
+                UITextureWidget tw = (UITextureWidget)widget.FindWidget("UITextureWidgetDemo");
+                tw.SetTexture( cache.GetResource<Texture2D>("Textures/newbuilddetected_header.jpg") );
+            }
+            if (widget.GetId() ==  "uitexturewidgetch2" ) {
+                AtomicMain.AppLog( "UITextureWidget support : " + widget.GetId() + " was pressed ");
+                var cache = GetSubsystem<ResourceCache>();
+                UITextureWidget tw = (UITextureWidget)widget.FindWidget("UITextureWidgetDemo");
+                tw.SetTexture( cache.GetResource<Texture2D>("Textures/HSV21.png") );
+            }
+            if (widget.GetId() ==  "uitexturewidgetch3" ) {
+                AtomicMain.AppLog( "UITextureWidget support : " + widget.GetId() + " was pressed ");
+                var cache = GetSubsystem<ResourceCache>();
+                UITextureWidget tw = (UITextureWidget)widget.FindWidget("UITextureWidgetDemo");
+                tw.SetTexture( cache.GetResource<Texture2D>("Textures/planet.jpg") );
+            }
+        }
+    }
+}
+

+ 32 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uiwidget.cs

@@ -0,0 +1,32 @@
+// UIWidgetapplication source code
+using System;
+using AtomicEngine;
+
+public class code_uiwidget : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUiwidgetEvent );
+        }
+    }
+
+    private static void HandleUiwidgetEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uiwidgetcode" ) {
+                AtomicMain.AppLog( "UIWidgetsupport : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uiwidget.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uiwidgetlayout" ) {
+                AtomicMain.AppLog( "UIWidgetsupport : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uiwidget.ui.txt", widget.GetParent() );
+            }
+        }
+    }
+}
+

+ 71 - 0
UIPeriodicTable/CSharp/Resources/Components/code_uiwindow.cs

@@ -0,0 +1,71 @@
+// UIWindow application source code
+using System;
+using AtomicEngine;
+
+public class code_uiwindow  : CSComponent {
+
+    public void Setup( UIWidget  layout )
+    {
+        var dest = new AtomicEngine.Vector<AtomicEngine.UIWidget>();
+        layout.SearchWidgetClass( "TBButton", dest );
+        for (var ii = 0; ii < dest.Size; ii++) {
+            dest[ii].SubscribeToEvent<WidgetEvent> (dest [ii], HandleUiwindowEvent );
+        }
+    }
+
+    private static void HandleUiwindowEvent ( WidgetEvent ev )
+    {
+        UIWidget widget = (UIWidget)ev.Target;
+        if ( widget.Equals(null)) return;
+        if ( ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+            if (widget.GetId() == "uiwindowcode" ) {
+                AtomicMain.AppLog( "UIWindow support : " + widget.GetId() + " was pressed " );
+                AtomicMain.ViewCode ( "Components/code_uiwindow.cs", widget.GetParent() );
+            }
+            if (widget.GetId() ==  "uiwindowlayout" ) {
+                AtomicMain.AppLog( "UIWindow support : " + widget.GetId() + " was pressed ");
+                AtomicMain.ViewCode ( "Scenes/layout_uiwindow.ui.txt", widget.GetParent() );
+            }
+
+            if (widget.GetId() == "windowdemo" ) {
+                AtomicMain.AppLog( "UIWindow action : " + widget.GetId() + " was pressed " );
+                UIView someview = widget.GetView();
+                UIWindow window = new UIWindow();
+                window.SetSettings (UI_WINDOW_SETTINGS.UI_WINDOW_SETTINGS_DEFAULT );
+                window.SetText("UIWindow demo (a login dialog)");
+                window.Load("Scenes/login_dialog.ui.txt");
+                window.ResizeToFitContent();
+                someview.AddChild(window);
+                window.Center();
+                UIWidget login = window.GetWidget("login");
+                login.SubscribeToEvent<WidgetEvent> (login, HandleUiwindowEvent );
+                UIWidget cancel = window.GetWidget("cancel");
+                cancel.SubscribeToEvent<WidgetEvent> (cancel, HandleUiwindowEvent );
+            }
+            if (widget.GetId() == "login" ) {
+                AtomicMain.AppLog( "UIWindow action : " + widget.GetId() + " was pressed " );
+                UIWindow  mywindow = (UIWindow)AtomicMain.FindTheWindowParent(widget);
+                if (!mywindow.Equals(null))
+                    mywindow.Close();
+            }
+            if (widget.GetId() == "cancel" ) {
+                AtomicMain.AppLog( "UIWindow action : " + widget.GetId() + " was pressed " );
+                UIWindow  mywindow = (UIWindow)AtomicMain.FindTheWindowParent(widget);
+                if (!mywindow.Equals(null))
+                    mywindow.Close();
+            }
+            if (widget.GetId() == "windowdemo1" ) {
+                AtomicMain.AppLog( "UIWindow action : " + widget.GetId() + " was pressed " );
+                UIView  someview = widget.GetView();
+                UIWindow  window = new UIWindow();
+                window.SetSettings ( UI_WINDOW_SETTINGS.UI_WINDOW_SETTINGS_DEFAULT );
+                window.SetText("UIWindow demo (a table)" );
+                window.Load("Scenes/sheet.ui.txt");
+                window.ResizeToFitContent();
+                someview.AddChild(window);
+                window.Center();
+            }
+        }
+    }
+}
+

+ 9 - 0
UIPeriodicTable/CSharp/Resources/Materials/planet.material

@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<material>
+	<technique name="Techniques/Diff.xml" />
+	<texture unit="diffuse" name="Textures/planet.jpg" />
+	<parameter name="MatDiffColor" value="0.8 0.8 0.8 1" />
+	<parameter name="MatSpecColor" value="0.501961 0.750693 0.8 384.314" />
+	<parameter name="MatEmissiveColor" value="0 0 0 1" />
+</material>
+

BIN
UIPeriodicTable/CSharp/Resources/Models/Sphere.mdl


+ 14 - 0
UIPeriodicTable/CSharp/Resources/Scenes/Scene.scene

@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<scene id="1">
+	<attribute name="Name" value="" />
+	<attribute name="Time Scale" value="1" />
+	<attribute name="Smoothing Constant" value="50" />
+	<attribute name="Snap Threshold" value="5" />
+	<attribute name="Elapsed Time" value="0" />
+	<attribute name="Next Replicated Node ID" value="363" />
+	<attribute name="Next Replicated Component ID" value="1975" />
+	<attribute name="Next Local Node ID" value="16778496" />
+	<attribute name="Next Local Component ID" value="16777216" />
+	<attribute name="Variables" />
+	<attribute name="Variable Names" value="" />
+</scene>

+ 23 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uibargraph.ui.txt

@@ -0,0 +1,23 @@
+# UIBargraph widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIBargraph widget\nThis widget displays a value from 0-100"
+	TBContainer
+		TBBarGraph: value: 0, skin: Graph, color: #00AF34, axis: y, connection: graphit, margin: 4
+			lp: width: 32, height: 64
+	TBContainer
+		TBBarGraph: value: 0, skin: background_solid, color: #AF3400, axis: x, connection: graphit
+			lp: width: 200, height: 32
+	TBContainer
+		TBBarGraph: value: 0, skin: Gauge, color: #0034AF, axis: x, opacity: 0.7, connection: graphit
+			lp: width: 200, height: 32
+	TBTextField: id: spacer, text: "  "
+	TBTextField: text: "Use this slider to change the bargraph input value"
+	TBSlider: min: 0, max: 100, value: 21, connection: graphit
+		lp: width: 200
+	TBTextField: id: spacer, text: "  "
+	TBLayout
+		TBButton: text: "UIBargraph help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uibargraph.html"
+		TBButton: text: "UIBargraph application code", id: uibargraphcode
+		TBButton: text: "UIBargraph layout code", id: uibargraphlayout
+

+ 20 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uibutton.ui.txt

@@ -0,0 +1,20 @@
+# UIButton widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIButton widget\nThis widget generates an event when pressed.\nThe Statusbar will display the event information."
+	TBTextField: id: spacer, text: "   "
+	TBContainer
+		TBLayout: axis: y
+			TBButton: text: "Press me!", id: demobutton
+			TBButton: id: buttonducky, skin: DuckButton
+			TBButton: id: buttonready
+				TBSkinImage: skin: ReadyButton
+			TBButton: id: buttonatomic
+				TBSkinImage: skin: LogoAtomic
+			TBButton: id: buttongreen, text: "Press me, I`m green", skin: ColorButton
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UIButton help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uibutton.html"
+		TBButton: text: "UIButton application code", id: uibuttoncode
+		TBButton: text: "UIButton layout code", id: uibuttonlayout
+

+ 16 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uicheckbox.ui.txt

@@ -0,0 +1,16 @@
+# UICheckBox widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UICheckbox widget\nThis widget displays and can change a boolean state.\nThe Statusbar will display the results."
+	TBTextField: id: spacer, text: "   "
+	TBContainer
+		TBCheckBox: id: democheck
+	TBTextField: id: spacer, text: "   "
+	TBButton: id: "checkset", text: "Set the Checkbox ON"
+	TBButton: id: "checkunset", text: "Set the Checkbox OFF"
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UICheckBox help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uicheckbox.html"
+		TBButton: text: "UICheckBox application code", id: uicheckboxcode
+		TBButton: text: "UICheckBox layout code", id: uicheckboxlayout
+

+ 16 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uiclicklabel.ui.txt

@@ -0,0 +1,16 @@
+# UIClickLabel widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIClickLabel widget\nThis widget is a helper for the Checkbox and RadioButton.\nIt will operate those buttons by clicking on the label next to it."
+	TBContainer
+		TBLayout: axis: y
+			TBClickLabel: id: democlicklabel, text: "Click my Label"
+				TBCheckBox: id: somecheck
+			TBClickLabel: id: democlicklabel, text: "Click my Label"
+				TBRadioButton: id: someradio
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UIClickLabel help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uiclicklabel.html"
+		TBButton: text: "UIClickLabel application code", id: uiclicklabelcode
+		TBButton: text: "UIClickLabel layout code", id: uiclicklabellayout
+

+ 18 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uicolorwheel.ui.txt

@@ -0,0 +1,18 @@
+# UIColorWheel widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIColorWheel widget\nThis widget can pick an HS(V) color.\nThe Statusbar will display the results."
+
+	TBContainer
+		TBColorWheel: id: colorwheeldemo, skin: HSVSkin
+			lp: width: 256, height: 256
+
+#	TBContainer: id: "MATRIXTEST", text: "UIButtonMatrix Test"
+#		lp: min-width: 256, min-height: 256
+
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UIColorWheel help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uicolorwheel.html"
+		TBButton: text: "UIColorWheel application code", id: uicolorwheelcode
+		TBButton: text: "UIColorWheel layout code", id: uicolorwheellayout
+

+ 16 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uicolorwidget.ui.txt

@@ -0,0 +1,16 @@
+# UIColorWidget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIColorWidget widget\nThis widget displays an RGB color."
+	TBContainer
+		TBColorWidget: value: 0, skin: background_solid, color: #00AF77, id: colorwidgetdemo
+			lp: width: 256, height: 64
+	TBButton: text: "Change color to red", id: uicolorwidgetred
+	TBButton: text: "Change color to green", id: uicolorwidgetgreen
+	TBButton: text: "Change color to blue", id: uicolorwidgetblue
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UIColorWidget help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uicolorwidget.html"
+		TBButton: text: "UIColorWidget application code", id: uicolorwidgetcode
+		TBButton: text: "UIColorWidget layout code", id: uicolorwidgetlayout
+

+ 15 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uicontainer.ui.txt

@@ -0,0 +1,15 @@
+# UIContainer widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIContainer widget\nThis is a container that displays a etched line around its perimeter."
+	TBTextField: id: spacer, text: "   "
+	TBContainer
+		TBWidget
+			lp: width: 256, height: 64
+	TBTextField: text: "Its right there ^"
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UIContainer help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uicontainer.html"
+		TBButton: text: "UIContainer application code", id: uicontainercode
+		TBButton: text: "UIContainer layout code", id: uicontainerlayout
+

+ 19 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uieditfield.ui.txt

@@ -0,0 +1,19 @@
+# UIEditField widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIEditField widget\nThis widget is used to display text, and can change the text it contains.\nThe Statusbar will display the results.\n*Hint - If you want to display XML correctly, turn off Styling, like `styling: 0`\n*Another Hint - there is a built-in context menu with M3, or long press on mobile."
+	TBContainer
+		TBEditField: id: editfieldsingle, text: "Example of a single line EditField widget"
+			lp: pref-width: 512dp
+	TBTextField: text: "Example of a multline line EditField widget"
+	TBEditField: id: editfieldmulti, multiline: 1, styling: 1, readonly: 0, adapt-to-content: 0
+		lp: pref-width: 512dp, pref-height: 200dp
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: id: "editfieldadd", text: "Add file to Multiline UIEditField"
+		TBButton: id: "editfieldclr", text: "Clear Multiline UIEditField"
+	TBLayout
+		TBButton: text: "UIEditField help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uieditfield.html"
+		TBButton: text: "UIEditField application code", id: uieditfieldcode
+		TBButton: text: "UIEditField layout code", id: uieditfieldlayout
+

+ 13 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uifinderwindow.ui.txt

@@ -0,0 +1,13 @@
+# UIFinderWindow widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIFinderWindow\nThis widget is used to browse the filesystem for files or folders.\nThe Statusbar will display the results."
+	TBTextField: id: spacer, text: "   "
+	TBButton: id: "filefinder", text: "Bring up a File Finder..."
+	TBButton: id: "folderfinder", text: "Bring up a Folder Finder..."
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: id: "uifinderwindowhelp", text: "UIFinderWindow help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uifinderwindow.html"
+		TBButton: text: "UIFinderWindow application code", id: uifinderwindowcode
+		TBButton: text: "UIFinderWindow layout code", id: uifinderwindowlayout
+

+ 20 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uifontdescription.ui.txt

@@ -0,0 +1,20 @@
+# UIFontdescription object layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIFontdescription object\nThis object is used to define a font and size attribute\nIt is then assigned to a widget to change the font displayed."
+	TBTextField: text: "UIFontdescription size 8"
+		font: size: 8dp
+	TBTextField: text: "UIFontdescription size 18"
+		font: size: 18dp
+	TBTextField: text: "UIFontdescription size 80"
+		font: size: 80, name: "BrokenGlass"
+	TBTextField: text: "Use this slider to change the text size from 8 to 72"
+	TBSlider: min: 8.0, max: 72.0, value: 1, id: fontstep
+		lp: width: 256
+	TBTextField: text: "Size 8", id: changetext, squeezable: true
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UIFontdescription help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uifontdescription.html"
+		TBButton: text: "UIFontdescription application code", id: uifontdescriptioncode
+		TBButton: text: "UIFontdescription layout code", id: uifontdescriptionlayout
+

+ 14 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uiimagewidget.ui.txt

@@ -0,0 +1,14 @@
+# UIImageWidget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIImageWidget\nThis widget can display an image from a file.\n"
+	TBContainer
+		TBImageWidget: id: imagewidgetdemo, filename: "Textures/newbuilddetected_header.jpg"
+	TBButton: text: "Change image to colorwheel", id: imagecolor
+	TBButton: text: "Change image to newbuild", id: imagenewbuild
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UIImageWidget help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uiimagewidget.html"
+		TBButton: text: "UIImageWidget application code", id: uiimagewidgetcode
+		TBButton: text: "UIImageWidget layout code", id: uiimagewidgetlayout
+

+ 16 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uiinlineselect.ui.txt

@@ -0,0 +1,16 @@
+# UIInlineSelect widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIInlineSelect widget\nThis widget displays and can change a value with the editfield and arrow buttons.\nThe Statusbar will display the results."
+	TBTextField: id: spacer, text: "   "
+	TBInlineSelect: id: inlineselectdemo
+	TBTextField: id: spacer, text: "   "
+	TBTextField: text: "Use this slider to change the step size from .1 to 2"
+	TBSlider: min: 0.1, max: 2.0, value: 1, id: ilsstep
+		lp: width: 200
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UIInlineSelect help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uiinlineselect.html"
+		TBButton: text: "UIInlineSelect application code", id: uiinlineselectcode
+		TBButton: text: "UIInlineSelect layout code", id: uiinlineselectlayout
+

+ 5 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uilayout.ui.txt

@@ -0,0 +1,5 @@
+# UILayout widget layout file
+TBLayout: id: uilayoutcontainer, config: "Y----"
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UILayout widget. This widget is used to contain and arrange widgets into rows and columns. Try the LAYOUT-O-MATIC!"
+

+ 34 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uilayoutparams.ui.txt

@@ -0,0 +1,34 @@
+# UILayoutParams Object layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UILayoutParams object\nThis object is used to effect sizing of items in a Layout,\nwhen the general layout rules are not sufficent."
+	TBTextField: text: ""
+	TBLayout: distribution: gravity
+		TBButton: text: "64x64", squeezable: true
+			lp: pref-width: 64, pref-height: 64
+		TBWidget: gravity: all
+	TBLayout: distribution: gravity
+		TBImageWidget: filename: "Textures/jmruler.png"
+			lp: width: 512, height: 32
+		TBWidget: gravity: all
+	TBLayout: distribution: gravity
+		TBButton: text: "320x64"
+			lp: pref-width: 320, pref-height: 64
+		TBWidget: gravity: all
+	TBLayout: distribution: gravity
+		TBImageWidget: filename: "Textures/jmruler.png"
+			lp: width: 512, height: 32
+		TBWidget: gravity: all
+	TBLayout: distribution: gravity
+		TBButton: text: "480x64"
+			lp: pref-width: 480, pref-height: 64
+		TBWidget: gravity: all
+	TBLayout: distribution: gravity
+		TBImageWidget: filename: "Textures/jmruler.png"
+			lp: width: 512, height: 32
+		TBWidget: gravity: all
+	TBLayout
+		TBButton: text: "UILayoutParams help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uilayoutparams.html"
+		TBButton: text: "UILayoutParams application code", id: uilayoutparamscode
+		TBButton: text: "UILayoutParams layout code", id: uilayoutparamslayout
+

+ 19 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uimenuitem.ui.txt

@@ -0,0 +1,19 @@
+# UIMenuItem and UIMenuItemSource objects layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIMenuItem and UIMenuItemSource objects\nThese objects are used to program the contents of popup menus."
+	TBTextField: id: spacer, text: "   "
+	TBButton: text: "Push for a resulting menu", id: uimenuitempush
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "Add UIMenuItem text", id: uimi1
+		TBButton: text: "Add UIMenuItem text,id", id: uimi2
+		TBButton: text: "Add UIMenuItem text,id,icon", id: uimi3
+		TBButton: text: "Add UIMenuItem Atomic entry", id: uimi4
+		TBButton: text: "Clear UIMenuItemSource", id: uimi5
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UIMenuItem help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uimenuitem.html"
+		TBButton: text: "UIMenuItem application code", id: uimenuitemcode
+		TBButton: text: "UIMenuItem layout code", id: uimenuitemlayout
+

+ 12 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uimenuwindow.ui.txt

@@ -0,0 +1,12 @@
+# UIMenuWindow widget layout file
+TBLayout: axis: y, id: "uimenuwindowtop"
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIMenuWindow widget\nThis widget is used to create menus and popup menus.\nThe Statusbar will display the results."
+	TBTextField: id: spacer, text: "   "
+	TBButton: text: "push for a UIMenuWindow", id: uimenuwindowpush
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UIMenuWindow help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uimenuwindow.html"
+		TBButton: text: "UIMenuWindow application code", id: uimenuwindowcode
+		TBButton: text: "UIMenuWindow layout code", id: uimenuwindowlayout
+

+ 15 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uimessagewindow.ui.txt

@@ -0,0 +1,15 @@
+# UIMessageWindow widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIMessageWindow widget\nThis widget is used to create custom message windows.\nThe Statusbar will display the results."
+	TBTextField: id: spacer, text: "   "
+	TBButton: id: "msgnone", text: "Bring up a MessageWindow..."
+	TBButton: id: "msgok", text: "Bring up an OK MessageWindow..."
+	TBButton: id: "msgkcancel", text: "Bring up an OK CANCEL MessageWindow..."
+	TBButton: id: "msgyesno", text: "Bring up a YES NO MessageWindow..."
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: id: "uimessagewindowhelp", text: "UIMessageWindow help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uimessagewindow.html"
+		TBButton: text: "UIMessageWindow application code", id: uimessagewindowcode
+		TBButton: text: "UIMessageWindow layout code", id: uimessagewindowlayout
+

+ 12 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uipromptwindow.ui.txt

@@ -0,0 +1,12 @@
+# UIPromptWindow widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIPromptWindow widget\nThis widget is used to create a window which can return a string that is entered.\nThe Statusbar will display the results."
+	TBTextField: id: spacer, text: "   "
+	TBButton: id: "stringfinder", text: "Bring up a Prompt window..."
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: id: "uipromptwindowhelp", text: "UIPromptWindow help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uipromptwindow.html"
+		TBButton: text: "UIPromptWindow application code", id: uipromptwindowcode
+		TBButton: text: "UIPromptWindow layout code", id: uipromptwindowlayout
+

+ 36 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uipulldownmenu.ui.txt

@@ -0,0 +1,36 @@
+# UIPulldownMenu widget layout file
+TBLayout: axis: y, size: available, position: gravity, distribution: gravity
+	TBLayout: axis: x, margin: 5, size: preferred, distribution: gravity, distribution-position: left right, skin: TBWindow
+		TBPulldownMenu: text: "  File  ", skin: 0, id: "FileMenu"
+			items:
+				item: text: "Open...", id: FileOpen
+				item: text: "Save...", id: FileSave
+				item: text: "-"
+				item: text: "Exit", id: FileExit
+		TBPulldownMenu: text: "  Edit  ", skin: 0, id: "EditMenu"
+			items:
+				item: text: "Cut", id: EditCut
+				item: text: "Copy", id: EditCopy
+				item: text: "Paste", id: EditPaste
+				item: text: "Select All", id: EditAll
+		TBPulldownMenu: text: "  View  ", skin: 0, id: "ViewMenu"
+			items:
+				item: text: "Scale", id: ViewScale
+				item: text: "Rotate", id: ViewRotate
+				item: text: "Translate", id: ViewTranslate
+		TBPulldownMenu: text: "  Help  ", skin: 0, id: "HelpMenu"
+			items:
+				item: text: "Help...", id: HelpHelp
+				item: text: "About this program...", id: HelpAbout
+	TBTextField: text: "^ There are some UIPulldownMenus"
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIPulldownMenu widget\nThis widget is used to create pulldown menus, which typically are in a menubar.\nThe Statusbar will display the results."
+	TBTextField: id: spacer, text: "   "
+	TBWidget: gravity: all
+	TBLayout
+		TBButton: text: "UIPulldownMenu help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uipulldownmenu.html"
+		TBButton: text: "UIPulldownMenu application code", id: uipulldownmenucode
+		TBButton: text: "UIPulldownMenu layout code", id: uipulldownmenulayout
+
+
+

+ 16 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uiradiobutton.ui.txt

@@ -0,0 +1,16 @@
+# UIRadioButton widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIRadioButton widget\nThis widget displays and can change a boolean state.\nThe Statusbar will display the results."
+	TBTextField: id: spacer, text: "   "
+	TBContainer
+		TBRadioButton: id: demoradio
+	TBTextField: id: spacer, text: "   "
+	TBButton: id: "radioset", text: "Set the Radiobutton ON"
+	TBButton: id: "radiounset", text: "Set the Radiobutton OFF"
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UIRadioButton help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uiradiobutton.html"
+		TBButton: text: "UIRadioButton application code", id: uiradiobuttoncode
+		TBButton: text: "UIRadioButton layout code", id: uiradiobuttonlayout
+

+ 12 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uisceneview.ui.txt

@@ -0,0 +1,12 @@
+# UISceneView widget layout file
+TBLayout: axis: y, id: sceneviewcontainer
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UISceneView widget\nThis widget can display an Atomic scene."
+	TBTextField: id: spacer, text: "   "
+# there is NO TBSceneView widget, its entirely an Atomic Widget, well add it with code
+	TBTextField: id: "uisceneviewlower", text: "   "
+	TBLayout:
+		TBButton: text: "UISceneView help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uisceneview.html"
+		TBButton: text: "UISceneView application code", id: uisceneviewcode
+		TBButton: text: "UISceneView layout code", id: uisceneviewlayout
+

+ 14 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uiscrollbar.ui.txt

@@ -0,0 +1,14 @@
+# UIScrollBar widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIScrollBar widget\nThis widget can display a range and value, and change the value.\nThe Statusbar will display the results."
+	TBTextField: id: spacer, text: "   "
+	TBContainer
+		TBScrollBar: min: 0, max: 100, thumb: 20, value: 5, id: scrollbardemo
+			lp: width: 200dp
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UIScrollBar help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uiscrollbar.html"
+		TBButton: text: "UIScrollBar application code", id: uiscrollbarcode
+		TBButton: text: "UIScrollBar layout code", id: uiscrollbarlayout
+

+ 26 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uiscrollcontainer.ui.txt

@@ -0,0 +1,26 @@
+# UIScrollContainer widget layout file
+TBLayout: axis: y, size: available, position: gravity, distribution: gravity
+	TBScrollContainer
+		gravity all
+		TBLayout: axis: y
+			TBLayout: size: available, position: gravity, distribution: available
+				TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 0, skin: "sheet_cell"
+					text: "UIScrollContainer widget\nThis widget can display other widgets\nIf they exceed the UIScrollContainer boundries, it add scrollbars to view these areas."
+					lp: pref-width: 500, pref-height: 480
+				TBButton: text: 2
+					lp: pref-width: 600, pref-height: 480
+				TBButton: text: Hi
+					lp: pref-width: 256, pref-height: 480
+			TBLayout: size: available, position: gravity, distribution: available
+				TBButton: text: Hi Again
+					lp: pref-width: 400, pref-height: 512
+				TBButton: text: 3
+					lp: pref-width: 200, pref-height: 512
+				TBButton: text: 4
+					lp: pref-width: 1000, pref-height: 512
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UIScrollContainer help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uiscrollcontainer.html"
+		TBButton: text: "UIScrollContainer application code", id: uiscrollcontainercode
+		TBButton: text: "UIScrollContainer layout code", id: uiscrollcontainerlayout
+

+ 18 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uisection.ui.txt

@@ -0,0 +1,18 @@
+# UISection widget layout file
+TBLayout: axis: y, size: available, position: gravity, distribution: gravity
+	TBSection: value: 1, text: "UISection 1", id: "UISectionDemo"
+		TBLayout: axis: y
+			TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+				text: "UISection widget\nThis widget can display other widgets and collapse the viewing area\nThe Statusbar will display the results."
+			TBTextField: text: "this is UISection contents"
+			TBTextField: text: "this is UISection contents"
+			TBTextField: text: "this is UISection contents"
+			TBTextField: text: "this is UISection contents"
+	TBSection: value: 0, text: "UISection 2", id: "UISection2Demo"
+		@file sheet.ui.txt
+	TBWidget: gravity: all, id: "UIsectionFiller"
+	TBLayout
+		TBButton: text: "UISection help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uisection.html"
+		TBButton: text: "UISection application code", id: uisectioncode
+		TBButton: text: "UISection layout code", id: uisectionlayout
+

+ 18 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uiselectdropdown.ui.txt

@@ -0,0 +1,18 @@
+# UISelectDropdown widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UISelectDropdown widget\nThis widget can display a list of options, and can select one to make it the current value.\nThe Statusbar will display the results."
+	TBTextField: id: spacer, text: "   "
+	TBSelectDropdown: id: selectdropdowndemo
+		lp: min-width: 128dp
+		items:
+			item: text: "SelectDropdown 1"
+			item: text: "SelectDropdown 2"
+			item: text: "SelectDropdown 3"
+			item: text: "SelectDropdown 4"
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UISelectDropdown help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uiselectdropdown.html"
+		TBButton: text: "UISelectDropdown application code", id: uiselectdropdowncode
+		TBButton: text: "UISelectDropdown layout code", id: uiselectdropdownlayout
+

+ 18 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uiselectitem.ui.txt

@@ -0,0 +1,18 @@
+# UISelectItem and UISelectItemSource object layout file
+TBLayout: axis: y, id: selectitemlayout
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UISelectItem and UISelectItemSource objects\nThese objects are used to program the contents of UISelectList widgets."
+	TBTextField: id: spacer, text: "   "
+	TBTextField: id: selectitemlower, text: "   "
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "Add UISelectItem text", id: uisi1
+		TBButton: text: "Add UISelectItem text,id", id: uisi2
+		TBButton: text: "Add UISelectItem text,id,icon", id: uisi3
+		TBButton: text: "Add UISelectItem Atomic entry", id: uisi4
+		TBButton: text: "Clear UISelectItemSource", id: uisi5
+	TBLayout
+		TBButton: text: "UISelectItem help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uiselectitem.html"
+		TBButton: text: "UISelectItem application code", id: uiselectitemcode
+		TBButton: text: "UISelectItem layout code", id: uiselectitemlayout
+

+ 23 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uiselectlist.ui.txt

@@ -0,0 +1,23 @@
+# UISelectList widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UISelectList widget\nThis widget can display a list of entries, which can be selected.\nThe Statusbar will display the results."
+	TBTextField: id: spacer, text: "   "
+	TBContainer
+		TBSelectList: id: UISelectListDemo
+			items:
+				item: text: "entry1", id: UISelectListE1
+				item: text: "entry2", id: UISelectListE2
+				item: text: "-"
+				item: text: "entry3", id: UISelectListE3
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: id: selectlistadd, text: "UISelectList add entry to list"
+		TBButton: id: selectlistdel, text: "UISelectList delete selected entry"
+		TBButton: id: selectlistdelall, text: "UISelectList delete all"
+		TBButton: id: selectlistnew, text: "UISelectList add new entry set"
+	TBLayout
+		TBButton: text: "UISelectList help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uiselectlist.html"
+		TBButton: text: "UISelectList application code", id: uiselectlistcode
+		TBButton: text: "UISelectList layout code", id: uiselectlistlayout
+

+ 17 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uiseparator.ui.txt

@@ -0,0 +1,17 @@
+# UISeparator widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UISeparator widget\nThis widget can be used to draw an etched line between other widgets\nThere is a secret: if you add a `-` as a string in a UIMenuItem, it will add a separator in the menu."
+	TBTextField: id: spacer, text: "   "
+	TBContainer
+		TBLayout: axis: y
+			TBTextField: text: "        v          "
+			TBSeparator
+				lp: width: 200dp, height: 4dp
+			TBTextField: text: "        ^          "
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UISeparator help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uiseparator.html"
+		TBButton: text: "UISeparator application code", id: uiseparatorcode
+		TBButton: text: "UISeparator layout code", id: uiseparatorlayout
+

+ 20 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uiskinimage.ui.txt

@@ -0,0 +1,20 @@
+# UISkinImage widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UISkinImage widget\nThis widget is used to display a skinned bitmap in another widget.\nIn order to use this, you must have an applicaion skin.tb.txt or use a stock skin item."
+	TBTextField: id: spacer, text: "   "
+	TBContainer
+		TBLayout
+			TBButton: skin: 0
+				TBSkinImage: skin: LogoAtomic
+			TBButton: skin: 0
+				TBSkinImage: skin: LogoAtomic
+					lp: width: 64, height: 64
+			TBSkinImage: skin: LogoAtomic
+				lp: width: 128, height: 128
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UISkinImage help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uiskinimage.html"
+		TBButton: text: "UISkinImage application code", id: uiskinimagecode
+		TBButton: text: "UISkinImage layout code", id: uiskinimagelayout
+

+ 13 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uislider.ui.txt

@@ -0,0 +1,13 @@
+# UISlider widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UISlider widget\nThis widget can display and change a value.\nThe Statusbar will display the results."
+	TBTextField: id: spacer, text: "   "
+	TBSlider: min: 0, max: 100, value: 50, id: sliderdemo
+		lp: width: 200dp
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UISlider help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uislider.html"
+		TBButton: text: "UISlider application code", id: uislidercode
+		TBButton: text: "UISlider layout code", id: uisliderlayout
+

+ 32 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uitabcontainer.ui.txt

@@ -0,0 +1,32 @@
+# UITabContainer widget layout file
+TBLayout: axis: y, size: available, position: gravity, distribution: gravity
+	TBTabContainer:
+		gravity all
+		id UITabContainerDemo
+		tabs
+			TBButton
+				text tab1
+			TBButton
+				text tab2
+			TBButton
+				text tab3
+		TBLayout: axis: y, size: available, position: gravity, distribution: available, id: "TabLayout1"
+			TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 0, skin: "sheet_cell"
+				text: "UITabContainer widget\nThis widget can contain pages of information that can be accessed by tabs\nThe Statusbar will display the results."
+		TBLayout: axis: y, size: available, position: gravity, distribution: available, id: "TabLayout2"
+			TBButton: text: "TAB 2"
+				font: size: 80dp
+		TBLayout: axis: y, size: available, position: gravity, distribution: available, id: "TabLayout3"
+			TBButton: text: "TAB 3"
+				font: size: 80dp
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "Undock Current Tab", id: uitabcontainerundock
+		TBButton: text: "Dock", id: uitabcontainerredock
+		TBButton: text: "Remove Current Tab", id: uitabcontainerremove
+		TBButton: text: "Add a Tab file ", id: uitabcontaineradd
+		TBButton: text: "Add a Tab code", id: uitabcontainermake
+		TBButton: text: "UITabContainer help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uitabcontainer.html"
+		TBButton: text: "Application code", id: uitabcontainercode
+		TBButton: text: "Layout code", id: uitabcontainerlayout
+

+ 16 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uitextfield.ui.txt

@@ -0,0 +1,16 @@
+# UITextField widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UITextField widget\nThis widget is used to display a single line of read only text"
+	TBTextField: id: spacer, text: "   "
+	TBContainer
+		TBLayout: axis: y
+			TBTextField: text: "UITextField widget example"
+			TBTextField: text: "UITextField widget at 48 point font"
+				font: size: 48dp
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: text: "UITextField help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uitextfield.html"
+		TBButton: text: "UITextField application code", id: uitextfieldcode
+		TBButton: text: "UITextField layout code", id: uitextfieldlayout
+

+ 12 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uitexturewidget.ui.txt

@@ -0,0 +1,12 @@
+# UITextureWidget layout file
+TBLayout: axis: y, id: uitwcontainer
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UITextureWidget\nThis widget is used to display an Atomic Resource image."
+	TBTextField: id: spacer, text: "   "
+# there is NO TBTextureWidget, its entirely an Atomic Widget, well add it with code
+	TBTextField: id: "uitexturewidgetlower", text: "   "
+	TBLayout 
+		TBButton: text: "UITextureWidget help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uitexturewidget.html"
+		TBButton: text: "UITextureWidget application code", id: uitexturewidgetcode
+		TBButton: text: "UITextureWidget layout code", id: uitexturewidgetlayout
+

+ 14 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uiwidget.ui.txt

@@ -0,0 +1,14 @@
+# UIWidget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIWidget\nThis widget is the base from which all other widgets are created.\nIt has a number of useful abillities, but normally has no display.\nIt can be useful for spacing though, and push visual widgets around."
+	TBTextField: id: spacer, text: "   "
+	TBTextField: text: "v"
+	TBWidget
+		lp: min-width 128dp, nim-height: 32dp
+	TBTextField: text: "^There it is, in all it`s glory."
+	TBLayout
+		TBButton: text: "UIWidget help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uiwidget.html"
+		TBButton: text: "UIWidget application code", id: uiwidgetcode
+		TBButton: text: "UIWidget layout code", id: uiwidgetlayout
+

+ 13 - 0
UIPeriodicTable/CSharp/Resources/Scenes/layout_uiwindow.ui.txt

@@ -0,0 +1,13 @@
+# UIWindow widget layout file
+TBLayout: axis: y
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "UIWindow widget\nThis widget is used to create custom windows.\nThe Statusbar will display the results."
+	TBTextField: id: spacer, text: "   "
+	TBButton: id: windowdemo, text: "Bring up a custom login UIWindow..."
+	TBButton: id: windowdemo1, text: "Bring up a custom table UIWindow..."
+	TBTextField: id: spacer, text: "   "
+	TBLayout
+		TBButton: id: "uiwindowhelp", text: "UIWindow help Document", url: "http://docs.atomicgameengine.com/api/classes/atomic.uiwindow.html"
+		TBButton: text: "UIWindow application code", id: uiwindowcode
+		TBButton: text: "UIWindow layout code", id: uiwindowlayout
+

+ 11 - 0
UIPeriodicTable/CSharp/Resources/Scenes/login_dialog.ui.txt

@@ -0,0 +1,11 @@
+# full "responsive" login dialog example
+TBLayout: axis: y
+	lp: min-width: 256
+	TBTextField: text: "  User Name or Email  ", text-align: left, gravity: left right
+	TBEditField: gravity: left right
+	TBTextField: text: "Password", text-align: left, gravity: left right
+	TBEditField: type: password, gravity: left right
+	TBLayout
+		TBButton: text: Cancel, skin: ColorButton, id: "cancel"
+		TBButton: text: Login, skin: ColorButton, id: "login"
+

+ 62 - 0
UIPeriodicTable/CSharp/Resources/Scenes/main_atomic_layout.ui.txt

@@ -0,0 +1,62 @@
+# main layout file
+TBTabContainer
+	gravity all
+	id atomictabs
+	tabs
+		TBButton
+			text UISceneView
+		TBButton
+			text UITextureWidget
+		TBButton
+			text UIPulldownMenu
+		TBButton
+			text UIColorWidget
+		TBButton
+			text UIBargraph
+		TBButton
+			text UIColorWheel
+		TBButton
+			text UIPromptWindow
+		TBButton
+			text UIFinderWindow
+	TBLayout
+		id pageuisceneview
+		size available
+		distribution available
+		@file layout_uisceneview.ui.txt
+	TBLayout
+		id pageuitexturewidget
+		size available
+		distribution available
+		@file layout_uitexturewidget.ui.txt
+	TBLayout
+		id pageuipulldownmenu
+		size available
+		distribution available
+		@file layout_uipulldownmenu.ui.txt
+	TBLayout
+		id pageuicolorwidget
+		size available
+		distribution available
+		@file layout_uicolorwidget.ui.txt
+	TBLayout
+		id pageuibargraph
+		size available
+		distribution available
+		@file layout_uibargraph.ui.txt
+	TBLayout
+		id pageuicolorwheel
+		size available
+		distribution available
+		@file layout_uicolorwheel.ui.txt
+	TBLayout
+		id pageuipromptwindow
+		size available
+		distribution available
+		@file layout_uipromptwindow.ui.txt
+	TBLayout
+		id pageuifinderwindow
+		size available
+		distribution available
+		@file layout_uifinderwindow.ui.txt
+

+ 59 - 0
UIPeriodicTable/CSharp/Resources/Scenes/main_layout.ui.txt

@@ -0,0 +1,59 @@
+# UI periodic table Layout file
+TBTabContainer
+	gravity all
+	id maintabs
+	skin TBWindow
+	align bottom
+	tabs
+		TBButton
+			text Periodic Table
+			font
+				size: 16dp
+		TBButton
+			text Primary Widgets
+			font
+				size 16dp
+		TBButton
+			text More Widgets
+			font
+				size 16dp
+		TBButton
+			text Support Objects
+			font
+				size 16dp
+		TBButton
+			text Atomic Widgets
+			font
+				size 16dp
+	TBLayout
+		id pagetable
+		axis y
+		distribution-position top
+		@file main_table.ui.txt
+	TBLayout
+		id pageprimary
+		distribution available
+		gravity all
+		@file main_primary_layout.ui.txt
+	TBLayout
+		id pagemore
+		distribution available
+		gravity all
+		@file main_more_layout.ui.txt
+	TBLayout
+		id pagesupport
+		distribution available
+		gravity all
+		@file main_support_layout.ui.txt
+	TBLayout
+		id pageatomic
+		distribution available
+		gravity all
+		@file main_atomic_layout.ui.txt
+TBLayout: axis: x, distribution-position: left right, size: available
+	lp: min-height: 32, max-height: 32, pref-height: 32
+	TBButton: id: exitapp, skin: LogoAtomic, tooltip: "Press here to exit"
+		axis y
+		gravity: left
+	TBTextField: id: LogText, text: "This is the Atomic Widget Periodic Table"
+

+ 69 - 0
UIPeriodicTable/CSharp/Resources/Scenes/main_more_layout.ui.txt

@@ -0,0 +1,69 @@
+# more widgets layout file
+TBTabContainer
+	gravity all
+	id moretabs
+	tabs
+		TBButton
+			text UILayout
+		TBButton
+			text UISelectDropdown
+		TBButton
+			text UIImageWidget
+		TBButton
+			text UIMenuWindow
+		TBButton
+			text UIClickLabel
+		TBButton
+			text UIScrollBar
+		TBButton
+			text UISeparator
+		TBButton
+			text UISection
+		TBButton
+			text UIMessageWindow
+	TBLayout
+		id pageuilayout
+		size available
+		distribution available
+		@file layout_uilayout.ui.txt
+	TBLayout
+		id pageuiselectdropdown
+		size available
+		distribution available
+		@file layout_uiselectdropdown.ui.txt
+	TBLayout
+		id pageuiimagewidget
+		size available
+		distribution available
+		@file layout_uiimagewidget.ui.txt
+	TBLayout
+		id pageuimenuwindow
+		size available
+		distribution available
+		@file layout_uimenuwindow.ui.txt
+	TBLayout
+		id pageuiclicklabel
+		size available
+		distribution available
+		@file layout_uiclicklabel.ui.txt
+	TBLayout
+		id pageuiscrollbar
+		size available
+		distribution available
+		@file layout_uiscrollbar.ui.txt
+	TBLayout
+		id pageuiseparator
+		size available
+		distribution available
+		@file layout_uiseparator.ui.txt
+	TBLayout
+		id pageuisection
+		size available
+		distribution available
+		@file layout_uisection.ui.txt
+	TBLayout
+		id pageuimessagewindow
+		size available
+		distribution available
+		@file layout_uimessagewindow.ui.txt
+

+ 69 - 0
UIPeriodicTable/CSharp/Resources/Scenes/main_primary_layout.ui.txt

@@ -0,0 +1,69 @@
+# primary widgets layout file
+TBTabContainer
+	gravity all
+	id primarytabs
+	tabs
+		TBButton
+			text UIButton
+		TBButton
+			text UITextField
+		TBButton
+			text UIEditField
+		TBButton
+			text UICheckBox
+		TBButton
+			text UISelectList
+		TBButton
+			text UIInlineSelect
+		TBButton
+			text UISlider
+		TBButton
+			text UIRadioButton
+		TBButton
+			text UITabContainer
+	TBLayout
+		id pageuibutton
+		size available
+		distribution available
+		@file layout_uibutton.ui.txt
+	TBLayout
+		id pageuitextfield
+		size available
+		distribution available
+		@file layout_uitextfield.ui.txt
+	TBLayout
+		id pageuieditfield
+		size available
+		distribution available
+		@file layout_uieditfield.ui.txt
+	TBLayout
+		id pageuicheckbox
+		size available
+		distribution available
+		@file layout_uicheckbox.ui.txt
+	TBLayout
+		id pageuiselectlist
+		size available
+		distribution available
+		@file layout_uiselectlist.ui.txt
+	TBLayout
+		id pageuiinlineselect
+		size available
+		distribution available
+		@file layout_uiinlineselect.ui.txt
+	TBLayout
+		id pageuislider
+		size available
+		distribution available
+		@file layout_uislider.ui.txt
+	TBLayout
+		id pageuiradiobutton
+		size available
+		distribution available
+		@file layout_uiradiobutton.ui.txt
+	TBLayout
+		id pageuitabcontainer
+		size available
+		distribution available
+		@file layout_uitabcontainer.ui.txt
+

+ 69 - 0
UIPeriodicTable/CSharp/Resources/Scenes/main_support_layout.ui.txt

@@ -0,0 +1,69 @@
+# support objects layout file
+TBTabContainer
+	gravity all
+	id supporttabs
+	tabs
+		TBButton
+			text UIWidget
+		TBButton
+			text UIScrollContainer
+		TBButton
+			text UIContainer
+		TBButton
+			text UISkinImage
+		TBButton
+			text UIWindow
+		TBButton
+			text UISelectItem
+		TBButton
+			text UIMenuItem
+		TBButton
+			text UIFontDescription
+		TBButton
+			text UILayoutParams
+	TBLayout
+		id pageuiwidget
+		size available
+		distribution available
+		@file layout_uiwidget.ui.txt
+	TBLayout
+		id pageuiscrollcontainer
+		size available
+		distribution available
+		@file layout_uiscrollcontainer.ui.txt
+	TBLayout
+		id pageuicontainer
+		size available
+		distribution available
+		@file layout_uicontainer.ui.txt
+	TBLayout
+		id pageuiskinimage
+		size available
+		distribution available
+		@file layout_uiskinimage.ui.txt
+	TBLayout
+		id pageuiwindow
+		size available
+		distribution available
+		@file layout_uiwindow.ui.txt
+	TBLayout
+		id pageuiselectitem
+		size available
+		distribution available
+		@file layout_uiselectitem.ui.txt
+	TBLayout
+		id pageuimenuitem
+		size available
+		distribution available
+		@file layout_uimenuitem.ui.txt
+	TBLayout
+		id pageuifontdescription
+		size available
+		distribution available
+		@file layout_uifontdescription.ui.txt
+	TBLayout
+		id pageuilayoutparams
+		size available
+		distribution available
+		@file layout_uilayoutparams.ui.txt
+

+ 96 - 0
UIPeriodicTable/CSharp/Resources/Scenes/main_table.ui.txt

@@ -0,0 +1,96 @@
+# Atomic Widget Periodic Table layout file
+TBTextField:  text: "Atomic Widget Periodic Table", gravity: top left right, skin: "sheet_cell"
+	font: size: 32dp
+TBTextField: id: spacer, text: "   "
+TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 2
+	TBTextField:  text: "Primary Widgets", squeezable: 1
+		lp: pref-width: 150dp
+	TBTextField: text: "More Widgets", squeezable: 1
+		lp: pref-width: 150dp
+	TBTextField: text: "Support Objects", squeezable: 1
+		lp: pref-width: 150dp
+	TBTextField: text: "Atomic Widgets", squeezable: 1
+		lp: pref-width: 150dp
+TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 2
+	TBButton: id: A1, text: "UIButton", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: B1, text: "UILayout", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: C1, text: "UIWidget", squeezable: 1
+		lp: pref-width: 150dp
+	TBTextField: id: D1, text: "", squeezable: 1
+		lp: pref-width: 150dp
+TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 2
+	TBButton: id: A2, text: "UITextField", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: B2, text: "UISelectDropdown", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: C2, text: "UIScrollContainer", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: D2, text: "UISceneView", squeezable: 1
+		lp: pref-width: 150dp
+TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 2
+	TBButton: id: A3, text: "UIEditField", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: B3, text: "UIImageWidget", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: C3, text: "UIContainer", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: D3, text: "UITextureWidget", squeezable: 1
+		lp: pref-width: 150dp
+TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 2
+	TBButton: id: A4, text: "UICheckBox", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: B4, text: "UIMenuWindow", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: C4, text: "UISkinImage", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: D4, text: "UIPulldownMenu", squeezable: 1
+		lp: pref-width: 150dp
+TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 2
+	TBButton: id: A5, text: "UISelectList", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: B5, text: "UIClickLabel", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: C5, text: "UIWindow", squeezable: 1	
+		lp: pref-width: 150dp
+	TBButton: id: D5, text: "UIColorWidget", squeezable: 1
+		lp: pref-width: 150dp
+TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 2
+	TBButton: id: A6, text: "UIInlineSelect", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: B6, text: "UIScrollBar", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: C6, text: "UISelectItem", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: D6, text: "UIBargraph", squeezable: 1
+		lp: pref-width: 150dp
+TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 2
+	TBButton: id: A7, text: "UISlider", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: B7, text: "UISeparator", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: C7, text: "UIMenuItem", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: D7, text: "UIColorWheel", squeezable: 1
+		lp: pref-width: 150dp
+TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 2
+	TBButton: id: A8, text: "UIRadioButton", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: B8, text: "UISection", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: C8, text: "UIFontDescription", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: D8, text: "UIPromptWindow", squeezable: 1
+		lp: pref-width: 150dp
+TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 2
+	TBButton: id: A9, text: "UITabContainer", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: B9, text: "UIMessageWindow", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: C9, text: "UILayoutParams", squeezable: 1
+		lp: pref-width: 150dp
+	TBButton: id: D9, text: "UIFinderWindow", squeezable: 1
+		lp: pref-width: 150dp
+TBWidget
+

+ 81 - 0
UIPeriodicTable/CSharp/Resources/Scenes/sceneview.scene

@@ -0,0 +1,81 @@
+<?xml version="1.0"?>
+<scene id="1">
+	<attribute name="Name" value="Sceneview" />
+	<attribute name="Time Scale" value="1" />
+	<attribute name="Smoothing Constant" value="50" />
+	<attribute name="Snap Threshold" value="5" />
+	<attribute name="Elapsed Time" value="0" />
+	<attribute name="Next Replicated Node ID" value="369" />
+	<attribute name="Next Replicated Component ID" value="1983" />
+	<attribute name="Next Local Node ID" value="16778496" />
+	<attribute name="Next Local Component ID" value="16777216" />
+	<attribute name="Variables" />
+	<attribute name="Variable Names" value="" />
+	<component type="PhysicsWorld" id="1" />
+	<component type="Octree" id="2" />
+	<component type="DebugRenderer" id="3">
+		<attribute name="Line Antialias" value="true" />
+	</component>
+	<node id="2">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Zone" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="0 9.31323e-10 -1.35601e-06" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="Zone" id="4">
+			<attribute name="Bounding Box Min" value="-10000 -10000 -10000" />
+			<attribute name="Bounding Box Max" value="10000 10000 10000" />
+			<attribute name="Ambient Color" value="0.4 0.4 0.4 1" />
+			<attribute name="Fog Color" value="0 0.349169 0.164442 1" />
+		</component>
+	</node>
+	<node id="3">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="GlobalLight" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="0 0 0" />
+		<attribute name="Rotation" value="0.888074 0.325058 -0.325058 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="Light" id="5">
+			<attribute name="Light Type" value="Directional" />
+			<attribute name="Cast Shadows" value="true" />
+			<attribute name="CSM Splits" value="10 20 50 0" />
+			<attribute name="View Size Quantize" value="1" />
+			<attribute name="View Size Minimum" value="5" />
+			<attribute name="Depth Constant Bias" value="0.00025" />
+			<attribute name="Depth Slope Bias" value="0.001" />
+		</component>
+	</node>
+	<node id="361">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Camera" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="0 0 -1" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="Camera" id="1973" />
+	</node>
+	<node id="363">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="TheWorld" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="0 0 2" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="StaticModel" id="1975">
+			<attribute name="Model" value="Model;Models/Sphere.mdl" />
+			<attribute name="Material" value="Material;Materials/planet.material" />
+			<attribute name="Geometry Enabled">
+				<variant type="Bool" value="true" />
+			</attribute>
+		</component>
+		<component type="CSComponent" id="1977">
+			<attribute name="Class" value="Spinner" />
+		</component>
+	</node>
+</scene>

+ 108 - 0
UIPeriodicTable/CSharp/Resources/Scenes/sheet.ui.txt

@@ -0,0 +1,108 @@
+# (spread)sheet like layout file
+TBLayout: distribution: gravity, distribution-position: left
+	axis y
+	TBScrollContainer
+		gravity all
+		TBLayout: spacing: 1
+			position left top
+			axis y
+			TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 1
+				TBTextField: id: t0A, text: "", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t0B, text: "", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t0C, text: "", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t0D, text: "UISelectItem", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+			TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 1
+				TBTextField: id: t1A, text: "UIWidget", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t1B, text: "UIWindow", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t1C, text: "", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t1D, text: "UISelectItemSource", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+			TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 1
+				TBTextField: id: t2A, text: "UIButton", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t2B, text: "UIMessageWindow", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t2C, text: "UIView", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t2D, text: "UIMenuItem", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+			TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 1
+				TBTextField: id: t3A, text: "UIEditField", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t3B, text: "UITabContainer", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t3C, text: "UILayout", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t3D, text: "UIMenuItemSource", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+			TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 1
+				TBTextField: id: t4A, text: "UICheckBox", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t4B, text: "UIListView", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t4C, text: "UITextField", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t4D, text: "UILayoutParams", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+			TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 1
+				TBTextField: id: t5A, text: "UISelectList", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t5B, text: "UIMenuWindow", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t5C, text: "UISkinImage", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t5D, text: "UIFontDescription", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+			TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 1
+				TBTextField: id: t6A, text: "UIInlineSelect", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t6B, text: "UIClickLabel", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t6C, text: "UIImageWidget", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t6D, text: "UIPreferredSize", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+			TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 1
+				TBTextField: id: t7A, text: "UISelectDropdown", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t7B, text: "UISection", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t7C, text: "UISeparator", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t7D, text: "UIContainer", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+			TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 1
+				TBTextField: id: t8A, text: "UISlider", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t8B, text: "UISceneView", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t8C, text: "UITextureWidget", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t8D, text: "UIScrollContainer", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+			TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 1
+				TBTextField: id: t9A, text: "UIColorWheel", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t9B, text: "UIPromptWindow", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t9C, text: "UIColorWidget", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: t9D, text: "UIDimmer", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+			TBLayout: axis: x, size: available, position: gravity, distribution: available, spacing: 1
+				TBTextField: id: tAA, text: "UIPulldownMenu", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: tAB, text: "UIFinderWindow", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: tAC, text: "UIBargraph", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+				TBTextField: id: tAD, text: "UIDragObject", squeezable: 1, text-align: left, skin: "sheet_cell"
+					lp: pref-width: 150dp
+

+ 8 - 0
UIPeriodicTable/CSharp/Resources/Scenes/simp_button.ui.txt

@@ -0,0 +1,8 @@
+# layout support layout file
+TBButton: text: "UIButton"
+TBButton:
+	TBSkinImage: skin: ReadyButton
+TBButton: text: "I`m Atomic"
+	TBSkinImage: skin: LogoAtomic
+TBButton: text: "Press me, I`m green", skin: ColorButton
+

+ 10 - 0
UIPeriodicTable/CSharp/Resources/Scenes/view_code.ui.txt

@@ -0,0 +1,10 @@
+# code viewer user interface layout
+TBLayout: axis: y, size: available, position: gravity, distribution: gravity
+	lp: min-width: 800dp, min-height: 400dp
+	TBLayout: id: "undocklayout", distribution: gravity, distribution-position: left
+		TBEditField: id: "viewCodeText", multiline: 1, styling: 0, gravity: all, readonly: 1, adapt-to-content: 0, text: ""
+			font: size: 14dp
+			lp: min-width: 800dp
+	TBButton: text: "OK", id: "viewCodeOK"
+		font: size: 14dp
+

+ 55 - 0
UIPeriodicTable/CSharp/Resources/Scenes/view_layout.ui.txt

@@ -0,0 +1,55 @@
+# LAYOUT-O-MATIC layout file
+TBLayout: axis: y
+	lp: min-width: 320dp
+	TBEditField: multiline: 1, styling: 1, readonly: 1, adapt-to-content: 1, skin: "sheet_cell"
+		text: "The LAYOUT-O-MATIC\nThe window allows you to change the top UILayout attributes with the\nclick of a button, so you can see what these things really do."
+	TBLayout: distribution: gravity, distribution-position: left
+		TBTextField: text: "Axis", text-align: right
+			lp: pref-width: 160dp
+		TBClickLabel: text: X(D)
+			TBRadioButton: group-id: set_axis, id: set_ax, data: 0, value: 1
+		TBClickLabel: text: Y
+			TBRadioButton: group-id: set_axis, id: set_ay, data: 1
+	TBLayout: distribution: gravity, distribution-position: left
+		TBTextField: text: "Size", text-align: right
+			lp: pref-width: 160dp
+		TBClickLabel: text: Available
+			TBRadioButton: group-id: set_sz, id: set_sza, data: 0
+		TBClickLabel: text: Gravity(D)
+			TBRadioButton: group-id: set_sz, id: set_szg, data: 1, value: 1
+		TBClickLabel: text: Preferred
+			TBRadioButton: group-id: set_sz, id: set_szp, data: 2
+	TBLayout: distribution: gravity, distribution-position: left
+		TBTextField: text: "Position", text-align: right
+			lp: pref-width: 160dp
+		TBClickLabel: text: Center(D)
+			TBRadioButton: group-id: set_pos, id: set_posc, data: 0, value: 1
+		TBClickLabel: text: Gravity
+			TBRadioButton: group-id: set_pos, id: set_posg, data: 1
+		TBClickLabel: text: LeftTop
+			TBRadioButton: group-id: set_pos, id: set_posl, data: 2
+		TBClickLabel: text: RightBottom
+			TBRadioButton: group-id: set_pos, id: set_posr, data: 3
+	TBLayout: distribution: gravity, distribution-position: left
+		TBTextField: text: "Distribution", text-align: right
+			lp: pref-width: 160dp
+		TBClickLabel: text: Available
+			TBRadioButton: group-id: set_dist, id: set_dista, data: 0
+		TBClickLabel: text: Gravity
+			TBRadioButton: group-id: set_dist, id: set_distg, data: 1
+		TBClickLabel: text: Preferred(D)
+			TBRadioButton: group-id: set_dist, id: set_distp, data: 2, value: 1
+	TBLayout: distribution: gravity, distribution-position: left
+		TBTextField: text: "Distribution Position", text-align: right
+			lp: pref-width: 160dp
+		TBClickLabel: text: Center(D)
+			TBRadioButton: group-id: set_dp, id: set_dpc, data: 0, value: 1
+		TBClickLabel: text: LeftTop
+			TBRadioButton: group-id: set_dp, id: set_dpl, data: 1
+		TBClickLabel: text: RightBottom
+			TBRadioButton: group-id: set_dp, id: set_dpr, data: 2
+	TBSeparator
+		lp: min-width: 320dp
+	TBLayout
+		TBButton: text: OK, id: "ok"
+

+ 279 - 0
UIPeriodicTable/CSharp/Resources/Scripts/AtomicMain.cs

@@ -0,0 +1,279 @@
+//
+// Copyright (c) 2014-2017, THUNDERBEAST GAMES LLC All rights reserved
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
+// UIPeriodicTable example
+
+using System;
+using AtomicEngine;
+using AtomicPlayer;
+
+// list all the classes
+using static code_table;
+using static code_uibargraph;
+using static code_uibutton;
+using static code_uicheckbox;
+using static code_uiclicklabel;
+using static code_uicolorwheel;
+using static code_uicolorwidget;
+using static code_uicontainer;
+using static code_uieditfield;
+using static code_uifinderwindow;
+using static code_uifontdescription;
+using static code_uiimagewidget;
+using static code_uiinlineselect;
+using static code_uilayout;
+using static code_uilayoutparams;
+using static code_uimenuitem;
+using static code_uimenuwindow;
+using static code_uimessagewindow;
+using static code_uipromptwindow;
+using static code_uipulldownmenu;
+using static code_uiradiobutton;
+using static code_uisceneview;
+using static code_uiscrollbar;
+using static code_uiscrollcontainer;
+using static code_uisection;
+using static code_uiselectdropdown;
+using static code_uiselectitem;
+using static code_uiselectlist;
+using static code_uiseparator;
+using static code_uiskinimage;
+using static code_uislider;
+using static code_uitabcontainer;
+using static code_uitextfield;
+using static code_uitexturewidget;
+using static code_uiwidget;
+using static code_uiwindow;
+
+public class AtomicMain : AppDelegate {
+    public static UIView myuivew;
+    public static UITextField mylog;
+    public static UILayout mylayout;
+
+    public override void Start ()
+    {
+        AtomicNET.GetSubsystem<Player> ().LoadScene ("Scenes/Scene.scene");
+
+        var ui = GetSubsystem<UI> ();
+        ui.AddFont ("Textures/BrokenGlass.ttf", "BrokenGlass"); // add a gooder font
+        ui.LoadSkin ("Textures/desktop.tb.txt"); // load in the app skin
+
+        ResourceCache cache = GetSubsystem<ResourceCache> ();
+        Graphics graphics = GetSubsystem<Graphics> ();
+        graphics.SetWindowTitle ("PeriodicApp");
+        Image icon = cache.GetResource<Image> ("Textures/AtomicLogo32.png");
+        graphics.SetWindowIcon (icon);
+
+        myuivew = new UIView ();
+        mylayout = new UILayout ();  // make the host widget for all visible ui
+        mylayout.SetId ("UIPeriodicTable"); // tag it, like a big game scientist
+        mylayout.SetRect (myuivew.GetRect ()); //size it to fill the screen area
+        mylayout.SetLayoutConfig ("YAGAC");  //all-in-one setting
+        mylayout.SetSkinBg ("background_solid");  // make it look gooder
+        mylayout.Load ("Scenes/main_layout.ui.txt"); // load the main layout
+        myuivew.AddChild (mylayout); // And make it show up.
+
+        UITabContainer maintb = (UITabContainer)mylayout.GetWidget ("maintabs");
+        UITabContainer acttb = (UITabContainer)mylayout.GetWidget ("primarytabs");
+        UITabContainer semitb = (UITabContainer)mylayout.GetWidget ("moretabs");
+        UITabContainer viewtb = (UITabContainer)mylayout.GetWidget ("supporttabs");
+        UITabContainer supporttb = (UITabContainer)mylayout.GetWidget ("atomictabs");
+        supporttb.SetCurrentPage (0);
+        viewtb.SetCurrentPage (0);
+        semitb.SetCurrentPage (0);
+        acttb.SetCurrentPage (0);
+        maintb.SetCurrentPage (0); // do this or else the tab contents look like crap!
+        mylog = (UITextField)mylayout.GetWidget ("LogText");
+        UIWidget ea = mylayout.GetWidget ("exitapp");
+
+        var cota = new code_table ();
+        cota.Setup (mylayout);
+        var cobg = new code_uibargraph ();
+        cobg.Setup (mylayout.GetWidget ("pageuibargraph"));
+        var cobu = new code_uibutton ();
+        cobu.Setup (mylayout.GetWidget ("pageuibutton"));
+        var cocb = new code_uicheckbox ();
+        cocb.Setup (mylayout.GetWidget ("pageuicheckbox"));
+        var cocl = new code_uiclicklabel ();
+        cocl.Setup (mylayout.GetWidget ("pageuiclicklabel"));
+        var coch = new code_uicolorwheel ();
+        coch.Setup (mylayout.GetWidget ("pageuicolorwheel"));
+        var cocw = new code_uicolorwidget ();
+        cocw.Setup (mylayout.GetWidget ("pageuicolorwidget"));
+        var coco = new code_uicontainer ();
+        coco.Setup (mylayout.GetWidget ("pageuicontainer"));
+        var coef = new code_uieditfield ();
+        coef.Setup (mylayout.GetWidget ("pageuieditfield"));
+        var cofw = new code_uifinderwindow ();
+        cofw.Setup (mylayout.GetWidget ("pageuifinderwindow"));
+        var cofd = new code_uifontdescription ();
+        cofd.Setup (mylayout.GetWidget ("pageuifontdescription"));
+        var coiw = new code_uiimagewidget ();
+        coiw.Setup (mylayout.GetWidget ("pageuiimagewidget"));
+        var cois = new code_uiinlineselect ();
+        cois.Setup (mylayout.GetWidget ("pageuiinlineselect"));
+        var colo = new code_uilayout ();
+        colo.Setup (mylayout.GetWidget ("pageuilayout"));
+        var colp = new code_uilayoutparams ();
+        colp.Setup (mylayout.GetWidget ("pageuilayoutparams"));
+        var comi = new code_uimenuitem ();
+        comi.Setup (mylayout.GetWidget ("pageuimenuitem"));
+        var comw = new code_uimenuwindow ();
+        comw.Setup (mylayout.GetWidget ("pageuimenuwindow"));
+        var come = new code_uimessagewindow ();
+        come.Setup (mylayout.GetWidget ("pageuimessagewindow"));
+        var copw = new code_uipromptwindow ();
+        copw.Setup (mylayout.GetWidget ("pageuipromptwindow"));
+        var copd = new code_uipulldownmenu ();
+        copd.Setup (mylayout.GetWidget ("pageuipulldownmenu"));
+        var corb = new code_uiradiobutton ();
+        corb.Setup (mylayout.GetWidget ("pageuiradiobutton"));
+        var cosv = new code_uisceneview ();
+        cosv.Setup (mylayout.GetWidget ("pageuisceneview"));
+        var cosb = new code_uiscrollbar ();
+        cosb.Setup (mylayout.GetWidget ("pageuiscrollbar"));
+        var cosc = new code_uiscrollcontainer ();
+        cosc.Setup (mylayout.GetWidget ("pageuiscrollcontainer"));
+        var cose = new code_uisection ();
+        cose.Setup (mylayout.GetWidget ("pageuisection"));
+        var cosd = new code_uiselectdropdown ();
+        cosd.Setup (mylayout.GetWidget ("pageuiselectdropdown"));
+        var cosi = new code_uiselectitem ();
+        cosi.Setup (mylayout.GetWidget ("pageuiselectitem"));
+        var cosl = new code_uiselectlist ();
+        cosl.Setup (mylayout.GetWidget ("pageuiselectlist"));
+        var cosp = new code_uiseparator ();
+        cosp.Setup (mylayout.GetWidget ("pageuiseparator"));
+        var cosk = new code_uiskinimage ();
+        cosk.Setup (mylayout.GetWidget ("pageuiskinimage"));
+        var cosa = new code_uislider ();
+        cosa.Setup (mylayout.GetWidget ("pageuislider"));
+        var cotc = new code_uitabcontainer ();
+        cotc.Setup (mylayout.GetWidget ("pageuitabcontainer"));
+        var cotf = new code_uitextfield ();
+        cotf.Setup (mylayout.GetWidget ("pageuitextfield"));
+        var cotw = new code_uitexturewidget ();
+        cotw.Setup (mylayout.GetWidget ("pageuitexturewidget"));
+        var cowd = new code_uiwidget ();
+        cowd.Setup (mylayout.GetWidget ("pageuiwidget"));
+        var cowi = new code_uiwindow ();
+        cowi.Setup (mylayout.GetWidget ("pageuiwindow"));
+
+        SubscribeToEvent<WidgetEvent> (ea, ev => {
+            if (ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+                GetSubsystem<Engine> ().Exit ();
+            }
+        });
+
+        SubscribeToEvent<KeyDownEvent> (e => {
+            if (e.Key == Constants.KEY_ESCAPE)
+                GetSubsystem<Engine> ().Exit ();
+        });
+
+    }
+
+    public static void AppLog (string logtext)
+    {
+        mylog.SetText (logtext);
+    }
+
+    public static void ViewCode (String filename, UIWidget layoutParent)
+    {
+        var cache = GetSubsystem<ResourceCache> ();
+        UIWindow window = new UIWindow ();
+        window.SetSettings (UI_WINDOW_SETTINGS.UI_WINDOW_SETTINGS_DEFAULT);
+        window.SetText ("Code Viewer");
+        window.Load ("Scenes/view_code.ui.txt");
+        File filex = cache.GetFile (filename);
+        string textx = filex.ReadText ();
+        filex.Close ();
+        UIWidget coder = window.GetWidget ("viewCodeText");
+        coder.SetText (textx);
+        window.ResizeToFitContent ();
+        myuivew.AddChild (window);
+        window.Center ();
+        UIWidget someok = window.GetWidget ("viewCodeOK");
+        someok.SubscribeToEvent<WidgetEvent> (someok, ev => {
+            if (ev.Type == UI_EVENT_TYPE.UI_EVENT_TYPE_CLICK) {
+                UIWindow mywindow = (UIWindow)FindTheWindowParent (ev.Target);
+                if (!mywindow.Equals (null))
+                    mywindow.Close ();
+            }
+        });
+    }
+
+    public static UIWidget FindTheWindowParent (UIWidget fromThisWidget)
+    {
+        if (fromThisWidget.Equals (null))
+            return null;
+        string tname = fromThisWidget.GetTypeName ();
+        if (tname == "UIWindow" || tname == "UIDockWindow")
+            return fromThisWidget;
+        UIWidget tbw = fromThisWidget.GetParent ();
+        while (!tbw.Equals (null)) {
+            string stname = tbw.GetTypeName ();
+            if (stname == "UIWindow" || stname == "UIDockWindow")
+                return tbw;
+            tbw = tbw.GetParent ();
+        }
+        return null;
+    }
+
+    public static string EventReport (int eventNumber)
+    {
+        switch (eventNumber) {
+        case 0:
+            return "UI_EVENT_TYPE_CLICK";
+        case 1:
+            return "UI_EVENT_TYPE_LONG_CLICK";
+        case 2:
+            return "UI_EVENT_TYPE_POINTER_DOWN";
+        case 3:
+            return "UI_EVENT_TYPE_POINTER_UP";
+        case 4:
+            return "UI_EVENT_TYPE_POINTER_MOVE";
+        case 5:
+            return "UI_EVENT_TYPE_RIGHT_POINTER_DOWN";
+        case 6:
+            return "UI_EVENT_TYPE_RIGHT_POINTER_UP";
+        case 7:
+            return "UI_EVENT_TYPE_WHEEL";
+        case 8:
+            return "UI_EVENT_TYPE_CHANGED";
+        case 9:
+            return "UI_EVENT_TYPE_KEY_DOWN";
+        case 10:
+            return "UI_EVENT_TYPE_KEY_UP";
+        case 11:
+            return "UI_EVENT_TYPE_SHORTCUT";
+        case 12:
+            return "UI_EVENT_TYPE_CONTEXT_MENU";
+        case 13:
+            return "UI_EVENT_TYPE_FILE_DROP";
+        case 14:
+            return "UI_EVENT_TYPE_TAB_CHANGED";
+        case 15:
+            return "UI_EVENT_TYPE_CUSTOM";
+        }
+        return "EVENT_UKNOWN";
+    }
+
+}

BIN
UIPeriodicTable/CSharp/Resources/Textures/AtomicLogo32.png


BIN
UIPeriodicTable/CSharp/Resources/Textures/BrokenGlass.ttf


BIN
UIPeriodicTable/CSharp/Resources/Textures/HSV21.png


+ 22 - 0
UIPeriodicTable/CSharp/Resources/Textures/License.txt

@@ -0,0 +1,22 @@
+License for icon_duck.png and text_ready.png
+###############################################################################
+
+
+	Shooting Gallery pack
+	by Kenney Vleugels for Kenney (www.kenney.nl)
+
+			------------------------------
+
+	License (Creative Commons Zero, CC0)
+	http://creativecommons.org/publicdomain/zero/1.0/
+
+	You may use these graphics in personal and commercial projects.
+	Credit (Kenney or www.kenney.nl) would be nice but is not mandatory.
+
+			------------------------------
+
+	Donate:   http://donate.kenney.nl/
+	Request:  http://request.kenney.nl/
+
+
+###############################################################################

+ 3 - 0
UIPeriodicTable/CSharp/Resources/Textures/Readme.txt

@@ -0,0 +1,3 @@
+Broken Glass Font
+
+The Broken Glass font is a display font reminiscent of broken glass. It is based on a block-letter font. It comes with letters, numbers, punctuation and international characters. This font is in the public domain. Please read the terms of use at http://jlhfonts.blogspot.com/.

BIN
UIPeriodicTable/CSharp/Resources/Textures/arrow_left.png


BIN
UIPeriodicTable/CSharp/Resources/Textures/arrow_right.png


BIN
UIPeriodicTable/CSharp/Resources/Textures/color_button.png


BIN
UIPeriodicTable/CSharp/Resources/Textures/color_button_pressed.png


+ 55 - 0
UIPeriodicTable/CSharp/Resources/Textures/desktop.tb.txt

@@ -0,0 +1,55 @@
+# desktop skin definitions
+elements
+	background_solid
+		background-color #3b3b3b
+		padding 10
+	uiwidget_solid
+		background-color #666666
+		padding 10
+	sheet_cell
+		text-color #111111
+		background-color #f4f2d3
+		padding 10
+#inlineselect items --should be in the player default skin
+	arrowdark.left: type: Image, bitmap: arrow_left.png, min-width: 5, min-height: 10
+	arrowdark.right: type: Image, bitmap: arrow_right.png, min-width: 5, min-height: 10	
+#colorwheel support
+	HSVSkin
+		type StretchBox
+		bitmap HSV21.png
+#icons and skins
+	LogoAtomic
+		bitmap AtomicLogo32.png
+	DuckButton
+		bitmap icon_duck.png
+		padding 6 6
+		overrides
+			element DuckButton.pressed
+				state pressed
+	DuckButton.pressed
+		bitmap pressed_duck.png
+		content-ofs-x 1
+		content-ofs-y 1
+	ReadyButton
+		bitmap text_ready.png
+	PixelRuler
+		bitmap jmruler.png
+	ColorButton
+		bitmap color_button.png
+		cut 17
+		expand 7
+		padding 6 8
+		overrides
+			element ColorButton.pressed
+				state pressed
+	ColorButton.pressed
+		bitmap color_button_pressed.png
+		cut 7
+		expand 7
+		content-ofs-x 1
+		content-ofs-y 1
+	Graph
+		bitmap graph.png
+	Gauge
+		bitmap gauge.png
+

BIN
UIPeriodicTable/CSharp/Resources/Textures/gauge.png


BIN
UIPeriodicTable/CSharp/Resources/Textures/graph.png


Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä