Browse Source

Add CPlusPlus version of program

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

+ 30 - 0
UIPeriodicTable/CPlusPlus/CMakeLists.txt

@@ -0,0 +1,30 @@
+
+# Define source files
+file (GLOB SOURCE_FILES Resources/Scripts/*.cpp Resources/Scripts/*.h Resources/Components/*.cpp  )
+
+if (WIN32)
+    add_definitions(-DATOMIC_WIN32_CONSOLE)
+endif()
+
+add_executable(UI ${SOURCE_FILES})
+
+target_link_libraries(UIPeriodicTable Atomic)
+
+# Copy AtomicTool to Artifacts
+add_custom_command( TARGET UIPeriodicTable POST_BUILD
+                    COMMAND "${CMAKE_COMMAND}"
+                    ARGS -E make_directory \"${ATOMIC_SOURCE_DIR}/Artifacts/Examples/CPlusPlus\"
+                    COMMAND "${CMAKE_COMMAND}"
+                    ARGS -E copy_if_different \"$<TARGET_FILE:UIPeriodicTable>\" \"${ATOMIC_SOURCE_DIR}/Artifacts/Examples/CPlusPlus/\"
+                    COMMENT "Copying UIPeriodicTable to Build Artifacts" )
+
+if (WIN32)
+
+  # pre-Windows 8 can't count on D3DCompiler_47.dll being on system
+  add_custom_command (TARGET UIPeriodicTable POST_BUILD
+  COMMAND ${CMAKE_COMMAND}
+  ARGS -E copy_if_different \"${D3DCOMPILER_47_DLL}\" \"$<TARGET_FILE_DIR:UIPeriodicTable>/D3DCompiler_47.dll\"
+  COMMAND ${CMAKE_COMMAND}
+  ARGS -E copy_if_different \"${D3DCOMPILER_47_DLL}\" \"${ATOMIC_SOURCE_DIR}/Artifacts/Examples/CPlusPlus/D3DCompiler_47.dll\" )
+
+endif(WIN32)

+ 39 - 0
UIPeriodicTable/CPlusPlus/README.md

@@ -0,0 +1,39 @@
+
+## Atomic C++ UIPeriodicTable Example
+
+### Using Atomic as a native game library
+
+Atomic's core technology can be driven and extended with C++ using the same consistent API available to C#/JavaScript/TypeScript.  
+
+The feature samples in this multi-example are written entirely in C++ and demonstrate that apps can be built solely using C++ without scripting features.
+
+
+### Areas for improvement
+
+1) The ResourcePaths/ResourcePreFixPaths are hard coded to the source tree for a dev build: https://github.com/AtomicGameEngine/AtomicExamples/blob/master/FeatureExamples/CPlusPlus/Source/FeatureExamples.cpp#L74
+
+2) Atomic editor integration for C++ projects (component attribute editing, deployment, etc)
+
+### Windows compilation instructions
+
+1) Open a VS2015 64 bit command shell, cd to a work folder such as ```C:\Dev\Atomic\``` and run ```git clone --recursive https://github.com/AtomicGameEngine/AtomicGameEngine```
+
+2) Once cloned, cd to ```AtomicGameEngine``` and run ```CMake_VS2015.bat```
+
+![alt text](http://docs.atomicgameengine.com/forum_images/fecpp/fe_cpp_gitclonecmake.png)
+
+3) A Visual Studio solution will be created next to the local repository folder, for example ```C:\Dev\Atomic\AtomicGameEngine-VS2015\Atomic.sln```
+
+![alt text](http://docs.atomicgameengine.com/forum_images/fecpp/fe_cpp_cmakedone.png)
+
+4) Open the Atomic solution in Visual Studio 2015
+
+![alt text](http://docs.atomicgameengine.com/forum_images/fecpp/fe_cpp_opensolution.png)
+
+5) Set UIPeriodicTable as the startup project and build the solution
+
+6) Run the UIPeriodicTable example
+
+7) There is also an executable copied to the Artifacts/Examples/CPlusPlus folder
+
+

+ 48 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/Spinner.cpp

@@ -0,0 +1,48 @@
+#include <Atomic/Scene/Node.h>
+#include "Spinner.h"
+
+//
+//  this class is for eye candy-ization only
+//
+Rotator::Rotator(Context* context) :
+    LogicComponent(context),
+    rotationSpeed_(Vector3::ZERO)
+{
+    SetUpdateEventMask(USE_UPDATE);
+}
+
+void Rotator::SetRotationSpeed(const Vector3& speedxyz)
+{
+    rotationSpeed_ = speedxyz;
+}
+
+void Rotator::Update(float timeStep)
+{
+    node_->Rotate(Quaternion(rotationSpeed_.x_ * timeStep, rotationSpeed_.y_ * timeStep, rotationSpeed_.z_ * timeStep));
+}
+
+
+
+
+
+/*
+"atomic component";
+
+//define inspector fields
+var inspectorFields = {
+    //value speed will be able to be edited from editor
+    //default value sets to the 1.0, so speed has a number type
+    speed: 1.0
+};
+
+exports.component = function(self) {
+
+    //update function calls each frame
+    self.update = function(timeStep) {
+        //rotate node around Y axis
+        self.node.yaw(timeStep * 75 * self.speed);
+    };
+
+};
+
+*/

+ 211 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_table.cpp

@@ -0,0 +1,211 @@
+// handle the periodic table jumps
+#include <Atomic/UI/UIView.h>
+#include <Atomic/UI/UITabContainer.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_table( UIWidget *mylayout )
+{
+    UITabContainer *pgtable = (UITabContainer *)mylayout->GetWidget("pagetable");
+
+    PODVector<UIWidget*> dest;
+    pgtable->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)  // set bulk event handlers on all buttons -- boom!
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleTableEvent));
+}
+
+// handle table clicks
+void PeriodicApp::HandleTableEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        UITabContainer *maintb = (UITabContainer *)uiview_->FindWidget("maintabs");
+        UITabContainer *acttb = (UITabContainer *)uiview_->FindWidget("primarytabs");
+        UITabContainer *semitb = (UITabContainer *)uiview_->FindWidget("moretabs");
+        UITabContainer *viewtb = (UITabContainer *)uiview_->FindWidget("supporttabs");
+        UITabContainer *supporttb = (UITabContainer *)uiview_->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);
+        }
+    }
+}
+

+ 31 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uibargraph.cpp

@@ -0,0 +1,31 @@
+// UIBargraph application source code
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uibargraph( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp,HandleUibargraphEvent ));
+}
+
+void PeriodicApp::HandleUibargraphEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uibargraphcode" )
+        {
+            AppLog( "UIBargraph support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uibargraph.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uibargraphlayout" )
+        {
+            AppLog( "UIBargraph support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uibargraph.ui.txt", widget->GetParent() );
+        }
+    }
+}
+

+ 52 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uibutton.cpp

@@ -0,0 +1,52 @@
+// UIButton application source code
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uibutton( UIWidget *layout)
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUibuttonEvent ));
+}
+
+void PeriodicApp::HandleUibuttonEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uibuttoncode" )
+        {
+            AppLog( "UIButton support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uibutton.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() == "uibuttonlayout" )
+        {
+            AppLog( "UIButton support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uibutton.ui.txt", widget->GetParent() );
+        }
+
+        if (widget->GetId() == "demobutton" )
+        {
+            AppLog( "UIButton action : " + widget->GetId() + " was pressed ");
+        }
+        if (widget->GetId() == "buttonducky" )
+        {
+            AppLog( "UIButton action : " + widget->GetId() + " was pressed ");
+        }
+        if (widget->GetId() == "buttonready" )
+        {
+            AppLog( "UIButton action : " + widget->GetId() + " was pressed ");
+        }
+        if (widget->GetId() == "buttonatomic" )
+        {
+            AppLog( "UIButton action : " + widget->GetId() + " was pressed ");
+        }
+        if (widget->GetId() == "buttongreen" )
+        {
+            AppLog( "UIButton action : " + widget->GetId() + " was pressed ");
+        }
+    }
+}
+

+ 59 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uicheckbox.cpp

@@ -0,0 +1,59 @@
+// UICheckBox application source code
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uicheckbox( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUicheckboxEvent ));
+
+    UIWidget *demochk = layout->GetWidget ("democheck");
+    if (demochk)
+        SubscribeToEvent(demochk, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUicheckboxEvent ));
+}
+
+void PeriodicApp::HandleUicheckboxEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uicheckboxcode" )
+        {
+            AppLog( "UICheckBox support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uicheckbox.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uicheckboxlayout" )
+        {
+            AppLog( "UICheckBox support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uicheckbox.ui.txt", widget->GetParent() );
+        }
+
+        if (widget->GetId() == "democheck" )
+        {
+            AppLog( "UICheckBox event : " + widget->GetId() + " was pressed, state = " + String ( widget->GetValue() ) );
+        }
+
+        if (widget->GetId() ==  "checkset" )
+        {
+            UIWidget *demochk = widget->FindWidget ("democheck");
+            if (demochk)
+            {
+                demochk->SetValue (1);
+                AppLog( "UICheckBox action : " + widget->GetId() + " was pressed, set state to 1" );
+            }
+        }
+        if (widget->GetId() ==  "checkunset" )
+        {
+            UIWidget *demochk = widget->FindWidget ("democheck");
+            if (demochk)
+            {
+                demochk->SetValue (0);
+                AppLog( "UICheckBox action : " + widget->GetId() + " was pressed, set state to 0" );
+            }
+        }
+    }
+}
+

+ 49 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uiclicklabel.cpp

@@ -0,0 +1,49 @@
+// UIClickLabel application source code
+#include "PeriodicApp.h"
+
+
+void PeriodicApp::setup_uiclicklabel( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiclicklabelEvent ));
+
+    UIWidget *chk1 = layout->GetWidget ("somecheck");
+    if (chk1)
+        SubscribeToEvent(chk1, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiclicklabelEvent ));
+
+    UIWidget *chk2 = layout->GetWidget ("someradio");
+    if (chk2)
+        SubscribeToEvent(chk2, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiclicklabelEvent ));
+}
+
+void PeriodicApp::HandleUiclicklabelEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uiclicklabelcode" )
+        {
+            AppLog( "UIClickLabel support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uiclicklabel.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uiclicklabellayout" )
+        {
+            AppLog( "UIClickLabel support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uiclicklabel.ui.txt", widget->GetParent() );
+        }
+
+        if (widget->GetId() == "somecheck" )
+        {
+            AppLog( "UIClickLabel event : " + widget->GetId() + " was pressed, state = " + String ( widget->GetValue() ) );
+        }
+        if (widget->GetId() == "someradio" )
+        {
+            AppLog( "UIClickLabel event : " + widget->GetId() + " was pressed, state = " + String ( widget->GetValue() ) );
+        }
+    }
+}
+

+ 47 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uicolorwheel.cpp

@@ -0,0 +1,47 @@
+// UIColorWheel application source code
+#include <Atomic/UI/UIColorWheel.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uicolorwheel( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUicolorwheelEvent ));
+
+    UIWidget *cwx = layout->GetWidget("colorwheeldemo");
+    if (cwx)
+        SubscribeToEvent(cwx, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUicolorwheelEvent ));
+}
+
+void PeriodicApp::HandleUicolorwheelEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() ==  "uicolorwheelcode" )
+        {
+            AppLog( "UIColorWheel support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uicolorwheel.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uicolorwheellayout" )
+        {
+            AppLog( "UIColorWheel support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uicolorwheel.ui.txt", widget->GetParent() );
+        }
+    }
+    else if (eventData[P_TYPE] == UI_EVENT_TYPE_CHANGED )
+    {
+        if (widget->GetId() ==  "colorwheeldemo" )
+        {
+            UIColorWheel *cwx = static_cast<UIColorWheel*>(widget); // collect click color info
+            if (cwx)
+            {
+                AppLog( "UIColorWheel event : " + widget->GetId() + " hue = " + String(cwx->GetHue()) + " saturation = " + String(cwx->GetSaturation()) );
+            }
+        }
+    }
+}
+

+ 54 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uicolorwidget.cpp

@@ -0,0 +1,54 @@
+// UIColorWidget application source code
+#include <Atomic/UI/UIColorWidget.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uicolorwidget( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUicolorwidgetEvent ));
+}
+
+void PeriodicApp::HandleUicolorwidgetEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uicolorwidgetcode" )
+        {
+            AppLog( "UIColorWidget support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uicolorwidget.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() == "uicolorwidgetlayout" )
+        {
+            AppLog( "UIColorWidget support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uicolorwidget.ui.txt", widget->GetParent() );
+        }
+
+        if (widget->GetId() == "uicolorwidgetred" )
+        {
+            AppLog( "UIColorWidget action : " + widget->GetId() + " was pressed ");
+            UIColorWidget *clw = static_cast<UIColorWidget*>(widget->FindWidget("colorwidgetdemo"));
+            if (clw)
+                clw->SetColorString("#FF1111");
+        }
+        if (widget->GetId() == "uicolorwidgetgreen" )
+        {
+            AppLog( "UIColorWidget action : " + widget->GetId() + " was pressed ");
+            UIColorWidget *clw = static_cast<UIColorWidget*>(widget->FindWidget("colorwidgetdemo"));
+            if (clw)
+                clw->SetColorString("#11FF11");
+        }
+        if (widget->GetId() == "uicolorwidgetblue" )
+        {
+            AppLog( "UIColorWidget action : " + widget->GetId() + " was pressed ");
+            UIColorWidget *clw = static_cast<UIColorWidget*>(widget->FindWidget("colorwidgetdemo"));
+            if (clw)
+                clw->SetColorString("#1111FF");
+        }
+    }
+}
+

+ 31 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uicontainer.cpp

@@ -0,0 +1,31 @@
+// UIContainer application source code
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uicontainer( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUicontainerEvent ));
+}
+
+void PeriodicApp::HandleUicontainerEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uicontainercode" )
+        {
+            AppLog( "UIContainer support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uicontainer.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uicontainerlayout" )
+        {
+            AppLog( "UIContainer support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uicontainer.ui.txt", widget->GetParent() );
+        }
+    }
+}
+

+ 74 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uieditfield.cpp

@@ -0,0 +1,74 @@
+// UIEditField application source code
+#include <Atomic/Resource/ResourceCache.h>
+#include <Atomic/UI/UIEditField.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uieditfield( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUieditfieldEvent ));
+
+    UIWidget *ed1 = layout->GetWidget("editfieldsingle");
+    if ( ed1)
+        SubscribeToEvent(ed1, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUieditfieldEvent ));
+    UIWidget *ed2 = layout->GetWidget("editfieldmulti");
+    if ( ed2)
+        SubscribeToEvent(ed2, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUieditfieldEvent ));
+}
+
+void PeriodicApp::HandleUieditfieldEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uieditfieldcode" )
+        {
+            AppLog( "UIEditField support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uieditfield.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uieditfieldlayout" )
+        {
+            AppLog( "UIEditField support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uieditfield.ui.txt", widget->GetParent() );
+        }
+
+        if (widget->GetId() ==  "editfieldadd" )
+        {
+            AppLog( "UIEditField action : " + widget->GetId() + " was pressed ");
+            UIEditField *ef1 = static_cast<UIEditField*>(widget->FindWidget("editfieldmulti"));
+            if(ef1)
+            {
+                ResourceCache* cache = GetSubsystem<ResourceCache>();
+                SharedPtr<File> filex = cache->GetFile("Scenes/layout_uieditfield.ui.txt");
+                String textx = filex->ReadText();
+                filex->Close();
+                ef1->SetText(textx);
+            }
+        }
+        if (widget->GetId() ==  "editfieldclr" )
+        {
+            AppLog( "UIEditField action : " + widget->GetId() + " was pressed ");
+            UIEditField *ef2 = static_cast<UIEditField*>(widget->FindWidget("editfieldmulti"));
+            if(ef2)
+                ef2->SetText("");
+        }
+    }
+    else
+    {
+        if ( widget->GetId() ==  "editfieldsingle" )
+        {
+            UIEditField *efx = static_cast<UIEditField*>(widget);
+            AppLog( "UIEditField event : " + widget->GetId() + " text = `" + efx->GetText() + "` event type = " + EventReport(eventData[P_TYPE].GetInt()));
+        }
+        if ( widget->GetId() ==  "editfieldmulti" )
+        {
+            UIEditField *efx = static_cast<UIEditField*>(widget);
+            AppLog( "UIEditField event : " + widget->GetId() + " text = `" + efx->GetText() + "` event type = " + EventReport(eventData[P_TYPE].GetInt()));
+        }
+    }
+}
+

+ 58 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uifinderwindow.cpp

@@ -0,0 +1,58 @@
+// UIFinderWindow application source code
+#include <Atomic/UI/UIEvents.h>
+#include <Atomic/UI/UIFinderWindow.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uifinderwindow( UIWidget *layout, UIView *uiview )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUifinderwindowEvent ));
+}
+
+void PeriodicApp::HandleFinderCompleteEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace UIFinderComplete;
+    AppLog( "UIFinderWindow event : the window " + eventData[P_TITLE].GetString()
+            + " file was " + eventData[P_SELECTED].GetString()
+            + ", the button pressed was " + eventData[P_REASON].GetString());
+}
+
+void PeriodicApp::HandleUifinderwindowEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uifinderwindowcode" )
+        {
+            AppLog( "UIFinderWindow support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uifinderwindow.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uifinderwindowlayout" )
+        {
+            AppLog( "UIFinderWindow support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uifinderwindow.ui.txt", widget->GetParent() );
+        }
+
+        if (widget->GetId() == "filefinder" )
+        {
+            AppLog( "UIFinderWindow action : " + widget->GetId() + " was pressed ");
+            UIWidget *someview = (UIWidget *)widget->GetView();
+            UIFinderWindow *windowf = new UIFinderWindow(context_, someview, widget->GetId());
+            SubscribeToEvent( windowf, E_UIFINDERCOMPLETE, ATOMIC_HANDLER(PeriodicApp, HandleFinderCompleteEvent ));
+            windowf->FindFile("Find a File", "", 0, 0, 0);
+        }
+        if (widget->GetId() ==  "folderfinder" )
+        {
+            AppLog( "UIFinderWindow action : " + widget->GetId() + " was pressed ");
+            UIWidget *someview = (UIWidget *)widget->GetView();
+            UIFinderWindow *windowd = new UIFinderWindow(context_, someview, widget->GetId() );
+            SubscribeToEvent( windowd, E_UIFINDERCOMPLETE, ATOMIC_HANDLER(PeriodicApp, HandleFinderCompleteEvent ));
+            windowd->FindPath("Find a Folder", "", 0, 0, 0);
+        }
+    }
+}
+

+ 55 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uifontdescription.cpp

@@ -0,0 +1,55 @@
+// UIFontdescription application source code
+#include <Atomic/UI/UISlider.h>
+#include <Atomic/UI/UIFontDescription.h>
+#include <Atomic/UI/UITextField.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uifontdescription( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUifontdescriptionEvent ));
+
+    UISlider *steps = static_cast<UISlider*>(layout->GetWidget("fontstep"));
+    if(steps)
+        SubscribeToEvent(steps, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUifontdescriptionEvent ));
+}
+
+void PeriodicApp::HandleUifontdescriptionEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uifontdescriptioncode" )
+        {
+            AppLog( "UIFontdescription support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uifontdescription.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uifontdescriptionlayout" )
+        {
+            AppLog( "UIFontdescription support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uifontdescription.ui.txt", widget->GetParent() );
+        }
+    }
+    else if (eventData[P_TYPE] == UI_EVENT_TYPE_CHANGED )
+    {
+        if ( widget->GetId() ==  "fontstep" )
+        {
+            UISlider *uis = static_cast<UISlider*>(widget);
+            if (uis)
+            {
+                UITextField *mytext = static_cast<UITextField*>(widget->FindWidget("changetext"));
+                UIFontDescription *myfont = new UIFontDescription(context_);
+                myfont->SetSize(int(uis->GetValue()));
+                myfont->SetId("Vera");
+                mytext->SetFontDescription (myfont);
+                mytext->SetText ( "Size " + String (int (uis->GetValue())));
+                AppLog( "UIFontdescription action : " + widget->GetId() + " step size changed to " + String (uis->GetValue()));
+            }
+        }
+    }
+}
+

+ 45 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uiimagewidget.cpp

@@ -0,0 +1,45 @@
+// UIImageWidget application source code
+#include <Atomic/UI/UIImageWidget.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uiimagewidget( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiimagewidgetEvent ));
+}
+
+void PeriodicApp::HandleUiimagewidgetEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uiimagewidgetcode" )
+        {
+            AppLog( "UIImageWidget support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uiimagewidget.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uiimagewidgetlayout" )
+        {
+            AppLog( "UIImageWidget support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uiimagewidget.ui.txt", widget->GetParent() );
+        }
+
+        if (widget->GetId() ==  "imagecolor" )
+        {
+            AppLog( "UIImageWidget action : " + widget->GetId() + " was pressed ");
+            UIImageWidget *img1 = static_cast<UIImageWidget*>( widget->FindWidget("imagewidgetdemo") );
+            img1->SetImage("Textures/HSV21.png");
+        }
+        if (widget->GetId() ==  "imagenewbuild" )
+        {
+            AppLog( "UIImageWidget action : " + widget->GetId() + " was pressed ");
+            UIImageWidget *img2 = static_cast<UIImageWidget*>( widget->FindWidget("imagewidgetdemo") );
+            img2->SetImage("Textures/newbuilddetected_header.jpg");
+        }
+    }
+}
+

+ 66 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uiinlineselect.cpp

@@ -0,0 +1,66 @@
+// UIInlineSelect application source code
+#include <Atomic/UI/UIInlineSelect.h>
+#include <Atomic/UI/UISlider.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uiinlineselect( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiinlineselectEvent ));
+
+    UISlider *steps = static_cast<UISlider*>(layout->GetWidget("ilsstep"));
+    if(steps)
+        SubscribeToEvent(steps, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiinlineselectEvent ));
+
+    UIInlineSelect *ils = static_cast<UIInlineSelect*>(layout->GetWidget("inlineselectdemo"));
+    if (ils)
+        SubscribeToEvent( ils, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiinlineselectEvent ));
+}
+
+void PeriodicApp::HandleUiinlineselectEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uiinlineselectcode" )
+        {
+            AppLog( "UIInlineSelect support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uiinlineselect.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uiinlineselectlayout" )
+        {
+            AppLog( "UIInlineSelect support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uiinlineselect.ui.txt", widget->GetParent() );
+        }
+    }
+    else if (eventData[P_TYPE] == UI_EVENT_TYPE_CHANGED )
+    {
+        if (widget->GetId() == "inlineselectdemo" )
+        {
+            UIInlineSelect *ils = static_cast<UIInlineSelect*>(widget);
+            if(ils)
+            {
+                AppLog( "UIInlineSelect event : " + widget->GetId() + " changed value to " + String (ils->GetValue()) );
+            }
+        }
+
+        if (widget->GetId() == "ilsstep" )
+        {
+            UISlider *steps = static_cast<UISlider*>(widget);
+            if(steps)
+            {
+                UIInlineSelect *ils = static_cast<UIInlineSelect*>(widget->FindWidget("inlineselectdemo"));
+                if(ils)
+                {
+                    ils->SetStepSize (steps->GetValue());
+                }
+                AppLog( "UIInlineSelect event : " + widget->GetId() + " step size changed to " + String (steps->GetValue()));
+            }
+        }
+    }
+}
+

+ 373 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uilayout.cpp

@@ -0,0 +1,373 @@
+// UILayout application source code
+#include <Atomic/UI/UIView.h>
+#include <Atomic/UI/UILayout.h>
+#include <Atomic/UI/UICheckBox.h>
+#include <Atomic/UI/UIRadioButton.h>
+#include <Atomic/UI/UITextField.h>
+#include <Atomic/UI/UIButton.h>
+#include <Atomic/UI/UIEditField.h>
+#include <Atomic/UI/UITabContainer.h>
+#include <Atomic/UI/UIWindow.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uilayout( UIWidget *layout, UIView *uiview )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUilayoutEvent ));
+
+    UILayout *myc = static_cast<UILayout *>(layout->GetWidget("uilayoutcontainer")); // get the container layout
+
+    UIButton *tf0 = new UIButton(context_);  // the layout-o-matic spawner
+    tf0->SetText( "LAYOUT-O-MATIC");
+    tf0->SetId( "go_layout_config");
+    UILayout *lo0 = new UILayout(context_);
+    lo0->SetId( "target_layout");
+    lo0->SetLayoutConfig ( "-----" );
+    lo0->Load("Scenes/simp_button.ui.txt");
+    lo0->AddChildBefore(tf0, lo0->GetFirstChild() );
+    myc->AddChild(lo0);  // drop it in
+    SubscribeToEvent(tf0, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUilayoutEvent ));
+
+    UITextField *tf1 = new UITextField(context_);
+    tf1->SetText( "layout config XACAC");
+    UILayout *lo1 = new UILayout(context_);
+    lo1->SetLayoutConfig ( "XACAC" );
+    lo1->Load("Scenes/simp_button.ui.txt");
+    lo1->AddChildBefore(tf1, lo1->GetFirstChild() );
+    myc->AddChild(lo1);
+
+    UITextField *tf2 = new UITextField(context_);
+    tf2->SetText( "layout config XGCAC");
+    UILayout *lo2 = new UILayout(context_);
+    lo2->SetLayoutConfig ( "XGCAC" );
+    lo2->Load("Scenes/simp_button.ui.txt");
+    lo2->AddChildBefore(tf2, lo2->GetFirstChild() );
+    myc->AddChild(lo2);
+
+    UITextField *tf3 = new UITextField(context_);
+    tf3->SetText( "layout config XPCAC");
+    UILayout *lo3 = new UILayout(context_);
+    lo3->SetLayoutConfig ( "XPCAC" );
+    lo3->Load("Scenes/simp_button.ui.txt");
+    lo3->AddChildBefore(tf3, lo3->GetFirstChild() );
+    myc->AddChild(lo3);
+
+    UITextField *tf4 = new UITextField(context_);
+    tf4->SetText( "layout config XACGC");
+    UILayout *lo4 = new UILayout(context_);
+    lo4->SetLayoutConfig ( "XACGC" );
+    lo4->Load("Scenes/simp_button.ui.txt");
+    lo4->AddChildBefore(tf4, lo4->GetFirstChild() );
+    myc->AddChild(lo4);
+
+    UITextField *tf5 = new UITextField(context_);
+    tf5->SetText( "layout config XGRGC");
+    UILayout *lo5 = new UILayout(context_);
+    lo5->SetLayoutConfig ( "XGRGC" );
+    lo5->Load("Scenes/simp_button.ui.txt");
+    lo5->AddChildBefore(tf5, lo5->GetFirstChild() );
+    myc->AddChild(lo5);
+
+    UITextField *tf6 = new UITextField(context_);
+    tf6->SetText( "layout config XPLGC");
+    UILayout *lo6 = new UILayout(context_);
+    lo6->SetLayoutConfig ( "XPLGC" );
+    lo6->Load("Scenes/simp_button.ui.txt");
+    lo6->AddChildBefore(tf6, lo6->GetFirstChild() );
+    myc->AddChild(lo6);
+
+    UITextField *tf7 = new UITextField(context_);
+    tf7->SetText( "layout config XACPC");
+    UILayout *lo7 = new UILayout(context_);
+    lo7->SetLayoutConfig ( "XACPC" );
+    lo7->Load("Scenes/simp_button.ui.txt");
+    lo7->AddChildBefore(tf7, lo7->GetFirstChild() );
+    myc->AddChild(lo7);
+
+    UITextField *tf8 = new UITextField(context_);
+    tf8->SetText( "layout config XGLPL");
+    UILayout *lo8 = new UILayout(context_);
+    lo8->SetLayoutConfig ( "XGLPL" );
+    lo8->Load("Scenes/simp_button.ui.txt");
+    lo8->AddChildBefore(tf8, lo8->GetFirstChild() );
+    myc->AddChild(lo8);
+
+    UITextField *tf9 = new UITextField(context_);
+    tf9->SetText( "layout config XPCPR");
+    UILayout *lo9 = new UILayout(context_);
+    lo9->SetLayoutConfig ( "XPCPR" );
+    lo9->Load("Scenes/simp_button.ui.txt");
+    lo9->AddChildBefore(tf9, lo9->GetFirstChild() );
+    myc->AddChild(lo9);
+
+    context_->SetGlobalVar("layoutomaticstr", "XGCPC" ); // LAYOUT-O-MATIC string, cheating, using a globalvar
+
+}
+
+void PeriodicApp::HandleUilayoutEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "go_layout_config" ) // its LAYOUT-O-MATIC time.
+        {
+            AppLog( "UILayout action : " + widget->GetId() + " was pressed, its LAYOUT-O-MATIC time");
+            UIView *someview = widget->GetView();
+            UIWindow* window = new UIWindow(context_);
+            window->SetSettings ( 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");
+            SubscribeToEvent(okbutt, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUilayoutEvent ));
+
+            PODVector<UIWidget*> lox;
+            window->SearchWidgetClass( "TBRadioButton", lox );
+            for (unsigned ii = 0; ii < lox.Size(); ii++)
+                SubscribeToEvent(lox[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUilayoutEvent ));
+        }
+        if (widget->GetId() ==  "ok" )
+        {
+            UIWindow *mywindow = static_cast<UIWindow *>(FindTheWindowParent(widget));
+            if (mywindow)
+                mywindow->Close();
+        }
+        if (widget->GetId() ==  "set_ax" )
+        {
+            UILayout *targetl = static_cast<UILayout *>(widget->FindWidget("target_layout")); // who to operate on.
+            UIRadioButton *setax = static_cast< UIRadioButton*>(widget); // who we are
+            if (targetl && setax)
+            {
+                if ( setax->GetValue() == 1)
+                {
+                    String current = context_->GetGlobalVar("layoutomaticstr").GetString();
+                    current.Replace (0, 1, "X");
+                    targetl->SetLayoutConfig(current);
+                    context_->SetGlobalVar("layoutomaticstr", current );
+                }
+            }
+        }
+        if (widget->GetId() ==  "set_ay" )
+        {
+            UILayout *targetl = static_cast<UILayout *>(widget->FindWidget("target_layout")); // who to operate on.
+            UIRadioButton *setay = static_cast< UIRadioButton*>(widget); // who we are
+            if (targetl && setay)
+            {
+                if ( setay->GetValue() == 1)
+                {
+                    String current = context_->GetGlobalVar("layoutomaticstr").GetString();
+                    current.Replace (0, 1, "Y");
+                    targetl->SetLayoutConfig(current );
+                    context_->SetGlobalVar("layoutomaticstr", current );
+                }
+            }
+        }
+
+        if (widget->GetId() ==  "set_sza" )
+        {
+            UILayout *targetl = static_cast<UILayout *>(widget->FindWidget("target_layout")); // who to operate on.
+            UIRadioButton *setay = static_cast< UIRadioButton*>(widget); // who we are
+            if (targetl && setay)
+            {
+                if ( setay->GetValue() == 1)
+                {
+                    String current = context_->GetGlobalVar("layoutomaticstr").GetString();
+                    current.Replace (1, 1, "A");
+                    targetl->SetLayoutConfig(current );
+                    context_->SetGlobalVar("layoutomaticstr", current );
+                }
+            }
+        }
+        if (widget->GetId() ==  "set_szg" )
+        {
+            UILayout *targetl = static_cast<UILayout *>(widget->FindWidget("target_layout")); // who to operate on.
+            UIRadioButton *setay = static_cast< UIRadioButton*>(widget); // who we are
+            if (targetl && setay)
+            {
+                if ( setay->GetValue() == 1)
+                {
+                    String current = context_->GetGlobalVar("layoutomaticstr").GetString();
+                    current.Replace (1, 1, "G");
+                    targetl->SetLayoutConfig(current );
+                    context_->SetGlobalVar("layoutomaticstr", current );
+                }
+            }
+        }
+        if (widget->GetId() ==  "set_szp" )
+        {
+            UILayout *targetl = static_cast<UILayout *>(widget->FindWidget("target_layout")); // who to operate on.
+            UIRadioButton *setay = static_cast< UIRadioButton*>(widget); // who we are
+            if (targetl && setay)
+            {
+                if ( setay->GetValue() == 1)
+                {
+                    String current = context_->GetGlobalVar("layoutomaticstr").GetString();
+                    current.Replace (1, 1, "P");
+                    targetl->SetLayoutConfig(current );
+                    context_->SetGlobalVar("layoutomaticstr", current );
+                }
+            }
+        }
+
+
+        if (widget->GetId() ==  "set_posc" )
+        {
+            UILayout *targetl = static_cast<UILayout *>(widget->FindWidget("target_layout")); // who to operate on.
+            UIRadioButton *setay = static_cast< UIRadioButton*>(widget); // who we are
+            if (targetl && setay)
+            {
+                if ( setay->GetValue() == 1)
+                {
+                    String current = context_->GetGlobalVar("layoutomaticstr").GetString();
+                    current.Replace (2, 1, "C");
+                    targetl->SetLayoutConfig(current );
+                    context_->SetGlobalVar("layoutomaticstr", current );
+                }
+            }
+        }
+        if (widget->GetId() ==  "set_posg" )
+        {
+            UILayout *targetl = static_cast<UILayout *>(widget->FindWidget("target_layout")); // who to operate on.
+            UIRadioButton *setay = static_cast< UIRadioButton*>(widget); // who we are
+            if (targetl && setay)
+            {
+                if ( setay->GetValue() == 1)
+                {
+                    String current = context_->GetGlobalVar("layoutomaticstr").GetString();
+                    current.Replace (2, 1, "G");
+                    targetl->SetLayoutConfig(current );
+                    context_->SetGlobalVar("layoutomaticstr", current );
+                }
+            }
+        }
+        if (widget->GetId() ==  "set_posl" )
+        {
+            UILayout *targetl = static_cast<UILayout *>(widget->FindWidget("target_layout")); // who to operate on.
+            UIRadioButton *setay = static_cast< UIRadioButton*>(widget); // who we are
+            if (targetl && setay)
+            {
+                if ( setay->GetValue() == 1)
+                {
+                    String current = context_->GetGlobalVar("layoutomaticstr").GetString();
+                    current.Replace (2, 1, "L");
+                    targetl->SetLayoutConfig(current );
+                    context_->SetGlobalVar("layoutomaticstr", current );
+                }
+            }
+        }
+        if (widget->GetId() ==  "set_posr" )
+        {
+            UILayout *targetl = static_cast<UILayout *>(widget->FindWidget("target_layout")); // who to operate on.
+            UIRadioButton *setay = static_cast< UIRadioButton*>(widget); // who we are
+            if (targetl && setay)
+            {
+                if ( setay->GetValue() == 1)
+                {
+                    String current = context_->GetGlobalVar("layoutomaticstr").GetString();
+                    current.Replace (2, 1, "R");
+                    targetl->SetLayoutConfig(current );
+                    context_->SetGlobalVar("layoutomaticstr", current );
+                }
+            }
+        }
+
+        if (widget->GetId() ==  "set_dista" )
+        {
+            UILayout *targetl = static_cast<UILayout *>(widget->FindWidget("target_layout")); // who to operate on.
+            UIRadioButton *setay = static_cast< UIRadioButton*>(widget); // who we are
+            if (targetl && setay)
+            {
+                if ( setay->GetValue() == 1)
+                {
+                    String current = context_->GetGlobalVar("layoutomaticstr").GetString();
+                    current.Replace (3, 1, "A");
+                    targetl->SetLayoutConfig(current );
+                    context_->SetGlobalVar("layoutomaticstr", current );
+                }
+            }
+        }
+        if (widget->GetId() ==  "set_distg" )
+        {
+            UILayout *targetl = static_cast<UILayout *>(widget->FindWidget("target_layout")); // who to operate on.
+            UIRadioButton *setay = static_cast< UIRadioButton*>(widget); // who we are
+            if (targetl && setay)
+            {
+                if ( setay->GetValue() == 1)
+                {
+                    String current = context_->GetGlobalVar("layoutomaticstr").GetString();
+                    current.Replace (3, 1, "G");
+                    targetl->SetLayoutConfig(current );
+                    context_->SetGlobalVar("layoutomaticstr", current );
+                }
+            }
+        }
+        if (widget->GetId() ==  "set_distp" )
+        {
+            UILayout *targetl = static_cast<UILayout *>(widget->FindWidget("target_layout")); // who to operate on.
+            UIRadioButton *setay = static_cast< UIRadioButton*>(widget); // who we are
+            if (targetl && setay)
+            {
+                if ( setay->GetValue() == 1)
+                {
+                    String current = context_->GetGlobalVar("layoutomaticstr").GetString();
+                    current.Replace (3, 1, "P");
+                    targetl->SetLayoutConfig(current );
+                    context_->SetGlobalVar("layoutomaticstr", current );
+                }
+            }
+        }
+
+        if (widget->GetId() ==  "set_dpc" )
+        {
+            UILayout *targetl = static_cast<UILayout *>(widget->FindWidget("target_layout")); // who to operate on.
+            UIRadioButton *setay = static_cast< UIRadioButton*>(widget); // who we are
+            if (targetl && setay)
+            {
+                if ( setay->GetValue() == 1)
+                {
+                    String current = context_->GetGlobalVar("layoutomaticstr").GetString();
+                    current.Replace (4, 1, "C");
+                    targetl->SetLayoutConfig(current );
+                    context_->SetGlobalVar("layoutomaticstr", current );
+                }
+            }
+        }
+        if (widget->GetId() ==  "set_dpl" )
+        {
+            UILayout *targetl = static_cast<UILayout *>(widget->FindWidget("target_layout")); // who to operate on.
+            UIRadioButton *setay = static_cast< UIRadioButton*>(widget); // who we are
+            if (targetl && setay)
+            {
+                if ( setay->GetValue() == 1)
+                {
+                    String current = context_->GetGlobalVar("layoutomaticstr").GetString();
+                    current.Replace (4, 1, "L");
+                    targetl->SetLayoutConfig(current );
+                    context_->SetGlobalVar("layoutomaticstr", current );
+                }
+            }
+        }
+        if (widget->GetId() ==  "set_dpr" )
+        {
+            UILayout *targetl = static_cast<UILayout *>(widget->FindWidget("target_layout")); // who to operate on.
+            UIRadioButton *setay = static_cast< UIRadioButton*>(widget); // who we are
+            if (targetl && setay)
+            {
+                if ( setay->GetValue() == 1)
+                {
+                    String current = context_->GetGlobalVar("layoutomaticstr").GetString();
+                    current.Replace (4, 1, "R");
+                    targetl->SetLayoutConfig(current );
+                    context_->SetGlobalVar("layoutomaticstr", current );
+                }
+            }
+        }
+    }
+}
+

+ 31 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uilayoutparams.cpp

@@ -0,0 +1,31 @@
+// UILayoutParams application source code
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uilayoutparams( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp,HandleUilayoutparamsEvent  ));
+}
+
+void PeriodicApp::HandleUilayoutparamsEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uilayoutparamscode" )
+        {
+            AppLog( "UILayoutParams support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uilayoutparams.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uilayoutparamslayout" )
+        {
+            AppLog( "UILayoutParams support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uilayoutparams.ui.txt", widget->GetParent() );
+        }
+    }
+}
+

+ 88 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uimenuitem.cpp

@@ -0,0 +1,88 @@
+// UIMenuItem and UIMenuItemSource application source code
+#include <ThirdParty/TurboBadger/tb_widgets.h>
+#include <Atomic/UI/UIMenuWindow.h>
+#include <Atomic/UI/UIMenubar.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uimenuitem( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUimenuitemEvent ));
+
+    UIMenuItemSource *mis = new UIMenuItemSource(context_);
+    mis->AddItem( new UIMenuItem( context_,"UISelectItem1", "item1" ) );
+    mis->AddItem( new UIMenuItem( context_,"UISelectItem2", "item2", "Ctrl+." ) );
+    mis->AddItem( new UIMenuItem( context_,"UISelectItem3", "item3", "Ctrl+A", "DuckButton" ) );
+    mis->AddItem( new UIMenuItem( context_,"UISelectItem4", "item4", "Ctrl+O", "LogoAtomic" ) );
+    context_->SetGlobalVar( "menuitemptr", mis );
+}
+
+void PeriodicApp::HandleUimenuitemEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    String refid = eventData[P_REFID].GetString();
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uimenuitemcode" )
+        {
+            AppLog( "UIMenuItem support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uimenuitem.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uimenuitemlayout" )
+        {
+            AppLog( "UIMenuItem support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uimenuitem.ui.txt", widget->GetParent() );
+        }
+
+        if (widget->GetId() ==  "uimenuitempush" )
+        {
+            UIMenuItemSource *gmis = (UIMenuItemSource*)context_->GetGlobalVar("menuitemptr").GetPtr();
+            UIMenuWindow* mymenuwindow = new UIMenuWindow( context_, widget, "MenuItemDemo");
+            int xx = widget->GetX() + (widget->GetWidth()/2);
+            int yy = widget->GetY() + (widget->GetHeight()/2);
+            SubscribeToEvent(mymenuwindow, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUimenuitemEvent ));
+            mymenuwindow->Show(gmis, xx, yy);
+        }
+
+        if (widget->GetId() ==  "MenuItemDemo" )
+        {
+            AppLog( "UIMenuItem event : " + widget->GetId() + " and " + refid + " was selected ");
+        }
+
+        if (widget->GetId() ==  "uimi1" )
+        {
+            AppLog( "UIMenuItem action : " + widget->GetId() + " was pressed ");
+            UIMenuItemSource *gmis = (UIMenuItemSource*)context_->GetGlobalVar("menuitemptr").GetPtr();
+            gmis->AddItem( new UIMenuItem( context_, "New UIMenuItem") );
+        }
+        if (widget->GetId() ==  "uimi2" )
+        {
+            AppLog( "UIMenuItem action : " + widget->GetId() + " was pressed ");
+            UIMenuItemSource *gmis = (UIMenuItemSource*)context_->GetGlobalVar("menuitemptr").GetPtr();
+            gmis->AddItem( new UIMenuItem( context_, "Newer UIMenuItem", "neweritem" ) );
+        }
+        if (widget->GetId() ==  "uimi3" )
+        {
+            AppLog( "UIMenuItem action : " + widget->GetId() + " was pressed ");
+            UIMenuItemSource *gmis = (UIMenuItemSource*)context_->GetGlobalVar("menuitemptr").GetPtr();
+            gmis->AddItem( new UIMenuItem( context_, "A Duck", "aduck", "", "DuckButton" ) );
+        }
+        if (widget->GetId() ==  "uimi4" )
+        {
+            AppLog( "UIMenuItem action : " + widget->GetId() + " was pressed ");
+            UIMenuItemSource *gmis = (UIMenuItemSource*)context_->GetGlobalVar("menuitemptr").GetPtr();
+            gmis->AddItem( new UIMenuItem( context_, "Atomic!", "atomic", "", "LogoAtomic" ) );
+        }
+        if (widget->GetId() ==  "uimi5" )
+        {
+            AppLog( "UIMenuItem action : " + widget->GetId() + " was pressed ");
+            UIMenuItemSource *gmis = (UIMenuItemSource*)context_->GetGlobalVar("menuitemptr").GetPtr();
+            gmis->Clear();
+        }
+    }
+}
+

+ 62 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uimenuwindow.cpp

@@ -0,0 +1,62 @@
+// UIMenuWindow application source code
+#include <ThirdParty/TurboBadger/tb_widgets.h>
+#include <Atomic/UI/UIMenuWindow.h>
+#include <Atomic/UI/UIMenubar.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uimenuwindow( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUimenuwindowEvent ));
+}
+
+void PeriodicApp::HandleUimenuwindowEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    String refid = eventData[P_REFID].GetString();
+    if ( widget == NULL) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uimenuwindowcode" )
+        {
+            AppLog( "UIMenuWindow support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uimenuwindow.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uimenuwindowlayout" )
+        {
+            AppLog( "UIMenuWindow support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_.uimenuwindowui.txt", widget->GetParent() );
+        }
+
+        if (widget->GetId() ==  "uimenuwindowpush" )
+        {
+            AppLog( "UIMenuWindow action : " + widget->GetId() + " was pressed " );
+            UIMenuWindow* mymenuwindow = new UIMenuWindow( context_, widget, "MenuWindowDemo");
+            UIMenuItemSource *mis = new UIMenuItemSource(context_);
+            mis->AddItem( new UIMenuItem( context_,"UISelectItem1", "item1" ) );
+            mis->AddItem( new UIMenuItem( context_,"UISelectItem2", "item2", "Ctrl+C" ) );
+            mis->AddItem( new UIMenuItem( context_,"UISelectItem3", "item3", "Ctrl+A", "DuckButton" ) );
+            mis->AddItem( new UIMenuItem( context_,"UISelectItem4", "item4", "Ctrl+O", "LogoAtomic" ) );
+            int xx = widget->GetX() + (widget->GetWidth()/2);
+            int yy = widget->GetY() + (widget->GetHeight()/2);
+            SubscribeToEvent(mymenuwindow, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUimenuwindowEvent ));
+            mymenuwindow->Show(mis, xx, yy);
+        }
+
+        if (widget->GetId() ==  "MenuWindowDemo" )
+        {
+            AppLog( "UIMenuWindow event : " + widget->GetId() + " and " + refid + " was selected ");
+        }
+    }
+    else
+    {
+        if (widget->GetId() ==  "MenuWindowDemo" )
+        {
+            AppLog( "UIMenuWindow event : " + widget->GetId() +  " refid=" + refid + " event type=" + EventReport(eventData[P_TYPE].GetInt()));
+        }
+    }
+}
+

+ 83 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uimessagewindow.cpp

@@ -0,0 +1,83 @@
+// UIMessageWindow application source code
+#include <Atomic/UI/UIMessageWindow.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uimessagewindow( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUimessagewindowEvent ));
+}
+
+void PeriodicApp::HandleUimessagewindowEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    UIWidget* mylayout = static_cast<UIWidget*>(widget->FindWidget("pageuimessagewindow"));
+    String refid = eventData[P_REFID].GetString();
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uimessagewindowcode" )
+        {
+            AppLog( "UIMessageWindow support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uimessagewindow.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uimessagewindowlayout" )
+        {
+            AppLog( "UIMessageWindow support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uimessagewindow.ui.txt", widget->GetParent() );
+        }
+
+        if (widget->GetId() ==  "msgnone" )
+        {
+            AppLog( "UIMessageWindow support : " + widget->GetId() + " was pressed ");
+            UIMessageWindow *mess1 = new UIMessageWindow(context_, mylayout, "mymess1");
+            mess1->Show("MessageWindow - NONE", "this is a MessageWindow - None button", (UI_MESSAGEWINDOW_SETTINGS)0, 0, 0, 0);
+        }
+        if (widget->GetId() ==  "msgok" )
+        {
+            AppLog( "UIMessageWindow support : " + widget->GetId() + " was pressed ");
+            UIMessageWindow *mess2 = new UIMessageWindow(context_, mylayout, "mymess2");
+            SubscribeToEvent(mess2, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUimessagewindowEvent ));
+            mess2->Show("MessageWindow - OK", "this is a MessageWindow - OK button", UI_MESSAGEWINDOW_SETTINGS_OK, 0, 0, 0);
+        }
+        if (widget->GetId() ==  "msgkcancel" )
+        {
+            AppLog( "UIMessageWindow support : " + widget->GetId() + " was pressed ");
+            UIMessageWindow *mess3 = new UIMessageWindow(context_, mylayout, "mymess3");
+            SubscribeToEvent(mess3, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUimessagewindowEvent ));
+            mess3->Show("MessageWindow - OK CANCEL", "this is a MessageWindow - OK CANCEL buttons", UI_MESSAGEWINDOW_SETTINGS_OK_CANCEL, 0, 0, 0);
+        }
+        if (widget->GetId() ==  "msgyesno" )
+        {
+            AppLog( "UIMessageWindow support : " + widget->GetId() + " was pressed ");
+            UIMessageWindow *mess4 = new UIMessageWindow(context_, mylayout, "mymess4");
+            SubscribeToEvent(mess4, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUimessagewindowEvent ));
+            mess4->Show( "MessageWindow - YES NO", "this is a MessageWindow - YES NO buttons", UI_MESSAGEWINDOW_SETTINGS_YES_NO, 0, 0, 0);
+        }
+
+        if (refid ==  "TBMessageWindow.ok" )
+        {
+            AppLog( "UIMessageWindow event : " + refid + " closed the UIMessageWindow");
+        }
+        if (refid ==  "TBMessageWindow.cancel" )
+        {
+            AppLog( "UIMessageWindow event : " + refid + " closed the UIMessageWindow");
+        }
+        if (refid ==  "TBMessageWindow.yes" )
+        {
+            AppLog( "UIMessageWindow event : " + refid + " closed the UIMessageWindow");
+        }
+        if (refid ==  "TBMessageWindow.no" )
+        {
+            AppLog( "UIMessageWindow event : " + refid + " closed the UIMessageWindow");
+        }
+    }
+    else
+    {
+        AppLog( "UIMessageWindow event : " + widget->GetId() + " event type = " + EventReport(eventData[P_TYPE].GetInt()));
+    }
+}
+

+ 51 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uipromptwindow.cpp

@@ -0,0 +1,51 @@
+// UIPromptWindow application source code
+#include <Atomic/UI/UIEvents.h>
+#include <Atomic/UI/UIPromptWindow.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uipromptwindow( UIWidget *layout, UIView *uiview )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUipromptwindowEvent ));
+}
+
+void PeriodicApp::HandlePromptCompleteEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace UIPromptComplete;
+
+    AppLog( "UIPromptWindow event : the window " + eventData[P_TITLE].GetString()
+            + " file was " + eventData[P_SELECTED].GetString()
+            + ", the button pressed was " + eventData[P_REASON].GetString());
+}
+
+void PeriodicApp::HandleUipromptwindowEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uipromptwindowcode" )
+        {
+            AppLog( "UIPromptWindow support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uipromptwindow.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uipromptwindowlayout" )
+        {
+            AppLog( "UIPromptWindow support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uipromptwindow.ui.txt", widget->GetParent() );
+        }
+
+        if (widget->GetId() == "stringfinder" )
+        {
+            AppLog( "UIPromptWindow action : " + widget->GetId() + " was pressed ");
+            UIWidget *someview = (UIWidget *)widget->GetView();
+            UIPromptWindow *windowp = new  UIPromptWindow(context_, someview, widget->GetId());
+            SubscribeToEvent( windowp, E_UIPROMPTCOMPLETE, ATOMIC_HANDLER(PeriodicApp, HandlePromptCompleteEvent ));
+            windowp->Show( "WindowTitle", "Message in window", "preset value", 0, 0, 0);
+        }
+    }
+}
+

+ 63 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uipulldownmenu.cpp

@@ -0,0 +1,63 @@
+// UIPulldownMenu application source code
+#include <Atomic/UI/UIPulldownMenu.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uipulldownmenu( UIWidget *layout )
+{
+    unsigned ii = 0;
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for ( ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUipulldownmenuEvent ));
+    layout->SearchWidgetClass( "TBPulldownMenu", dest );
+    for ( ii = 0;  ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUipulldownmenuEvent ));
+}
+
+void PeriodicApp::HandleUipulldownmenuEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uipulldownmenucode" )
+        {
+            AppLog( "UIPulldownMenu support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uipulldownmenu.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uipulldownmenulayout" )
+        {
+            AppLog( "UIPulldownMenu support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uipulldownmenu.ui.txt", widget->GetParent() );
+        }
+    }
+    else if (eventData[P_TYPE] == UI_EVENT_TYPE_CHANGED )
+    {
+        if (widget->GetId() ==  "FileMenu" )
+        {
+            UIPulldownMenu *pdm = static_cast<UIPulldownMenu*>(widget);
+            if ( pdm)
+                AppLog( "UIPulldownMenu event : " + widget->GetId() + " selected entry = " + String( pdm->GetSelectedId()) );
+        }
+        if (widget->GetId() ==  "EditMenu" )
+        {
+            UIPulldownMenu *pdm = static_cast<UIPulldownMenu*>(widget);
+            if ( pdm)
+                AppLog( "UIPulldownMenu event : " + widget->GetId() + " selected entry = " + String( pdm->GetSelectedId()) );
+        }
+        if (widget->GetId() ==  "ViewMenu" )
+        {
+            UIPulldownMenu *pdm = static_cast<UIPulldownMenu*>(widget);
+            if ( pdm)
+                AppLog( "UIPulldownMenu event : " + widget->GetId() + " selected entry = " + String( pdm->GetSelectedId()) );
+        }
+        if (widget->GetId() ==  "HelpMenu" )
+        {
+            UIPulldownMenu *pdm = static_cast<UIPulldownMenu*>(widget);
+            if ( pdm)
+                AppLog( "UIPulldownMenu event : " + widget->GetId() + " selected entry = " + String( pdm->GetSelectedId()) );
+        }
+    }
+}
+

+ 60 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uiradiobutton.cpp

@@ -0,0 +1,60 @@
+// UIRadioButton application source code
+#include <Atomic/UI/UIRadioButton.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uiradiobutton( UIWidget *layout)
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiradiobuttonEvent ));
+
+    UIWidget *demochk = layout->GetWidget ("demoradio");
+    if ( demochk)
+        SubscribeToEvent( demochk, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiradiobuttonEvent ));
+}
+
+void PeriodicApp::HandleUiradiobuttonEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uiradiobuttoncode" )
+        {
+            AppLog( "UIRadioButton support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uiradiobutton.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uiradiobuttonlayout" )
+        {
+            AppLog( "UIRadioButton support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uiradiobutton.ui.txt", widget->GetParent() );
+        }
+
+        if (widget->GetId() == "demoradio" )
+        {
+            AppLog( "UIRadioButton event : " + widget->GetId() + " was pressed, state = " + String ( widget->GetValue() ) );
+        }
+
+        if (widget->GetId() ==  "radioset" )
+        {
+            UIWidget *demochk = widget->FindWidget ("demoradio");
+            if (demochk)
+            {
+                demochk->SetValue (1);
+                AppLog( "UIRadioButton action : " + widget->GetId() + " was pressed, set state to 1" );
+            }
+        }
+        if (widget->GetId() ==  "radiounset" )
+        {
+            UIWidget *demochk = widget->FindWidget ("demoradio");
+            if (demochk)
+            {
+                demochk->SetValue (0);
+                AppLog( "UIRadioButton action : " + widget->GetId() + " was pressed, set state to 0" );
+            }
+        }
+    }
+}
+

+ 84 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uisceneview.cpp

@@ -0,0 +1,84 @@
+// UISceneView application source code
+// some code from UISceneview2D sample program
+#include <Atomic/UI/UISceneView.h>
+#include <Atomic/UI/UILayout.h>
+#include <Atomic/Scene/Scene.h>
+#include <Atomic/Graphics/Camera.h>
+#include <Atomic/Resource/ResourceCache.h>
+#include "PeriodicApp.h"
+#include "Spinner.h"
+
+void PeriodicApp::setup_uisceneview( UIWidget *layout)
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUisceneviewEvent ));
+
+    UISceneView * mysceneview = new UISceneView(context_);  // make a scene...view
+    mysceneview->SetId( "UISceneViewDemo"); // tag it, in case we want to get it again later
+    SubscribeToEvent(mysceneview, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUisceneviewEvent ));
+
+    /*
+        Scene *myscene = GetSubsystem<AtomicPlayer::Player>()->LoadScene("Scenes/sceneview.scene");
+    	DONT DO IT THIS WAY for C++! Make a scene, then LoadXML!
+    */
+
+    ResourceCache* cache = GetSubsystem<ResourceCache>();
+    Scene *myscene = new Scene(context_);
+    if ( myscene )
+    {
+        if ( myscene->LoadXML(*(cache->GetFile("Scenes/sceneview.scene"))))
+        {
+            Node *cameraNode = myscene->GetChild("Camera", true);
+            Camera* mycamera = cameraNode->GetComponent<Camera>();
+            Node* planetNode = myscene->GetChild("TheWorld", true);
+            if(planetNode) // spin-o-rama, c++ style
+            {
+                Rotator* rotator = planetNode->CreateComponent<Rotator>();
+                rotator->SetRotationSpeed(Vector3(0.0f, 20.0f, 1.0f));
+            }
+            mysceneview->SetView(myscene, mycamera);
+            mysceneview->SetAutoUpdate(true);
+        }
+    }
+
+    UILayoutParams *lpx = new UILayoutParams(context_);
+    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);
+
+}
+
+void PeriodicApp::HandleUisceneviewEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uisceneviewcode" )
+        {
+            AppLog( "UISceneView support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uisceneview.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uisceneviewlayout" )
+        {
+            AppLog( "UISceneView support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uisceneview.ui.txt", widget->GetParent() );
+        }
+    }
+    if ( widget->GetId() ==  "UISceneViewDemo" )
+    {
+        AppLog( "UISceneView event : " + widget->GetId() + " got event= "+ EventReport(eventData[P_TYPE].GetInt()) );
+    }
+}
+

+ 55 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uiscrollbar.cpp

@@ -0,0 +1,55 @@
+// UIScrollBar application source code
+#include <Atomic/UI/UIScrollBar.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uiscrollbar( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiscrollbarEvent ));
+
+    UIWidget *sbx = layout->GetWidget("scrollbardemo");
+    if (sbx)  // warning - this will route for all scrollbar instances events into this event handler.
+        sbx->SubscribeToEvent( E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleAllScrollcontainerEvent ));
+}
+
+void PeriodicApp::HandleAllScrollcontainerEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+
+    UIWidget *sbx = widget->FindWidget("scrollbardemo");  // find our scrollbar
+    if ( widget != sbx ) return; // if its not ours, bail
+
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CHANGED )
+    {
+        if (widget->GetId() ==  "scrollbardemo" )
+        {
+            AppLog( "UIScrollBar action : " + widget->GetId() + " changed value to " + String (widget->GetValue()));
+        }
+    }
+}
+
+void PeriodicApp::HandleUiscrollbarEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uiscrollbarcode" )
+        {
+            AppLog( "UIScrollBar support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uiscrollbar.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uiscrollbarlayout" )
+        {
+            AppLog( "UIScrollBar support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uiscrollbar.ui.txt", widget->GetParent() );
+        }
+    }
+}
+

+ 31 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uiscrollcontainer.cpp

@@ -0,0 +1,31 @@
+// UIScrollContainer application source code
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uiscrollcontainer( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiscrollcontainerEvent ));
+}
+
+void PeriodicApp::HandleUiscrollcontainerEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uiscrollcontainercode" )
+        {
+            AppLog( " support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uiscrollcontainer.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uiscrollcontainerlayout" )
+        {
+            AppLog( " support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uiscrollcontainer.ui.txt", widget->GetParent() );
+        }
+    }
+}
+

+ 50 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uisection.cpp

@@ -0,0 +1,50 @@
+// UISection application source code
+#include <Atomic/UI/UISection.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uisection( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUisectionEvent ));
+
+    UIWidget *sec1 = layout->GetWidget("UISectionDemo");
+    if (sec1)
+        SubscribeToEvent( sec1, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUisectionEvent ));
+    UIWidget *sec2 = layout->GetWidget("UISection2Demo");
+    if (sec2)
+        SubscribeToEvent( sec2, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUisectionEvent ));
+}
+
+void PeriodicApp::HandleUisectionEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uisectioncode" )
+        {
+            AppLog( "UISection support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uisection.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uisectionlayout" )
+        {
+            AppLog( "UISection support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uisection.ui.txt", widget->GetParent() );
+        }
+    }
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CHANGED )
+    {
+        UIWidget *demo1 = widget->FindWidget("UISectionDemo"); // event comes in on child widget!
+        if ( demo1->IsAncestorOf(widget) )
+            AppLog( "UISection event : " +  demo1->GetId() + " changed to value = " + String(demo1->GetValue()));
+
+        UIWidget *demo2 = widget->FindWidget("UISection2Demo");
+        if ( demo2->IsAncestorOf(widget)  )
+            AppLog( "UISection event : " +  demo2->GetId() + " changed to value = " + String(demo2->GetValue()));
+    }
+}
+

+ 54 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uiselectdropdown.cpp

@@ -0,0 +1,54 @@
+// UISelectDropdown application source code
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uiselectdropdown( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiselectdropdownEvent ));
+
+    UIWidget *demo = layout->GetWidget("selectdropdowndemo");
+    if ( demo) // warning - this will route for all UISelectDropdown instances events into this event handler.
+        demo->SubscribeToEvent(E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleAllSelectdropdownEvent ));
+}
+
+void PeriodicApp::HandleAllSelectdropdownEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+
+    UIWidget *demo = widget->FindWidget("selectdropdowndemo");  // find our specific widget
+    if ( widget != demo ) return; // if its not ours, bail
+
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CHANGED )
+    {
+        if (widget->GetId() ==  "selectdropdowndemo" )
+        {
+            AppLog( "UISelectDropdown event : " + widget->GetId() + " changed value to " + widget->GetText());
+        }
+    }
+}
+
+void PeriodicApp::HandleUiselectdropdownEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uiselectdropdowncode" )
+        {
+            AppLog( "UISelectDropdown support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uiselectdropdown.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uiselectdropdownlayout" )
+        {
+            AppLog( "UISelectDropdown support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uiselectdropdown.ui.txt", widget->GetParent() );
+        }
+
+    }
+}
+

+ 106 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uiselectitem.cpp

@@ -0,0 +1,106 @@
+// UISelectItem and UISelectItemSource application source code
+#include <ThirdParty/TurboBadger/tb_widgets.h>
+#include <Atomic/UI/UISelectItem.h>
+#include <Atomic/UI/UISelectList.h>
+#include <Atomic/UI/UILayout.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uiselectitem( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiselectitemEvent ));
+
+    UISelectList *mylist = new UISelectList(context_);
+    mylist->SetId( "UISelectItemList"); // tag it, in case we want to get it again later
+    UILayoutParams *lpx = new UILayoutParams(context_);
+    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);
+    SubscribeToEvent(mylist, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiselectitemEvent ));
+
+    UISelectItemSource *sis = new UISelectItemSource(context_);
+    sis->AddItem( new UISelectItem( context_, "UISelectItem1", "sitem1" ) );
+    sis->AddItem( new UISelectItem( context_, "UISelectItem2", "sitem2" ) );
+    sis->AddItem( new UISelectItem( context_, "UISelectItem3", "sitem3", "DuckButton" ) );
+    sis->AddItem( new UISelectItem( context_, "UISelectItem4", "sitem4", "LogoAtomic" ) );
+    context_->SetGlobalVar( "selectitemptr", sis );  // make a global reference.
+
+    mylist->SetSource(sis); // assign this into the list
+}
+
+void PeriodicApp::HandleUiselectitemEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    String refid = eventData[P_REFID].GetString();
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uiselectitemcode" )
+        {
+            AppLog( "UISelectItem support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uiselectitem.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uiselectitemlayout" )
+        {
+            AppLog( "UISelectItem support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uiselectitem.ui.txt", widget->GetParent() );
+        }
+
+        if (widget->GetId() ==  "UISelectItemList" )
+        {
+            AppLog( "UISelectItem event : " + widget->GetId() + " and " + refid + " was selected ");
+        }
+
+        if (widget->GetId() ==  "uisi1" )
+        {
+            AppLog( "UISelectItem action : " + widget->GetId() + " was pressed ");
+            UISelectItemSource *gsis = (UISelectItemSource*)context_->GetGlobalVar("selectitemptr").GetPtr();
+            UISelectList* slist = static_cast<UISelectList*>(widget->FindWidget("UISelectItemList"));
+            gsis->AddItem( new UISelectItem( context_, "New UISelectItem") );
+            slist->SetSource(gsis);
+        }
+        if (widget->GetId() ==  "uisi2" )
+        {
+            AppLog( "UISelectItem action : " + widget->GetId() + " was pressed ");
+            UISelectItemSource *gsis = (UISelectItemSource*)context_->GetGlobalVar("selectitemptr").GetPtr();
+            UISelectList* slist = static_cast<UISelectList*>(widget->FindWidget("UISelectItemList"));
+            gsis->AddItem( new UISelectItem( context_,"Newer UISelectItem", "neweritem" ) );
+            slist->SetSource(gsis);
+        }
+        if (widget->GetId() ==  "uisi3" )
+        {
+            AppLog( "UISelectItem action : " + widget->GetId() + " was pressed ");
+            UISelectItemSource *gsis = (UISelectItemSource*)context_->GetGlobalVar("selectitemptr").GetPtr();
+            UISelectList* slist = static_cast<UISelectList*>(widget->FindWidget("UISelectItemList"));
+            gsis->AddItem( new UISelectItem(context_,  "A Duck", "aduck", "DuckButton" ) );
+            slist->SetSource(gsis);
+        }
+        if (widget->GetId() ==  "uisi4" )
+        {
+            AppLog( "UISelectItem action : " + widget->GetId() + " was pressed ");
+            UISelectItemSource *gsis = (UISelectItemSource*)context_->GetGlobalVar("selectitemptr").GetPtr();
+            UISelectList* slist = static_cast<UISelectList*>(widget->FindWidget("UISelectItemList"));
+            gsis->AddItem( new UISelectItem(context_, "Atomic!", "atomic", "LogoAtomic" ) );
+            slist->SetSource(gsis);
+        }
+        if (widget->GetId() ==  "uisi5" )
+        {
+            AppLog( "UISelectItem action : " + widget->GetId() + " was pressed ");
+            UISelectItemSource *gsis = (UISelectItemSource*)context_->GetGlobalVar("selectitemptr").GetPtr();
+            UISelectList* slist = static_cast<UISelectList*>(widget->FindWidget("UISelectItemList"));
+            gsis->Clear();
+            slist->SetSource(gsis);
+        }
+    }
+}
+

+ 78 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uiselectlist.cpp

@@ -0,0 +1,78 @@
+// UISelectList application source code
+#include <ThirdParty/TurboBadger/tb_widgets.h>
+#include <Atomic/UI/UISelectItem.h>
+#include <Atomic/UI/UISelectList.h>
+#include <Atomic/UI/UILayout.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uiselectlist( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiselectlistEvent ));
+
+    UIWidget *slist = layout->GetWidget ("UISelectListDemo");
+    if ( slist)
+        SubscribeToEvent(slist, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiselectlistEvent ));
+}
+
+void PeriodicApp::HandleUiselectlistEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    String refid = eventData[P_REFID].GetString();
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uiselectlistcode" )
+        {
+            AppLog( "UISelectList support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uiselectlist.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uiselectlistlayout" )
+        {
+            AppLog( "UISelectList support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uiselectlist.ui.txt", widget->GetParent() );
+        }
+
+        if (widget->GetId() ==  "UISelectListDemo" )
+        {
+            AppLog( "UISelectList event : " + widget->GetId() + " and " + refid + " was selected ");
+        }
+
+        if (widget->GetId() ==  "selectlistadd" )
+        {
+            AppLog( "UISelectList action : " + widget->GetId() + " was pressed ");
+            UISelectList* slist = static_cast<UISelectList*>(widget->FindWidget("UISelectListDemo"));
+            slist->AddItem(slist->GetNumItems(), "New Entry");
+        }
+        if (widget->GetId() ==  "selectlistdel" )
+        {
+            AppLog( "UISelectList action : " + widget->GetId() + " was pressed ");
+            UISelectList* slist = static_cast<UISelectList*>(widget->FindWidget("UISelectListDemo"));
+            int si = slist->GetValue(); // this is the selected index
+            slist->DeleteItem(si);
+        }
+        if (widget->GetId() ==  "selectlistdelall" )
+        {
+            AppLog( "UISelectList action : " + widget->GetId() + " was pressed ");
+            UISelectList* slist = static_cast<UISelectList*>(widget->FindWidget("UISelectListDemo"));
+            slist->DeleteAllItems();
+        }
+        if (widget->GetId() ==  "selectlistnew" )
+        {
+            AppLog( "UISelectList action : " + widget->GetId() + " was pressed ");
+            UISelectList* slist = static_cast<UISelectList*>(widget->FindWidget("UISelectListDemo"));
+            UISelectItemSource *sis = new UISelectItemSource(context_);
+            sis->AddItem( new UISelectItem( context_, "list 1","list1", "LogoAtomic" ));
+            sis->AddItem( new UISelectItem( context_, "list 2","list2", "" ));
+            sis->AddItem( new UISelectItem( context_, "list 3","list3", "" ));
+            sis->AddItem( new UISelectItem( context_, "list 4","list4", "" ));
+            sis->AddItem( new UISelectItem( context_, "list 5","list5", "" ));
+            sis->AddItem( new UISelectItem( context_, "list 6","list6", "" ));
+            slist->SetSource(sis);
+        }
+    }
+}
+

+ 31 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uiseparator.cpp

@@ -0,0 +1,31 @@
+// UISeparator application source code
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uiseparator( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiseparatorEvent ));
+}
+
+void PeriodicApp::HandleUiseparatorEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uiseparatorcode" )
+        {
+            AppLog( "UISeparator support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uiseparator.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uiseparatorlayout" )
+        {
+            AppLog( "UISeparator support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uiseparator.ui.txt", widget->GetParent() );
+        }
+    }
+}
+

+ 31 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uiskinimage.cpp

@@ -0,0 +1,31 @@
+// UISkinImage application source code
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uiskinimage( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiskinimageEvent ));
+}
+
+void PeriodicApp::HandleUiskinimageEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uiskinimagecode" )
+        {
+            AppLog( "UISkinImage support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uiskinimage.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uiskinimagelayout" )
+        {
+            AppLog( "UISkinImage support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uiskinimage.ui.txt", widget->GetParent() );
+        }
+    }
+}
+

+ 54 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uislider.cpp

@@ -0,0 +1,54 @@
+// UISlider application source code
+#include <Atomic/UI/UISlider.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uislider( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUisliderEvent ));
+
+    UISlider *slider = static_cast<UISlider*>(layout->GetWidget("sliderdemo"));
+    if (slider) // warning - this will route for all UISlider instances events into this event handler.
+        slider->SubscribeToEvent( E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleAllSliderEvent ));
+}
+
+void PeriodicApp::HandleAllSliderEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+
+    UIWidget *demo = widget->FindWidget("sliderdemo");  // find our specific widget
+    if ( widget != demo ) return; // if its not ours, bail
+
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CHANGED )
+    {
+        if (widget->GetId() ==  "sliderdemo" )
+        {
+            AppLog( "UISlider event : " + widget->GetId() + " changed value to " + String (widget->GetValue()));
+        }
+    }
+}
+
+void PeriodicApp::HandleUisliderEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uislidercode" )
+        {
+            AppLog( "UISlider support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uislider.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uisliderlayout" )
+        {
+            AppLog( "UISlider support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uislider.ui.txt", widget->GetParent() );
+        }
+    }
+}
+

+ 125 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uitabcontainer.cpp

@@ -0,0 +1,125 @@
+// UITabContainer application source code
+#include <Atomic/Resource/ResourceCache.h>
+#include <Atomic/IO/FileSystem.h>
+#include <Atomic/UI/UITabContainer.h>
+#include <Atomic/UI/UIWindow.h>
+#include <Atomic/UI/UILayout.h>
+#include <Atomic/UI/UIEditField.h>
+#include <Atomic/UI/UIButton.h>
+#include <Atomic/UI/UIFontDescription.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uitabcontainer( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUitabcontainerEvent ));
+
+    UITabContainer *tcx = static_cast<UITabContainer*>(layout->GetWidget("UITabContainerDemo"));
+    if ( tcx)
+    {
+        tcx->SetCurrentPage(0);   // fix or it looks like crap
+        tcx->SubscribeToEvent( E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleAllTabcontainerEvent ));
+        // warning - this will route for all UITabContainer instances events into this event handler.
+    }
+}
+
+void PeriodicApp::HandleAllTabcontainerEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    String refid = eventData[P_REFID].GetString();
+    if ( widget == NULL ) return;
+
+    UIWidget *demo = widget->FindWidget("UITabContainerDemo");  // find our specific widget
+    if ( widget != demo ) return; // if its not ours, bail
+
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_TAB_CHANGED )
+    {
+        if ( widget->GetId() ==  "UITabContainerDemo" )
+        {
+            UITabContainer *tcx = static_cast<UITabContainer*>(widget);  // check the focus & stuff, or it gets a little spammy
+            if ( tcx && ( tcx->GetState(UI_WIDGET_STATE_FOCUSED) == true ) )
+                AppLog( "UITabContainer event : " + widget->GetId() + " UI_EVENT_TYPE_TAB_CHANGED to " + String( tcx->GetCurrentPage() )
+                        + " id: " + tcx->GetCurrentPageWidget()->GetId() );
+        }
+    }
+}
+
+
+void PeriodicApp::HandleUitabcontainerEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    String refid = eventData[P_REFID].GetString();
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uitabcontainercode" )
+        {
+            AppLog( "UITabContainer support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uitabcontainer.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uitabcontainerlayout" )
+        {
+            AppLog( "UITabContainer support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uitabcontainer.ui.txt", widget->GetParent() );
+        }
+
+
+        if (widget->GetId() ==  "uitabcontainerremove" )
+        {
+            AppLog( "UITabContainer action : " + widget->GetId() + " was pressed ");
+            UITabContainer *tcx = static_cast<UITabContainer*>(widget->FindWidget("UITabContainerDemo"));
+            int current = tcx->GetCurrentPage();
+            tcx->DeletePage(current);
+        }
+        if (widget->GetId() ==  "uitabcontaineradd" )
+        {
+            AppLog( "UITabContainer action : " + widget->GetId() + " was pressed ");
+            UITabContainer *tcx = static_cast<UITabContainer*>(widget->FindWidget("UITabContainerDemo"));
+            tcx->AddTabPageFile("New File", "Scenes/sheet.ui.txt" );
+        }
+        if (widget->GetId() ==  "uitabcontainermake" )
+        {
+            AppLog( "UITabContainer action : " + widget->GetId() + " was pressed ");
+            ResourceCache* cache = GetSubsystem<ResourceCache>();
+            UITabContainer *tcx = static_cast<UITabContainer*>(widget->FindWidget("UITabContainerDemo"));
+            UILayout *lo = new UILayout(context_);
+            lo->SetLayoutConfig ( "YAGAC" );  // YACAC!
+            UIEditField *myeditfield = new UIEditField(context_);
+            myeditfield->SetGravity( UI_GRAVITY_ALL);
+            myeditfield->SetMultiline(true);
+            SharedPtr<File> filex = cache->GetFile("Components/code_uitabcontainer.cpp");
+            String textx = filex->ReadText();
+            filex->Close();
+            myeditfield->SetText(textx);
+            UIFontDescription *myfont = new UIFontDescription(context_); // 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" )
+        {
+            AppLog( "UITabContainer action : " + widget->GetId() + " was pressed ");
+            UITabContainer *tcx = static_cast<UITabContainer*>(widget->FindWidget("UITabContainerDemo"));
+            int current = tcx->GetCurrentPage();
+            tcx->UndockPage(current);
+        }
+        if (widget->GetId() ==  "uitabcontainerredock" )
+        {
+            AppLog( "UITabContainer action : " + widget->GetId() + " was pressed ");
+            UITabContainer *tcx = static_cast<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" ) )
+                                AppLog( "UITabContainer action : no more windows to dock.");
+        }
+    }
+}
+

+ 31 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uitextfield.cpp

@@ -0,0 +1,31 @@
+// UITextField application source code
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uitextfield( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUitextfieldEvent ));
+}
+
+void PeriodicApp::HandleUitextfieldEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uitextfieldcode" )
+        {
+            AppLog( " support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uitextfield.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uitextfieldlayout" )
+        {
+            AppLog( " support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uitextfield.ui.txt", widget->GetParent() );
+        }
+    }
+}
+

+ 103 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uitexturewidget.cpp

@@ -0,0 +1,103 @@
+// UITextureWidget application source code
+#include <Atomic/UI/UITextureWidget.h>
+#include <Atomic/Resource/ResourceCache.h>
+#include <Atomic/UI/UILayout.h>
+#include <Atomic/UI/UIButton.h>
+#include <Atomic/Graphics/Texture2D.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uitexturewidget( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUitexturewidgetEvent ));
+
+    ResourceCache* cache = GetSubsystem<ResourceCache>();
+    UITextureWidget* mytexturewidget = new UITextureWidget(context_);
+    mytexturewidget->SetId( "UITextureWidgetDemo");
+    if ( mytexturewidget )
+    {
+        Texture2D *mytex = new Texture2D(context_);
+        if ( mytex )
+        {
+            mytex = cache->GetResource<Texture2D>("Textures/planet.jpg");
+            mytexturewidget->SetTexture(mytex);
+        }
+    }
+    SubscribeToEvent( mytexturewidget, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUitexturewidgetEvent ));
+    UILayoutParams *lpx = new UILayoutParams(context_);
+    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(context_);
+    mysvc->AddChildBefore(lo1, lower);
+
+    UIButton *b1 = new UIButton(context_);
+    b1->SetId( "uitexturewidgetch1");
+    b1->SetText("Change texture to new build");
+    lo1->AddChild(b1);
+    SubscribeToEvent( b1, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUitexturewidgetEvent ));
+    UIButton *b2 = new UIButton(context_);
+    b2->SetId( "uitexturewidgetch2");
+    b2->SetText("Change texture to colorwheel");
+    lo1->AddChild(b2);
+    SubscribeToEvent( b2, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUitexturewidgetEvent ));
+    UIButton *b3 = new UIButton(context_);
+    b3->SetId( "uitexturewidgetch3");
+    b3->SetText("Change texture to planet");
+    lo1->AddChild(b3);
+    SubscribeToEvent( b3, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUitexturewidgetEvent ));
+
+}
+
+void PeriodicApp::HandleUitexturewidgetEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uitexturewidgetcode" )
+        {
+            AppLog( "UITextureWidget support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uitexturewidget.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uitexturewidgetlayout" )
+        {
+            AppLog( "UITextureWidget support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uitexturewidget.ui.txt", widget->GetParent() );
+        }
+
+        if (widget->GetId() ==  "uitexturewidgetch1" )
+        {
+            AppLog( "UITextureWidget support : " + widget->GetId() + " was pressed ");
+            ResourceCache* cache = GetSubsystem<ResourceCache>();
+            UITextureWidget *tw = static_cast<UITextureWidget*>(widget->FindWidget("UITextureWidgetDemo"));
+            tw->SetTexture( cache->GetResource<Texture2D>("Textures/newbuilddetected_header.jpg") );
+        }
+        if (widget->GetId() ==  "uitexturewidgetch2" )
+        {
+            AppLog( "UITextureWidget support : " + widget->GetId() + " was pressed ");
+            ResourceCache* cache = GetSubsystem<ResourceCache>();
+            UITextureWidget *tw = static_cast<UITextureWidget*>(widget->FindWidget("UITextureWidgetDemo"));
+            tw->SetTexture( cache->GetResource<Texture2D>("Textures/HSV21.png") );
+        }
+        if (widget->GetId() ==  "uitexturewidgetch3" )
+        {
+            AppLog( "UITextureWidget support : " + widget->GetId() + " was pressed ");
+            ResourceCache* cache = GetSubsystem<ResourceCache>();
+            UITextureWidget *tw = static_cast<UITextureWidget*>(widget->FindWidget("UITextureWidgetDemo"));
+            tw->SetTexture( cache->GetResource<Texture2D>("Textures/planet.jpg") );
+        }
+    }
+}
+

+ 31 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uiwidget.cpp

@@ -0,0 +1,31 @@
+// UIWidget application source code
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uiwidget( UIWidget *layout )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiwidgetEvent ));
+}
+
+void PeriodicApp::HandleUiwidgetEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uiwidgetcode" )
+        {
+            AppLog( "UIWidget support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uiwidget.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uiwidgetlayout" )
+        {
+            AppLog( "UIWidget support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uiwidget.ui.txt", widget->GetParent() );
+        }
+    }
+}
+

+ 76 - 0
UIPeriodicTable/CPlusPlus/Resources/Components/code_uiwindow.cpp

@@ -0,0 +1,76 @@
+// UIWindow application source code
+#include <Atomic/UI/UIWindow.h>
+#include <Atomic/UI/UIView.h>
+#include "PeriodicApp.h"
+
+void PeriodicApp::setup_uiwindow( UIWidget *layout, UIView *uiview )
+{
+    PODVector<UIWidget*> dest;
+    layout->SearchWidgetClass( "TBButton", dest );
+    for (unsigned ii = 0; ii < dest.Size(); ii++)
+        SubscribeToEvent(dest[ii], E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiwindowEvent ));
+}
+
+void PeriodicApp::HandleUiwindowEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+    if ( widget == NULL ) return;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        if (widget->GetId() == "uiwindowcode" )
+        {
+            AppLog( "UIWindow support : " + widget->GetId() + " was pressed " );
+            ViewCode ( "Components/code_uiwindow.cpp", widget->GetParent() );
+        }
+        if (widget->GetId() ==  "uiwindowlayout" )
+        {
+            AppLog( "UIWindow support : " + widget->GetId() + " was pressed ");
+            ViewCode ( "Scenes/layout_uiwindow.ui.txt", widget->GetParent() );
+        }
+
+        if (widget->GetId() == "windowdemo" )
+        {
+            AppLog( "UIWindow action : " + widget->GetId() + " was pressed " );
+            UIView *someview = widget->GetView();
+            UIWindow *window = new UIWindow(context_);
+            window->SetSettings ( 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");
+            SubscribeToEvent(login, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiwindowEvent ));
+            UIWidget *cancel = window->GetWidget("cancel");
+            SubscribeToEvent(cancel, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleUiwindowEvent ));
+        }
+        if (widget->GetId() == "login" )
+        {
+            AppLog( "UIWindow action : " + widget->GetId() + " was pressed " );
+            UIWindow *mywindow = static_cast<UIWindow *>(FindTheWindowParent(widget));
+            if (mywindow)
+                mywindow->Close();
+        }
+        if (widget->GetId() == "cancel" )
+        {
+            AppLog( "UIWindow action : " + widget->GetId() + " was pressed " );
+            UIWindow *mywindow = static_cast<UIWindow *>(FindTheWindowParent(widget));
+            if (mywindow)
+                mywindow->Close();
+        }
+        if (widget->GetId() == "windowdemo1" )
+        {
+            AppLog( "UIWindow action : " + widget->GetId() + " was pressed " );
+            UIView *someview = widget->GetView();
+            UIWindow *window = new UIWindow(context_);
+            window->SetSettings ( 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/CPlusPlus/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/CPlusPlus/Resources/Models/Sphere.mdl


+ 14 - 0
UIPeriodicTable/CPlusPlus/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>

+ 25 - 0
UIPeriodicTable/CPlusPlus/Resources/Scenes/layout_uibargraph.ui.txt

@@ -0,0 +1,25 @@
+# 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
+
+
+

+ 19 - 0
UIPeriodicTable/CPlusPlus/Resources/Scenes/layout_uibutton.ui.txt

@@ -0,0 +1,19 @@
+# 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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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
+

+ 19 - 0
UIPeriodicTable/CPlusPlus/Resources/Scenes/layout_uifontdescription.ui.txt

@@ -0,0 +1,19 @@
+# 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

+ 13 - 0
UIPeriodicTable/CPlusPlus/Resources/Scenes/layout_uiimagewidget.ui.txt

@@ -0,0 +1,13 @@
+# 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

+ 15 - 0
UIPeriodicTable/CPlusPlus/Resources/Scenes/layout_uiinlineselect.ui.txt

@@ -0,0 +1,15 @@
+# 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

+ 6 - 0
UIPeriodicTable/CPlusPlus/Resources/Scenes/layout_uilayout.ui.txt

@@ -0,0 +1,6 @@
+# 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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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
+

+ 78 - 0
UIPeriodicTable/CPlusPlus/Resources/Scenes/sceneview.scene

@@ -0,0 +1,78 @@
+<?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>
+	</node>
+</scene>

+ 108 - 0
UIPeriodicTable/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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/CPlusPlus/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"
+

+ 326 - 0
UIPeriodicTable/CPlusPlus/Resources/Scripts/PeriodicApp.cpp

@@ -0,0 +1,326 @@
+//
+// 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.
+//
+
+#include <Atomic/Engine/Application.h>
+#include <Atomic/Core/CoreEvents.h>
+#include <Atomic/Graphics/Camera.h>
+#include <Atomic/Engine/Engine.h>
+#include <Atomic/IO/FileSystem.h>
+#include <Atomic/Graphics/Graphics.h>
+#include <Atomic/Input/Input.h>
+#include <Atomic/Input/InputEvents.h>
+#include <Atomic/Graphics/Renderer.h>
+#include <Atomic/Resource/ResourceCache.h>
+#include <Atomic/Scene/Scene.h>
+#include <Atomic/Scene/SceneEvents.h>
+#include <Atomic/Graphics/Texture2D.h>
+#include <Atomic/Graphics/Zone.h>
+#include <Atomic/Graphics/Material.h>
+#include <Atomic/Graphics/Model.h>
+#include <Atomic/Graphics/Octree.h>
+#include <Atomic/Graphics/Renderer.h>
+#include <Atomic/Graphics/StaticModel.h>
+#include <Atomic/Core/Timer.h>
+#include <Atomic/UI/UI.h>
+#include <Atomic/UI/UIEvents.h>
+#include <Atomic/UI/UIView.h>
+#include <Atomic/UI/UILayout.h>
+#include <Atomic/UI/UICheckBox.h>
+#include <Atomic/UI/UITextField.h>
+#include <Atomic/UI/UIButton.h>
+#include <Atomic/UI/UIEditField.h>
+#include <Atomic/UI/UITabContainer.h>
+#include <Atomic/UI/UIWindow.h>
+#include <Atomic/UI/UIFinderWindow.h>
+#include <Atomic/UI/UIPromptWindow.h>
+#include <Atomic/Resource/XMLFile.h>
+#include <Atomic/IO/Log.h>
+
+#include "PeriodicApp.h"
+#include "Spinner.h"
+
+ATOMIC_DEFINE_APPLICATION_MAIN(PeriodicApp)
+
+PeriodicApp::PeriodicApp(Context* context) :
+    Application(context)
+{
+    // Register an object factory for the Rotator component
+    context->RegisterFactory<Rotator>();
+}
+
+
+void PeriodicApp::Setup()
+{
+    engineParameters_["WindowWidth"] = 1280; // Modify engine startup parameters
+    engineParameters_["WindowHeight"] = 720;
+    engineParameters_["FullScreen"]  = false;
+    engineParameters_["Headless"]    = false;
+    engineParameters_["Sound"]       = false;
+    engineParameters_["LogName"]     = GetSubsystem<FileSystem>()->GetAppPreferencesDir("atomic", "logs") + GetTypeName() + ".log";
+    engineParameters_["ResourcePaths"] = "Data;PlayerData;CoreData";
+
+    // Construct a search path to find the resource prefix with two entries:
+    // The first entry is an empty path which will be substituted with program/bin directory -- this entry is for binary when it is still in build tree
+    // The second and third entries are possible relative paths from the installed program/bin directory to the asset directory -- these entries are for binary when it is in the Atomic SDK installation location
+    if (!engineParameters_.Contains(EP_RESOURCE_PREFIX_PATHS))
+    {
+        // TODO: This is dependent on a source build
+        String resourcePrefix = ToString("%s/Resources;%s/Submodules/AtomicExamples/FeatureExamples/CPlusPlus", ATOMIC_ROOT_SOURCE_DIR, ATOMIC_ROOT_SOURCE_DIR);
+        engineParameters_[EP_RESOURCE_PREFIX_PATHS] = resourcePrefix;
+    }
+}
+
+void PeriodicApp::Start()
+{
+    UI* ui = GetSubsystem<UI>();
+    ui->Initialize("DefaultUI/language/lng_en.tb.txt");
+    ui->LoadDefaultPlayerSkin();
+    uiview_ = new UIView(context_); // create new UIView
+
+    SetWindowTitleAndIcon(); // Set custom window Title & Icon
+
+    SubscribeToEvent(E_KEYDOWN, ATOMIC_HANDLER(PeriodicApp, HandleKeyDown));  // to handle the keys
+
+    DoSomething(); // your game code goes here
+}
+
+void PeriodicApp::Stop()
+{
+    // possibly clean up allocated memory
+}
+
+void PeriodicApp::HandleKeyDown(StringHash eventType, VariantMap& eventData)
+{
+    using namespace KeyDown;
+
+    int key = eventData[P_KEY].GetInt();
+    if(key == KEY_ESCAPE)
+    {
+        engine_->Exit();
+    }
+    else if (key == KEY_F1)    // Toggle console with F1
+    {
+        GetSubsystem<UI>()->ToggleConsole();
+    }
+    else if (key == KEY_F2)    // Toggle debug HUD with F2
+    {
+        GetSubsystem<UI>()->ToggleDebugHud();
+    }
+
+}
+
+void PeriodicApp::SetWindowTitleAndIcon()
+{
+    ResourceCache* cache = GetSubsystem<ResourceCache>();
+    Graphics* graphics = GetSubsystem<Graphics>();
+    graphics->SetWindowTitle("PeriodicApp");
+    Image* icon = cache->GetResource<Image>("Textures/AtomicLogo32.png");
+    graphics->SetWindowIcon(icon);
+}
+
+//
+// This is the entry point for your 3d game
+//
+void PeriodicApp::DoSomething()
+{
+    ResourceCache* cache = GetSubsystem<ResourceCache>();
+    scene_ = new Scene(context_);
+    scene_->CreateComponent<Octree>();
+    Node* lightNode = scene_->CreateChild("DirectionalLight");
+    lightNode->SetDirection(Vector3(0.6f, -1.0f, 0.8f));
+    Light* light = lightNode->CreateComponent<Light>();
+    light->SetLightType(LIGHT_DIRECTIONAL);
+    Node *cameraNode_ = scene_->CreateChild("Camera");
+    cameraNode_->CreateComponent<Camera>();
+    cameraNode_->SetPosition(Vector3(-4.7f, 3.6f, -16.2f));
+    cameraNode_->SetRotation(Quaternion(11.4f, 15.8f, 0.0f));
+    Renderer* renderer = GetSubsystem<Renderer>();
+    SharedPtr<Viewport> viewport(new Viewport(context_, scene_, cameraNode_->GetComponent<Camera>()));
+    renderer->SetViewport(0, viewport);
+
+    UI* ui = GetSubsystem<UI>();  // get the ui pointer
+    ui->AddFont("Textures/BrokenGlass.ttf", "BrokenGlass"); // add a gooder font
+ 
+    // set up some stuff for mobile, so we can use the same app code & layouts, when we can deploy on mobile
+    ui->LoadSkin("Textures/desktop.tb.txt"); // load in the app skin
+
+    UILayout* lo0 = new UILayout(context_);  // make the host widget for all visible ui
+    lo0->SetRect ( uiview_->GetRect ()); //size it to fill the screen area
+    lo0->SetLayoutConfig( "YAGAC" );  //all-in-one setting
+    lo0->SetSkinBg ("background_solid");  // make it look gooder
+    lo0->Load("Scenes/main_layout.ui.txt"); // load the main layout
+    uiview_->AddChild(lo0); // And make it show up.
+
+    UITabContainer *maintb = (UITabContainer *)lo0->GetWidget("maintabs");
+    UITabContainer *acttb = (UITabContainer *)lo0->GetWidget("primarytabs");
+    UITabContainer *semitb = (UITabContainer *)lo0->GetWidget("moretabs");
+    UITabContainer *viewtb = (UITabContainer *)lo0->GetWidget("supporttabs");
+    UITabContainer *supporttb = (UITabContainer *)lo0->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!
+    
+    uilog_ = (UITextField*)lo0->GetWidget("LogText");
+    UIView *someview = lo0->GetView();
+    UIWidget *ea = lo0->GetWidget("exitapp");
+    SubscribeToEvent(ea, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleExitEvent));
+ 
+    setup_table( lo0 );
+    setup_uiwidget(  lo0->GetWidget("pageuiwidget") );
+    setup_uibargraph(  lo0->GetWidget("pageuibargraph") );
+    setup_uibutton(  lo0->GetWidget("pageuibutton") );
+    setup_uicheckbox( lo0->GetWidget("pageuicheckbox"));
+    setup_uiclicklabel(  lo0->GetWidget("pageuiclicklabel") );
+    setup_uicolorwheel(  lo0->GetWidget("pageuicolorwheel") );
+    setup_uicolorwidget( lo0->GetWidget("pageuicolorwidget") );
+    setup_uicontainer( lo0->GetWidget("pageuicontainer"));
+    setup_uieditfield(  lo0->GetWidget("pageuieditfield") );
+    setup_uifinderwindow( lo0->GetWidget("pageuifinderwindow"), someview );
+    setup_uifontdescription(  lo0->GetWidget("pageuifontdescription") );
+    setup_uiimagewidget(  lo0->GetWidget("pageuiimagewidget") );
+    setup_uiinlineselect(  lo0->GetWidget("pageuiinlineselect") );
+    setup_uilayoutparams(  lo0->GetWidget("pageuilayoutparams") );
+    setup_uilayout(  lo0->GetWidget("pageuilayout"), someview );
+    setup_uimenuitem( lo0->GetWidget("pageuimenuitem") );
+    setup_uimenuwindow(  lo0->GetWidget("pageuimenuwindow") );
+    setup_uimessagewindow(  lo0->GetWidget("pageuimessagewindow") );
+    setup_uipromptwindow(  lo0->GetWidget("pageuipromptwindow"), someview );
+    setup_uipulldownmenu(  lo0->GetWidget("pageuipulldownmenu") );
+    setup_uiradiobutton(  lo0->GetWidget("pageuiradiobutton") );
+    setup_uisceneview(  lo0->GetWidget("pageuisceneview") );
+    setup_uiscrollbar(  lo0->GetWidget("pageuiscrollbar") );
+    setup_uiscrollcontainer(  lo0->GetWidget("pageuiscrollcontainer") );
+    setup_uisection(  lo0->GetWidget("pageuisection") );
+    setup_uiselectdropdown(  lo0->GetWidget("pageuiselectdropdown") );
+    setup_uiselectitem(  lo0->GetWidget("pageuiselectitem") );
+    setup_uiselectlist(  lo0->GetWidget("pageuiselectlist") );
+    setup_uiseparator(  lo0->GetWidget("pageuiseparator") );
+    setup_uiskinimage(  lo0->GetWidget("pageuiskinimage") );
+    setup_uislider(  lo0->GetWidget("pageuislider") );
+    setup_uitabcontainer(  lo0->GetWidget("pageuitabcontainer") );
+    setup_uitextfield(  lo0->GetWidget("pageuitextfield") );
+    setup_uitexturewidget(  lo0->GetWidget("pageuitexturewidget") );
+    setup_uiwindow(  lo0->GetWidget("pageuiwindow"), someview );
+    AppLog ( "Ready" );
+}
+
+void PeriodicApp::AppLog( const String &logtext )
+{
+    if (uilog_ )
+        uilog_->SetText ( logtext );
+}
+
+void PeriodicApp::ViewCode ( String filename, UIWidget *layoutParent )
+{
+    ResourceCache* cache = GetSubsystem<ResourceCache>();
+    UIView *someview = layoutParent->GetView();
+    UIWindow *window = new UIWindow(context_);
+    window->SetSettings ( UI_WINDOW_SETTINGS_DEFAULT );
+    window->SetText( "Code Viewer");
+    window->Load("Scenes/view_code.ui.txt");
+    SharedPtr<File> filex = cache->GetFile(filename);
+    String textx = filex->ReadText();
+    filex->Close();
+    UIWidget *coder = window->GetWidget("viewCodeText");
+    coder->SetText(textx);
+    window->ResizeToFitContent();
+    someview->AddChild(window);
+    window->Center();
+    UIWidget *someok = window->GetWidget("viewCodeOK");
+    SubscribeToEvent(someok, E_WIDGETEVENT, ATOMIC_HANDLER(PeriodicApp, HandleViewCodeEvent ));
+}
+
+void PeriodicApp::HandleViewCodeEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+        if (widget)
+        {
+            UIWindow *mywindow = static_cast<UIWindow *>(FindTheWindowParent(widget)); 
+            if (mywindow)     
+                mywindow->Close();
+        }
+    }
+}
+
+void PeriodicApp::HandleExitEvent(StringHash eventType, VariantMap& eventData)
+{
+    using namespace WidgetEvent;
+
+    if (eventData[P_TYPE] == UI_EVENT_TYPE_CLICK)
+    {
+        UIWidget* widget = static_cast<UIWidget*>(eventData[P_TARGET].GetPtr());
+        if (widget)
+        {
+            engine_->Exit();
+        }
+    }
+}
+
+String PeriodicApp::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";
+}
+
+UIWidget *PeriodicApp::FindTheWindowParent( UIWidget* fromThisWidget )
+{
+    tb::TBWidget *widgetx = fromThisWidget->GetInternalWidget();
+    UI* ui = GetSubsystem<UI>();
+ 
+    if (widgetx == NULL)
+        return 0;
+
+    if ( widgetx->GetClassName() == "TBWindow" || widgetx->GetClassName() == "TBDockWindow" ) 
+        return ui->WrapWidget(widgetx);
+    
+    tb::TBWidget* tbw = widgetx->GetParent();
+    while(tbw)
+    {
+        if ( tbw->GetClassName() == "TBWindow" || tbw->GetClassName() == "TBDockWindow" ) 
+            return ui->WrapWidget(tbw);
+        tbw = tbw->GetParent();
+    }
+
+    return 0; 
+}

+ 161 - 0
UIPeriodicTable/CPlusPlus/Resources/Scripts/PeriodicApp.h

@@ -0,0 +1,161 @@
+//
+// Copyright (c) 2008-2016 the Urho3D project.
+// 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.
+//
+
+#pragma once
+
+#include <Atomic/Engine/Application.h>
+#include <Atomic/Input/Input.h>
+#include <Atomic/UI/UIEvents.h>
+#include <Atomic/UI/UIWidget.h>
+#include <Atomic/IO/Log.h>
+
+namespace Atomic
+{
+class Node;
+class Scene;
+class UIView;
+class UITextField;
+}
+
+using namespace Atomic;
+
+class PeriodicApp : public Application
+{
+    ATOMIC_OBJECT(PeriodicApp, Application)
+
+public:
+    /// Constructor
+    PeriodicApp(Context* context);
+    /// Setup before engine initialization. Modifies the engine parameters.
+    virtual void Setup();
+    /// Setup after engine initialization. Creates the logo, console & debug HUD.
+    virtual void Start();
+    /// Cleanup after the main loop. Called by Application.
+    virtual void Stop();
+
+    void setup_table( UIWidget *layout);
+    void setup_uibargraph( UIWidget *layout);
+    void setup_uibutton( UIWidget *layout);
+    void setup_uicheckbox( UIWidget *layout);
+    void setup_uiclicklabel( UIWidget *layout);
+    void setup_uicolorwheel( UIWidget *layout);
+    void setup_uicolorwidget( UIWidget *layout);
+    void setup_uicontainer( UIWidget *layout);
+    void setup_uieditfield( UIWidget *layout);
+    void setup_uifinderwindow( UIWidget *layout, UIView *someview);
+    void setup_uifontdescription( UIWidget *layout);
+    void setup_uiimagewidget( UIWidget *layout);
+    void setup_uiinlineselect( UIWidget *layout);
+    void setup_uilayoutparams( UIWidget *layout);
+    void setup_uilayout( UIWidget *layout, UIView *someview);
+    void setup_uimenuitem( UIWidget *layout);
+    void setup_uimenuwindow( UIWidget *layout);
+    void setup_uimessagewindow( UIWidget *layout);
+    void setup_uipromptwindow( UIWidget *layout, UIView *someview);
+    void setup_uipulldownmenu( UIWidget *layout);
+    void setup_uiradiobutton( UIWidget *layout);
+    void setup_uisceneview( UIWidget *layout);
+    void setup_uiscrollbar( UIWidget *layout);
+    void setup_uiscrollcontainer( UIWidget *layout);
+    void setup_uisection( UIWidget *layout);
+    void setup_uiselectdropdown( UIWidget *layout);
+    void setup_uiselectitem( UIWidget *layout);
+    void setup_uiselectlist( UIWidget *layout);
+    void setup_uiseparator( UIWidget *layout);
+    void setup_uiskinimage( UIWidget *layout);
+    void setup_uislider( UIWidget *layout);
+    void setup_uitabcontainer( UIWidget *layout);
+    void setup_uitextfield( UIWidget *layout);
+    void setup_uitexturewidget( UIWidget *layout);
+    void setup_uiwidget( UIWidget *layout);
+    void setup_uiwindow( UIWidget *layout, UIView *someview);
+
+protected:
+
+    void HandleExitEvent(StringHash eventType, VariantMap& eventData);  // handle exit (atomic logo) button.
+
+    void HandleTableEvent(StringHash eventType, VariantMap& eventData);  // handle table clicks
+    void HandleUibargraphEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUibuttonEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUicheckboxEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUiclicklabelEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUicolorwheelEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUicolorwidgetEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUicontainerEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUieditfieldEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUifinderwindowEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUifontdescriptionEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUiimagewidgetEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUiinlineselectEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUilayoutparamsEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUilayoutEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUimenuitemEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUimenuwindowEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUimessagewindowEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUipromptwindowEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUipulldownmenuEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUiradiobuttonEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUisceneviewEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUiscrollbarEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUiscrollcontainerEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUisectionEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUiselectdropdownEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUiselectitemEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUiselectlistEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUiseparatorEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUiskinimageEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUisliderEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUitabcontainerEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUitextfieldEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUitexturewidgetEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUiwidgetEvent(StringHash eventType, VariantMap& eventData);
+    void HandleUiwindowEvent(StringHash eventType, VariantMap& eventData);
+
+    void HandleFinderCompleteEvent(StringHash eventType, VariantMap& eventData);
+    void HandlePromptCompleteEvent(StringHash eventType, VariantMap& eventData);
+    void HandleMessageCompleteEvent(StringHash eventType, VariantMap& eventData);
+
+    // for widget class event handlers
+    void HandleAllScrollcontainerEvent(StringHash eventType, VariantMap& eventData);
+    void HandleAllSelectdropdownEvent(StringHash eventType, VariantMap& eventData);
+    void HandleAllSliderEvent(StringHash eventType, VariantMap& eventData);
+    void HandleAllTabcontainerEvent(StringHash eventType, VariantMap& eventData);
+
+    void AppLog ( const String &logtext );
+    void ViewCode ( String filename, UIWidget *layoutParent );
+    void HandleViewCodeEvent(StringHash eventType, VariantMap& eventData);
+    String EventReport ( int eventNumber );
+    UIWidget *FindTheWindowParent( UIWidget* fromThisWidget ); // for use with close buttons in windows
+     
+private:
+
+    void HandleKeyDown(StringHash eventType, VariantMap& eventData); // basic service to collect keys
+    void SetWindowTitleAndIcon(); // basic service to fix up window
+
+    void DoSomething();  // This is your game, any questions?
+    WeakPtr<Scene> scene_;  // scene support for your game
+    WeakPtr<UIView> uiview_; // widget support for your game
+    WeakPtr<UITextField> uilog_; // widget support for your game
+
+};
+

+ 35 - 0
UIPeriodicTable/CPlusPlus/Resources/Scripts/Spinner.h

@@ -0,0 +1,35 @@
+#pragma once
+
+#include <Atomic/Engine/Application.h>
+
+namespace Atomic
+{
+class Node;
+class Scene;
+class UIView;
+}
+
+using namespace Atomic;
+
+//
+// for eye candy-ization only 
+//
+#include <Atomic/Scene/LogicComponent.h>
+
+/// Custom logic component for rotating a scene node. From Urho3D samples
+class Rotator : public LogicComponent
+{
+    ATOMIC_OBJECT(Rotator, LogicComponent);
+
+public:
+    Rotator(Context* context); /// Construct.
+    void SetRotationSpeed(const Vector3& speedxyz); /// Set rotation speed about the Euler axes. Will be scaled with scene update time step.
+    virtual void Update(float timeStep);  /// Handle scene update. Called by LogicComponent base class.
+    const Vector3& GetRotationSpeed() const
+    {
+        return rotationSpeed_;    /// Return rotation speed.
+    }
+private:
+    Vector3 rotationSpeed_;  /// Rotation speed.
+};
+

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


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


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


+ 22 - 0
UIPeriodicTable/CPlusPlus/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/CPlusPlus/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/CPlusPlus/Resources/Textures/arrow_left.png


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


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


Some files were not shown because too many files changed in this diff