Merge remote-tracking branch 'origin/tizen' into new_text 46/37546/10
authorPaul Wisbey <p.wisbey@samsung.com>
Mon, 30 Mar 2015 18:33:17 +0000 (19:33 +0100)
committerPaul Wisbey <p.wisbey@samsung.com>
Tue, 31 Mar 2015 15:03:50 +0000 (16:03 +0100)
Conflicts:
demo/dali-demo.cpp
demo/dali-table-view.cpp
examples/builder/examples.cpp
examples/buttons/buttons-example.cpp
examples/item-view/item-view-example.cpp
examples/path-animation/path-animation.cpp
examples/text-view/text-view-example.cpp
shared/view.h

Change-Id: I152b06854b349f0430172227f1d79ee16855fbc0

22 files changed:
1  2 
com.samsung.dali-demo.xml
demo/dali-demo.cpp
demo/dali-table-view.cpp
examples/builder/examples.cpp
examples/buttons/buttons-example.cpp
examples/cluster/cluster-example.cpp
examples/cube-transition-effect/cube-transition-effect-example.cpp
examples/hello-world/hello-world-example.cpp
examples/image-scaling-irregular-grid/image-scaling-irregular-grid-example.cpp
examples/item-view/item-view-example.cpp
examples/logging/logging-example.cpp
examples/path-animation/path-animation.cpp
examples/scripting/launcher.cpp
examples/scroll-view/scroll-view-example.cpp
examples/shadow-bone-lighting/shadow-bone-lighting-example.cpp
examples/size-negotiation/size-negotiation-example.cpp
examples/text-field/text-field-example.cpp
examples/text-label-emojis/text-label-emojis.cpp
examples/text-label-multi-language/text-label-multi-language-example.cpp
examples/text-label/text-label-example.cpp
packaging/com.samsung.dali-demo.spec
shared/view.h

                <label>Image Scaling Modes</label>
        </ui-application>
        <ui-application appid="buttons.example" exec="/usr/apps/com.samsung.dali-demo/bin/buttons.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
-               <label>Radio Buttons</label>
+               <label>Buttons</label>
        </ui-application>
 -      <ui-application appid="text-view.example" exec="/usr/apps/com.samsung.dali-demo/bin/text-view.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
 -              <label>Text View</label>
 +      <ui-application appid="text-label.example" exec="/usr/apps/com.samsung.dali-demo/bin/text-label.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
 +              <label>Text Label</label>
 +      </ui-application>
 +      <ui-application appid="text-label-multi-language.example" exec="/usr/apps/com.samsung.dali-demo/bin/text-label-multi-language.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
 +              <label>Multi-language Text Label</label>
 +      </ui-application>
 +      <ui-application appid="text-label-emojis.example" exec="/usr/apps/com.samsung.dali-demo/bin/text-label-emojis.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
 +              <label>Emojis Text Label</label>
 +      </ui-application>
 +      <ui-application appid="text-field.example" exec="/usr/apps/com.samsung.dali-demo/bin/text-field.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
 +              <label>Text Label</label>
        </ui-application>
        <ui-application appid="logging.example" exec="/usr/apps/com.samsung.dali-demo/bin/logging.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
                <label>Logging</label>
@@@ -26,39 -21,33 +26,42 @@@ using namespace Dali
  
  int main(int argc, char **argv)
  {
 +  // Configure gettext for internalization
 +  bindtextdomain(DALI_DEMO_DOMAIN_LOCAL, DALI_LOCALE_DIR);
 +  textdomain(DALI_DEMO_DOMAIN_LOCAL);
 +  setlocale(LC_ALL, DALI_LANG);
 +
    Application app = Application::New(&argc, &argv);
  
 +  // Create the demo launcher
    DaliTableView demo(app);
  
 -  demo.AddExample(Example("bubble-effect.example", "Bubbles"));
 -  demo.AddExample(Example("blocks.example", "Blocks"));
 -  demo.AddExample(Example("cluster.example", "Cluster control"));
 -  demo.AddExample(Example("cube-transition-effect.example", "Cube Transition"));
 -  demo.AddExample(Example("dissolve-effect.example", "Dissolve Transition"));
 -  demo.AddExample(Example("item-view.example", "Item View"));
 -  demo.AddExample(Example("magnifier.example", "Magnifier"));
 -  demo.AddExample(Example("motion-blur.example", "Motion Blur"));
 -  demo.AddExample(Example("motion-stretch.example", "Motion Stretch"));
 -  demo.AddExample(Example("page-turn-view.example", "Page Turn View"));
 -  demo.AddExample(Example("radial-menu.example", "Radial Menu"));
 -  demo.AddExample(Example("refraction-effect.example", "Refraction"));
 -  demo.AddExample(Example("scroll-view.example", "Scroll View"));
 -  demo.AddExample(Example("shadow-bone-lighting.example", "Lights and shadows"));
 -//  demo.AddExample(Example("builder.example", "Script Based UI"));
 -  demo.AddExample(Example("image-scaling-irregular-grid.example", "Image Scaling Modes"));
 -  demo.AddExample(Example("text-view.example", "Text View"));
 -  demo.AddExample(Example("animated-shapes.example", "Animated Shapes"));
 -  demo.AddExample(Example("path-animation.example", "Path Animation"));
 +  demo.AddExample(Example("bubble-effect.example", DALI_DEMO_STR_TITLE_BUBBLES));
 +  demo.AddExample(Example("blocks.example", DALI_DEMO_STR_TITLE_BLOCKS));
 +  demo.AddExample(Example("cluster.example", DALI_DEMO_STR_TITLE_CLUSTER));
 +  demo.AddExample(Example("cube-transition-effect.example", DALI_DEMO_STR_TITLE_CUBE_TRANSITION));
 +  demo.AddExample(Example("dissolve-effect.example", DALI_DEMO_STR_TITLE_DISSOLVE_TRANSITION));
 +  demo.AddExample(Example("item-view.example", DALI_DEMO_STR_TITLE_ITEM_VIEW));
 +  demo.AddExample(Example("magnifier.example", DALI_DEMO_STR_TITLE_MAGNIFIER));
 +  demo.AddExample(Example("motion-blur.example", DALI_DEMO_STR_TITLE_MOTION_BLUR));
 +  demo.AddExample(Example("motion-stretch.example", DALI_DEMO_STR_TITLE_MOTION_STRETCH));
 +  demo.AddExample(Example("page-turn-view.example", DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW));
 +  demo.AddExample(Example("radial-menu.example", DALI_DEMO_STR_TITLE_RADIAL_MENU));
 +  demo.AddExample(Example("refraction-effect.example", DALI_DEMO_STR_TITLE_REFRACTION));
 +  demo.AddExample(Example("scroll-view.example", DALI_DEMO_STR_TITLE_SCROLL_VIEW));
 +  demo.AddExample(Example("shadow-bone-lighting.example", DALI_DEMO_STR_TITLE_LIGHTS_AND_SHADOWS));
-   demo.AddExample(Example("builder.example", DALI_DEMO_STR_TITLE_SCRIPT_BASED_UI));
++//  demo.AddExample(Example("builder.example", DALI_DEMO_STR_TITLE_SCRIPT_BASED_UI));
 +  demo.AddExample(Example("image-scaling-irregular-grid.example", DALI_DEMO_STR_TITLE_IMAGE_SCALING));
 +  demo.AddExample(Example("text-label.example", DALI_DEMO_STR_TITLE_TEXT_LABEL));
 +  demo.AddExample(Example("text-label-multi-language.example", DALI_DEMO_STR_TITLE_TEXT_LABEL_MULTI_LANGUAGE));
 +  demo.AddExample(Example("text-label-emojis.example", DALI_DEMO_STR_TITLE_EMOJI_TEXT));
 +  demo.AddExample(Example("animated-shapes.example", DALI_DEMO_STR_TITLE_ANIMATED_SHAPES));
 +  demo.AddExample(Example("path-animation.example", DALI_DEMO_STR_TITLE_PATH_ANIMATION));
+   demo.AddExample(Example("size-negotiation.example", "Size Negotiation"));
+   demo.SortAlphabetically( true );
  
 +  // Start the event loop
    app.MainLoop();
  
    return 0;
@@@ -242,18 -256,18 +240,17 @@@ void DaliTableView::Initialize( Applica
    Dali::Layer toolBarLayer = DemoHelper::CreateToolbar(toolbar,
                                                         DEFAULT_TOOLBAR_IMAGE_PATH,
                                                         DEFAULT_TOOLBAR_TEXT,
 -                                                       DemoHelper::DEFAULT_VIEW_STYLE,
 -                                                       DemoHelper::GetDefaultTextStyle());
 +                                                       DemoHelper::DEFAULT_VIEW_STYLE);
  
    mRootActor.AddChild( toolBarLayer, TableView::CellPosition( 0, 0 ) );
-   const float toolbarHeight = DemoHelper::DEFAULT_VIEW_STYLE.mToolBarHeight;
-   mRootActor.SetFixedHeight( 0, toolbarHeight );
+   mRootActor.SetFitHeight( 0 );
  
    // Add logo
-   mLogo = CreateLogo( LOGO_PATH );
+   Dali::ImageActor logo = CreateLogo( LOGO_PATH );
+   logo.SetName( "LOGO_IMAGE" );
+   logo.SetResizePolicy( USE_NATURAL_SIZE, ALL_DIMENSIONS );
    const float paddingHeight = ( ( 1.f-TABLE_RELATIVE_SIZE.y ) * stageSize.y );
    const float logoMargin = paddingHeight * LOGO_MARGIN_RATIO;
-   const float logoHeight = mLogo.GetImage().GetHeight() + logoMargin;
-   mRootActor.SetFixedHeight( 1, logoHeight );
  
    // Show version in a popup when log is tapped
    mLogoTapDetector = TapGestureDetector::New();
@@@ -494,25 -540,30 +523,24 @@@ Actor DaliTableView::CreateTile( const 
      image.Add( stencil );
    }
  
 -  TextView text = TextView::New( title );
 -  text.SetAnchorPoint( AnchorPoint::CENTER );
 -  text.SetParentOrigin( ParentOrigin::CENTER );
 -  text.SetWidthExceedPolicy( Toolkit::TextView::ShrinkToFit );
 -  text.SetMultilinePolicy( Toolkit::TextView::SplitByWord );
 -  text.SetLineJustification( Toolkit::TextView::Center );
 -  text.SetTextAlignment( Toolkit::Alignment::Type( Alignment::HorizontalCenter | Alignment::VerticalCenter ) );
 -  text.SetZ( 1 );
 -  // make the text 90% of tile
 -  text.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
 -  text.SetSizeMode( SIZE_RELATIVE_TO_PARENT );
 -  text.SetSizeModeFactor( Vector3( 0.9f, 0.9f, 0.0f ) );
 -  text.SetStyleToCurrentText( GetTableTextStyle() );
 -  text.SetSnapshotModeEnabled( false );
 -  content.Add( text );
 +  TextLabel label = TextLabel::New();
 +  label.SetAnchorPoint( AnchorPoint::TOP_LEFT );
-   label.SetSize( parentSize );
 +  label.SetProperty( Control::Property::STYLE_NAME, "launcherlabel" );
 +  label.SetProperty( TextLabel::Property::MULTI_LINE, true );
 +  label.SetProperty( TextLabel::Property::TEXT, title );
 +  label.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
 +  label.SetProperty( TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
 +  label.SetColor( TABLE_TEXT_STYLE_COLOR );
-   tile.Add( label );
++  content.Add( label );
  
    // Set the tile to be keyboard focusable
-   tile.SetKeyboardFocusable(true);
+   content.SetKeyboardFocusable(true);
  
    // connect to the touch events
-   tile.TouchedSignal().Connect( this, &DaliTableView::OnTilePressed );
-   tile.HoveredSignal().Connect( this, &DaliTableView::OnTileHovered );
+   content.TouchedSignal().Connect( this, &DaliTableView::OnTilePressed );
+   content.HoveredSignal().Connect( this, &DaliTableView::OnTileHovered );
  
-   return tile;
+   return content;
  }
  
  ImageActor DaliTableView::NewStencilImage()
Simple merge
@@@ -232,12 -235,17 +235,14 @@@ class ButtonsController: public Connect
      // First radio button
      {
        Toolkit::TableView tableView = Toolkit::TableView::New( 1, 2 );
-       tableView.SetSize( DP(260), DP(RADIO_LABEL_THUMBNAIL_SIZE) );
+       tableView.SetPreferredSize( Vector2( DP(260), 0.0f ) );
+       tableView.SetResizePolicy( USE_NATURAL_SIZE, HEIGHT );
  
 -      Toolkit::TextView textView = Toolkit::TextView::New( "Select enabled" );
 -      tableView.AddChild( textView, Toolkit::TableView::CellPosition( 0, 0 ) );
 -
        ImageActor imageActor = ImageActor::New( ResourceImage::New( ENABLED_IMAGE ) );
-       imageActor.SetSize( DP(RADIO_LABEL_THUMBNAIL_SIZE), DP(RADIO_LABEL_THUMBNAIL_SIZE) );
+       imageActor.SetPreferredSize( Vector2( DP(RADIO_LABEL_THUMBNAIL_SIZE), DP(RADIO_LABEL_THUMBNAIL_SIZE) ) );
+       imageActor.SetResizePolicy( FIXED, ALL_DIMENSIONS );
+       imageActor.SetPadding( Padding( DP(20.0f), 0.0f, 0.0f, 0.0f ) );
        tableView.AddChild( imageActor, Toolkit::TableView::CellPosition( 0, 1 ) );
-       tableView.SetFixedWidth( 1, DP(RADIO_LABEL_THUMBNAIL_SIZE) );
  
        Toolkit::RadioButton radioButton = Dali::Toolkit::RadioButton::New( tableView );
        radioButton.SetName( "radio-select-enable" );
Simple merge
@@@ -44,10 -46,16 +44,10 @@@ public
      // Get a handle to the stage
      Stage stage = Stage::GetCurrent();
  
-     TextLabel textLabel = TextLabel::New();
 -    // Display the actor on the stage
 -    stage.Add( textActor );
++    TextLabel textLabel = TextLabel::New( "Hello World" );
 +    textLabel.SetAnchorPoint( AnchorPoint::TOP_LEFT );
-     textLabel.SetProperty( TextLabel::Property::TEXT, "Hello World" );
++    textLabel.SetName( "hello-world-label" );
 +    stage.Add( textLabel );
  
      // Respond to a click anywhere on the stage
      stage.GetRootLayer().TouchedSignal().Connect( this, &HelloWorldController::OnTouch );
@@@ -990,10 -1009,53 +997,10 @@@ private
      slider.SetProperty( Slider::Property::VALUE, mDurationSeconds );
      slider.SetProperty( Slider::Property::VALUE_PRECISION, 2 );
      slider.SetProperty( Slider::Property::SHOW_POPUP, true );
+     slider.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
      slider.ValueChangedSignal().Connect( this, &ItemViewExample::SliderValueChange );
      tableView.AddChild( slider, TableView::CellPosition( 0, 0 ) );
-     tableView.SetRelativeHeight( 0, 0.5f );
  
 -    TextStyle defaultTextStyle;
 -    defaultTextStyle.SetFontName(DEFAULT_TEXT_STYLE_FONT_FAMILY);
 -    defaultTextStyle.SetFontStyle(DEFAULT_TEXT_STYLE_FONT_STYLE);
 -    defaultTextStyle.SetFontPointSize(DEFAULT_TEXT_STYLE_POINT_SIZE);
 -    defaultTextStyle.SetWeight(DEFAULT_TEXT_STYLE_WEIGHT);
 -    defaultTextStyle.SetTextColor(DEFAULT_TEXT_STYLE_COLOR);
 -
 -    TextView text = TextView::New( "Duration" );
 -    text.SetAnchorPoint( ParentOrigin::TOP_LEFT );
 -    text.SetParentOrigin( ParentOrigin::TOP_LEFT );
 -    text.SetTextAlignment( Dali::Toolkit::Alignment::HorizontalLeft );
 -    text.SetStyleToCurrentText( defaultTextStyle );
 -    text.SetResizePolicy( FILL_TO_PARENT, WIDTH );
 -    text.SetResizePolicy( FIXED, HEIGHT );
 -    text.SetPreferredSize( Vector2( 0.0f, LABEL_TEXT_SIZE_Y ) );
 -    text.SetZ( -0.9f );
 -    slider.Add( text );
 -
 -    Actor textContainer = Actor::New();
 -    textContainer.SetRelayoutEnabled( true );
 -    textContainer.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
 -    mAlphaFunctionText = TextView::New( ALPHA_FUNCTIONS_TEXT[mAlphaFuncIndex] );
 -    mAlphaFunctionText.SetAnchorPoint( ParentOrigin::CENTER );
 -    mAlphaFunctionText.SetParentOrigin( ParentOrigin::CENTER );
 -    mAlphaFunctionText.SetTextAlignment( Toolkit::Alignment::VerticalCenter );
 -    textContainer.Add( mAlphaFunctionText );
 -    tableView.AddChild( textContainer, TableView::CellPosition( 1, 0 ) );
 -
 -    mTapDetector = TapGestureDetector::New();
 -    mTapDetector.Attach(mAlphaFunctionText);
 -    mTapDetector.DetectedSignal().Connect( this, &ItemViewExample::ChangeAlphaFunctionOnTap );
 -
 -    text = TextView::New( "Alpha Function" );
 -    text.SetAnchorPoint( ParentOrigin::TOP_LEFT );
 -    text.SetParentOrigin( ParentOrigin::TOP_LEFT );
 -    text.SetTextAlignment( Dali::Toolkit::Alignment::HorizontalLeft );
 -    text.SetStyleToCurrentText( defaultTextStyle );
 -    text.SetResizePolicy( FILL_TO_PARENT, WIDTH );
 -    text.SetResizePolicy( FIXED, HEIGHT );
 -    text.SetPreferredSize( Vector2( 0.0f, LABEL_TEXT_SIZE_Y ) );
 -    textContainer.Add( text );
 -
 -    mMenu.MarkDirtyForRelayout();
      mMenu.Show();
      mMenuShown = true;
    }
Simple merge
@@@ -63,7 -64,32 +63,7 @@@ public
    */
    Actor CreateVectorComponentControl( const std::string& label, const Vector3& size, bool(PathController::*callback)(Slider,float) )
    {
-     return Actor(); // TODO
 -    Dali::TextActor textActor = TextActor::New(label);
 -    textActor.SetColor( Vector4(0.0f,0.0f,0.0f,1.0f));
 -    textActor.SetSize(size.y,size.y,0.0f);
 -
 -    Slider slider = Slider::New();
 -    slider.SetRelayoutEnabled( false );
 -    slider.SetAnchorPoint( AnchorPoint::CENTER_LEFT);
 -    slider.SetParentOrigin( ParentOrigin::CENTER_RIGHT);
 -    slider.SetProperty(Slider::Property::LOWER_BOUND, -1.0f );
 -    slider.SetProperty(Slider::Property::UPPER_BOUND, 1.0f );
 -
 -    Property::Array marks;
 -    float mark = -1.0f;
 -    for(unsigned short i(0); i<21; ++i )
 -    {
 -      marks.push_back( mark );
 -      mark += 0.1f;
 -    }
 -
 -    slider.SetProperty(Slider::Property::MARKS, marks);
 -    slider.SetProperty(Slider::Property::SNAP_TO_MARKS, true );
 -    slider.SetSize(size);
 -    slider.SetScale( 0.5f );
 -    slider.ValueChangedSignal().Connect(this,callback);
 -    textActor.Add( slider );
 -    return textActor;
++    return Actor();
    }
  
    /**
index 0000000,6c11537..2d31d2d
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,103 +1,93 @@@
 -  TextActor textActor = TextActor::New( "JSON & JavaScript Launcher..." );
 -
 -  // Reposition the actor
 -  textActor.SetParentOrigin( ParentOrigin::TOP_LEFT );
 -  textActor.SetAnchorPoint( AnchorPoint::TOP_LEFT );
 -  textActor.SetPosition( 20, 0 );
 -
+ /*
+  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+  *
+  * Licensed under the Apache License, Version 2.0 (the "License");
+  * you may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at
+  *
+  * http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  */
+ // CLASS HEADER
+ #include "launcher.h"
+ // EXTERNAL INCLUDES
+ #include <fstream>
+ #include <sys/stat.h>
+ #include <dali/integration-api/debug.h>
+ using namespace Dali;
+ #define TOKEN_STRING(x) #x
+ namespace
+ {
+ std::string GetFileContents(const std::string& filename)
+ {
+   std::ifstream t(filename.c_str());
+   return std::string((std::istreambuf_iterator<char>(t)),
+                      std::istreambuf_iterator<char>());
+ };
+ } // unnamed namespace
+ Launcher::Launcher( Dali::Application application, std::string layoutFileName, std::string scriptFileName )
+ : mApplication( application ),
+   mJSONFileName(layoutFileName ),
+   mJavaScriptFileName( scriptFileName )
+ {
+   mApplication.InitSignal().Connect( this, &Launcher::Create );
+ }
+ Launcher::~Launcher()
+ {
+ }
+ void Launcher::Create( Dali::Application& application )
+ {
 -  // Display the actor on the stage
 -  stage.Add( textActor );
 -
+   // Get a handle to the stage
+   Stage stage = Stage::GetCurrent();
+   // change the background color to purple
+   Stage::GetCurrent().SetBackgroundColor( Vector4(0.2,0.2,0.4,1.0) );
+   // Try loading a JSON file
+   if( !mJSONFileName.empty() )
+   {
+     mBuilder = Toolkit::Builder::New();
+     Property::Map defaultDirs;
+     defaultDirs[ TOKEN_STRING(DALI_IMAGE_DIR) ]  = DALI_IMAGE_DIR;
+     defaultDirs[ TOKEN_STRING(DALI_MODEL_DIR) ]  = DALI_MODEL_DIR;
+     defaultDirs[ TOKEN_STRING(DALI_SCRIPT_DIR) ] = DALI_SCRIPT_DIR;
+     mBuilder.AddConstants( defaultDirs );
+     std::string json_data(GetFileContents( mJSONFileName ));
+     mBuilder.LoadFromString(json_data);
+     mBuilder.AddActors( stage.GetRootLayer() );
+   }
+   // Try load a JavaScript file
+   if( !mJavaScriptFileName.empty() )
+   {
+     // execute the script
+     mScript = Toolkit::Script::New();
+     mScript.ExecuteFile( mJavaScriptFileName);
+   }
+ }
+ void Launcher::MainLoop()
+ {
+   mApplication.MainLoop();
+ }
index 0000000,130f83b..41b6f29
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,1346 +1,1309 @@@
 -    mTitleActor = Dali::Toolkit::TextView::New();
+ /*
+  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+  *
+  * Licensed under the Apache License, Version 2.0 (the "License");
+  * you may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at
+  *
+  * http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  */
+ #include "shared/view.h"
+ #include <dali/dali.h>
+ #include <dali-toolkit/dali-toolkit.h>
+ using namespace Dali;
+ // Define this so that it is interchangeable
+ // "DP" stands for Device independent Pixels
+ #define DP(x) DemoHelper::ScalePointSize(x)
+ struct ButtonItem
+ {
+   const char* name;
+   const char* text;
+ };
+ namespace
+ {
+ const char* const BACKGROUND_IMAGE = DALI_IMAGE_DIR "background-gradient.jpg";
+ const char* const TOOLBAR_IMAGE = DALI_IMAGE_DIR "top-bar.png";
+ const char* const TOOLBAR_TITLE = "Size Negotiation";
+ const int TOOLBAR_HEIGHT = 62;
+ const char* MENU_ICON_IMAGE = DALI_IMAGE_DIR "icon-cluster-none.png";
+ const char* const PUSHBUTTON_BUTTON_IMAGE = DALI_IMAGE_DIR "button-up.9.png";
+ const char* const PUSHBUTTON_PRESS_IMAGE = DALI_IMAGE_DIR "button-down.9.png";
+ const char* const POPUPS_MENU_ID = "POPUPS_MENU";
+ const char* const TABLEVIEW_MENU_ID = "TABLEVIEW_MENU";
+ const char* const POPUP_BUTTON_EMPTY_ID = "POPUP_BUTTON_EMPTY";
+ const char* const POPUP_BUTTON_TITLE_ID = "POPUP_BUTTON_TITLE";
+ const char* const POPUP_BUTTON_BUTTONS_1_ID = "POPUP_BUTTON_BUTTONS_1";
+ const char* const POPUP_BUTTON_BUTTONS_2_ID = "POPUP_BUTTON_BUTTONS_2";
+ const char* const POPUP_BUTTON_TITLE_BUTTONS_ID = "POPUP_BUTTON_TITLE_BUTTONS";
+ const char* const POPUP_BUTTON_CONTENT_TEXT_ID = "POPUP_BUTTON_CONTENT_TEXT";
+ const char* const POPUP_BUTTON_CONTENT_IMAGE_ID = "POPUP_BUTTON_CONTENT_IMAGE";
+ const char* const POPUP_BUTTON_CONTENT_IMAGE_SCALE_ID = "POPUP_BUTTON_CONTENT_IMAGE_SCALE";
+ const char* const POPUP_BUTTON_CONTENT_IMAGE_FIT_ID = "POPUP_BUTTON_CONTENT_IMAGE_FIT";
+ const char* const POPUP_BUTTON_CONTENT_IMAGE_FILL_ID = "POPUP_BUTTON_CONTENT_IMAGE_FILL";
+ const char* const POPUP_BUTTON_TITLE_CONTENT_TEXT_ID = "POPUP_BUTTON_TITLE_CONTENT_TEXT";
+ const char* const POPUP_BUTTON_TITLE_CONTENT_TEXT_BUTTONS_ID = "POPUP_BUTTON_TITLE_CONTENT_TEXT_BUTTONS";
+ const char* const POPUP_BUTTON_COMPLEX_ID = "POPUP_BUTTON_COMPLEX";
+ const char* const TABLEVIEW_BUTTON_EMPTY_ID = "TABLEVIEW_BUTTON_EMPTY";
+ const char* const TABLEVIEW_BUTTON_1CELL_ID = "TABLEVIEW_BUTTON_1CELL";
+ const char* const TABLEVIEW_BUTTON_3CELL_ID = "TABLEVIEW_BUTTON_3CELL";
+ const char* const TABLEVIEW_BUTTON_3X3CELL_ID = "TABLEVIEW_BUTTON_3X3CELL";
+ const char* const TABLEVIEW_BUTTON_FIXED1_ID = "TABLEVIEW_BUTTON_FIXED1";
+ const char* const TABLEVIEW_BUTTON_FIXED2_ID = "TABLEVIEW_BUTTON_FIXED2";
+ const char* const TABLEVIEW_BUTTON_FIT1_ID = "TABLEVIEW_BUTTON_FIT1";
+ const char* const TABLEVIEW_BUTTON_FIT2_ID = "TABLEVIEW_BUTTON_FIT2";
+ const char* const TABLEVIEW_BUTTON_NATURAL1_ID = "TABLEVIEW_BUTTON_NATURAL1";
+ const char* const TABLEVIEW_BUTTON_NATURAL2_ID = "TABLEVIEW_BUTTON_NATURAL2";
+ const char* const TABLEVIEW_BUTTON_NATURAL3_ID = "TABLEVIEW_BUTTON_NATURAL3";
+ const char* const OKAY_BUTTON_ID = "OKAY_BUTTON";
+ const char* const CANCEL_BUTTON_ID = "CANCEL_BUTTON";
+ const char* const CONTENT_TEXT = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
+ const char* const IMAGE1 = DALI_IMAGE_DIR "gallery-medium-5.jpg";
+ const char* const IMAGE2 = DALI_IMAGE_DIR "background-magnifier.jpg";
+ const char* const CHECKBOX_UNCHECKED_IMAGE = DALI_IMAGE_DIR "checkbox-unselected.png";
+ const char* const CHECKBOX_CHECKED_IMAGE = DALI_IMAGE_DIR "checkbox-selected.png";
+ const ButtonItem MENU_ITEMS[] = {
+     { POPUPS_MENU_ID,        "Popups" },
+     { TABLEVIEW_MENU_ID,     "TableView" }
+ };
+ const unsigned int MENU_ITEMS_COUNT = sizeof( MENU_ITEMS ) / sizeof( MENU_ITEMS[0] );
+ const ButtonItem POPUP_BUTTON_ITEMS[] = {
+     { POPUP_BUTTON_COMPLEX_ID,                    "Complex" },
+     { POPUP_BUTTON_EMPTY_ID,                      "Empty" },
+     { POPUP_BUTTON_TITLE_ID,                      "Title" },
+     { POPUP_BUTTON_BUTTONS_1_ID,                  "1 Button" },
+     { POPUP_BUTTON_BUTTONS_2_ID,                  "2 Buttons" },
+     { POPUP_BUTTON_TITLE_BUTTONS_ID,              "Title & Buttons" },
+     { POPUP_BUTTON_CONTENT_TEXT_ID,               "Text" },
+     { POPUP_BUTTON_CONTENT_IMAGE_ID,              "Image" },
+     { POPUP_BUTTON_CONTENT_IMAGE_SCALE_ID,        "Image Scale" },
+     { POPUP_BUTTON_CONTENT_IMAGE_FIT_ID,          "Image Fit" },
+     { POPUP_BUTTON_CONTENT_IMAGE_FILL_ID,         "Image Fill" },
+     { POPUP_BUTTON_TITLE_CONTENT_TEXT_ID,         "Title Text" },
+     { POPUP_BUTTON_TITLE_CONTENT_TEXT_BUTTONS_ID, "Title, text, buttons" }
+ };
+ const int POPUP_BUTTON_ITEMS_COUNT = sizeof( POPUP_BUTTON_ITEMS ) / sizeof( POPUP_BUTTON_ITEMS[0] );
+ const ButtonItem TABLEVIEW_BUTTON_ITEMS[] = {
+     { TABLEVIEW_BUTTON_EMPTY_ID,                    "Empty" },
+     { TABLEVIEW_BUTTON_1CELL_ID,                    "1 Cell" },
+     { TABLEVIEW_BUTTON_3CELL_ID,                    "3 Cell" },
+     { TABLEVIEW_BUTTON_3X3CELL_ID,                  "3x3 Cells" },
+     { TABLEVIEW_BUTTON_FIXED1_ID,                   "Fixed 1" },
+     { TABLEVIEW_BUTTON_FIXED2_ID,                   "Fixed 2" },
+     { TABLEVIEW_BUTTON_FIT1_ID,                     "Fit Top Bottom" },
+     { TABLEVIEW_BUTTON_FIT2_ID,                     "Fit Middle" },
+     { TABLEVIEW_BUTTON_NATURAL1_ID,                 "Natural 1" },
+     { TABLEVIEW_BUTTON_NATURAL2_ID,                 "Natural 2" },
+     { TABLEVIEW_BUTTON_NATURAL3_ID,                 "Natural 3" },
+ };
+ const unsigned int TABLEVIEW_BUTTON_ITEMS_COUNT = sizeof( TABLEVIEW_BUTTON_ITEMS ) / sizeof( TABLEVIEW_BUTTON_ITEMS[0] );
+ }  // namespace
+ /**
+  * This example shows the usage of size negotiation.
+  */
+ class SizeNegotiationController: public ConnectionTracker, public Toolkit::ItemFactory
+ {
+ public:
+   SizeNegotiationController( Application& application )
+     : mApplication( application ),
+       mMenuShown( false ),
+       mDemoState( POPUP )
+   {
+     // Connect to the Application's Init signal
+     mApplication.InitSignal().Connect( this, &SizeNegotiationController::Create );
+   }
+   ~SizeNegotiationController()
+   {
+     // Nothing to do here
+   }
+   void Create( Application& application )
+   {
+     // The Init signal is received once (only) during the Application lifetime
+     Stage stage = Stage::GetCurrent();
+     // Respond to key events
+     stage.KeyEventSignal().Connect(this, &SizeNegotiationController::OnKeyEvent);
+     // Creates a default view with a default tool bar.
+     // The view is added to the stage.
+     mContentLayer = DemoHelper::CreateView( application,
+                                             mView,
+                                             mToolBar,
+                                             BACKGROUND_IMAGE,
+                                             TOOLBAR_IMAGE,
+                                             std::string("") );
 -    mTitleActor.SetText( std::string( TOOLBAR_TITLE ) + ": " + subTitle );
 -    mTitleActor.SetStyleToCurrentText( DemoHelper::GetDefaultTextStyle() );
++    mTitleActor = Dali::Toolkit::TextLabel::New(); // FIXME
+     mTitleActor.SetName( "CUSTOM_TOOLBAR_TITLE" );
+     SetTitle();
+     // Create menu button
+     Toolkit::PushButton viewButton = Toolkit::PushButton::New();
+     viewButton.SetBackgroundImage( ResourceImage::New( MENU_ICON_IMAGE ) );
+     viewButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnMenu );
+     mToolBar.AddControl( viewButton, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, Toolkit::Alignment::HorizontalLeft, DemoHelper::DEFAULT_MODE_SWITCH_PADDING  );
+     // Add title to the tool bar.
+     const float padding( DemoHelper::DEFAULT_VIEW_STYLE.mToolBarPadding );
+     mToolBar.AddControl( mTitleActor, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarTitlePercentage, Toolkit::Alignment::HorizontalCenter, Toolkit::Alignment::Padding( padding, padding, padding, padding ) );
+     mItemView = Toolkit::ItemView::New( *this );
+     mItemView.SetParentOrigin( ParentOrigin::CENTER );
+     mItemView.SetAnchorPoint( AnchorPoint::CENTER );
+     mItemView.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+     // Use a grid layout for tests
+     Toolkit::GridLayoutPtr gridLayout = Toolkit::GridLayout::New();
+     gridLayout->SetNumberOfColumns( 2 );
+     gridLayout->SetTopMargin( DP(TOOLBAR_HEIGHT) + DP(20.0f) );
+     gridLayout->SetBottomMargin( DP(100.0f) );
+     gridLayout->SetRowSpacing( DP(20.0f) );
+     mItemView.AddLayout( *gridLayout );
+     Vector2 stageSize = stage.GetSize();
+     float layoutWidth = Toolkit::IsHorizontal( gridLayout->GetOrientation() ) ? stageSize.height : stageSize.width;
+     float gridItemSize = ( layoutWidth / gridLayout->GetNumberOfColumns() ) * 0.5f;
+     gridLayout->SetScrollSpeedFactor( gridLayout->GetNumberOfColumns() / gridItemSize * 0.5f );
+     mItemView.ActivateLayout( 0, Vector3(stageSize.x, stageSize.y, stageSize.x), 0.0f );
+     mContentLayer.Add( mItemView );
+   }
+   void SetTitle()
+   {
+     std::string subTitle = "";
+     switch( mDemoState )
+     {
+       case POPUP:
+       {
+         subTitle = "Popups";
+         break;
+       }
+       case TABLEVIEW:
+       {
+         subTitle = "TableView";
+         break;
+       }
+       default:
+       {
+         break;
+       }
+     }
 -      Toolkit::TextView text = Toolkit::TextView::New();
 -      text.SetName( "POPUP_CONTENT_TEXT" );
 -      text.SetText( CONTENT_TEXT );
 -      text.SetMultilinePolicy( Toolkit::TextView::SplitByWord );
 -      text.SetWidthExceedPolicy( Toolkit::TextView::Split );
 -      text.SetLineJustification( Toolkit::TextView::Center );
 -      text.SetResizePolicy( FILL_TO_PARENT, WIDTH );
 -      text.SetDimensionDependency( HEIGHT, WIDTH );
 -      text.SetPadding( Padding( 20.0f, 20.0f, 20.0f, 20.0f ) );
 -
 -      mPopup.Add( text );
++    mTitleActor.SetProperty( Toolkit::TextLabel::Property::TEXT, std::string( std::string( TOOLBAR_TITLE ) + ": " + subTitle ) );
+   }
+   bool OnMenu( Toolkit::Button button )
+   {
+     ShowMenu();
+     return true;
+   }
+   void ShowMenu()
+   {
+     Stage stage = Stage::GetCurrent();
+     const float popupWidth = stage.GetSize().x * 0.5f;
+     mMenu = Toolkit::Popup::New();
+     mMenu.SetParentOrigin( ParentOrigin::TOP_LEFT );
+     mMenu.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+     mMenu.HideTail();
+     mMenu.OutsideTouchedSignal().Connect( this, &SizeNegotiationController::HideMenu );
+     mMenu.SetPreferredSize( Vector2( popupWidth, 0.0f ) );
+     mMenu.SetResizePolicy( FIT_TO_CHILDREN, HEIGHT );
+     Toolkit::TableView tableView = Toolkit::TableView::New( 0, 0 );
+     tableView.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+     tableView.SetResizePolicy( USE_NATURAL_SIZE, HEIGHT );
+     mMenu.Add( tableView );
+     for( unsigned int i = 0; i < MENU_ITEMS_COUNT; ++i )
+     {
+       Toolkit::PushButton menuButton = Toolkit::PushButton::New();
+       menuButton.SetName( MENU_ITEMS[ i ].name );
+       menuButton.SetLabel( MENU_ITEMS[ i ].text );
+       menuButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnMenuSelect );
+       tableView.Add( menuButton );
+       tableView.SetFitHeight( i );
+     }
+     // Show the menu
+     mMenu.Show();
+     mMenuShown = true;
+   }
+   void HideMenu()
+   {
+     if( mMenu )
+     {
+       mMenu.Hide();
+       mMenu.Reset();
+     }
+     mMenuShown = false;
+   }
+   bool OnMenuSelect( Toolkit::Button button )
+   {
+     bool refresh = false;
+     if( button.GetName() == POPUPS_MENU_ID )
+     {
+       if( mDemoState != POPUP )
+       {
+         refresh = true;
+         mDemoState = POPUP;
+       }
+     }
+     else if( button.GetName() == TABLEVIEW_MENU_ID )
+     {
+       if( mDemoState != TABLEVIEW )
+       {
+         refresh = true;
+         mDemoState = TABLEVIEW;
+       }
+     }
+     if( refresh )
+     {
+       SetTitle();
+       mItemView.Refresh();
+     }
+     HideMenu();
+     return true;
+   }
+   Toolkit::Popup CreatePopup()
+   {
+     Stage stage = Stage::GetCurrent();
+     const float POPUP_WIDTH_DP = stage.GetSize().width * 0.75f;
+     Toolkit::Popup popup = Toolkit::Popup::New();
+     popup.SetName( "POPUP" );
+     popup.SetParentOrigin( ParentOrigin::CENTER );
+     popup.SetAnchorPoint( AnchorPoint::CENTER );
+     popup.SetPreferredSize( Vector2( POPUP_WIDTH_DP, 0.0f ) );
+     popup.HideTail();
+     popup.OutsideTouchedSignal().Connect( this, &SizeNegotiationController::OnPopupOutsideTouched );
+     return popup;
+   }
+   bool OnButtonClicked( Toolkit::Button button )
+   {
+     if( button.GetName() == POPUP_BUTTON_EMPTY_ID )
+     {
+       mPopup = CreatePopup();
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == POPUP_BUTTON_TITLE_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetTitle( "Popup!" );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == POPUP_BUTTON_BUTTONS_1_ID )
+     {
+       mPopup = CreatePopup();
+       Toolkit::PushButton okayButton = Toolkit::PushButton::New();
+       okayButton.SetName( OKAY_BUTTON_ID );
+       okayButton.SetLabel( "OK!" );
+       okayButton.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
+       okayButton.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
+       okayButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
+       mPopup.AddButton( okayButton );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == POPUP_BUTTON_BUTTONS_2_ID )
+     {
+       mPopup = CreatePopup();
+       Toolkit::PushButton cancelButton = Toolkit::PushButton::New();
+       cancelButton.SetName( CANCEL_BUTTON_ID );
+       cancelButton.SetLabel( "Cancel" );
+       cancelButton.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
+       cancelButton.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
+       cancelButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
+       mPopup.AddButton( cancelButton );
+       Toolkit::PushButton okayButton = Toolkit::PushButton::New();
+       okayButton.SetName( OKAY_BUTTON_ID );
+       okayButton.SetLabel( "OK!" );
+       okayButton.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
+       okayButton.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
+       okayButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
+       mPopup.AddButton( okayButton );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == POPUP_BUTTON_TITLE_BUTTONS_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetTitle( "Popup!" );
+       Toolkit::PushButton cancelButton = Toolkit::PushButton::New();
+       cancelButton.SetName( CANCEL_BUTTON_ID );
+       cancelButton.SetLabel( "Cancel" );
+       cancelButton.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
+       cancelButton.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
+       cancelButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
+       mPopup.AddButton( cancelButton );
+       Toolkit::PushButton okayButton = Toolkit::PushButton::New();
+       okayButton.SetName( OKAY_BUTTON_ID );
+       okayButton.SetLabel( "OK!" );
+       okayButton.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
+       okayButton.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
+       okayButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
+       mPopup.AddButton( okayButton );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == POPUP_BUTTON_CONTENT_TEXT_ID )
+     {
+       mPopup = CreatePopup();
 -      Toolkit::TextView text = Toolkit::TextView::New();
 -      text.SetName( "POPUP_CONTENT_TEXT" );
 -      text.SetText( CONTENT_TEXT );
 -      text.SetMultilinePolicy( Toolkit::TextView::SplitByWord );
 -      text.SetWidthExceedPolicy( Toolkit::TextView::Split );
 -      text.SetLineJustification( Toolkit::TextView::Center );
 -      text.SetResizePolicy( FILL_TO_PARENT, WIDTH );
 -      text.SetDimensionDependency( HEIGHT, WIDTH );
 -      text.SetPadding( Padding( 20.0f, 20.0f, 20.0f, 20.0f ) );
 -
 -      mPopup.Add( text );
++      // FIXME - Add text
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == POPUP_BUTTON_CONTENT_IMAGE_ID )
+     {
+       mPopup = CreatePopup();
+       ImageActor image = ImageActor::New( ResourceImage::New( IMAGE2 ) );
+       image.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+       image.SetDimensionDependency( HEIGHT, WIDTH );
+       image.SetPadding( Padding( 20.0f, 20.0f, 20.0f, 20.0f ) );
+       mPopup.Add( image );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == POPUP_BUTTON_CONTENT_IMAGE_SCALE_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       mPopup.SetSizeMode( SIZE_RELATIVE_TO_PARENT );
+       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
+       ImageActor image = ImageActor::New( ResourceImage::New( IMAGE2 ) );
+       image.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       mPopup.Add( image );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == POPUP_BUTTON_CONTENT_IMAGE_FIT_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       mPopup.SetSizeMode( SIZE_RELATIVE_TO_PARENT );
+       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
+       ImageActor image = ImageActor::New( ResourceImage::New( IMAGE2 ) );
+       image.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       image.SetSizeScalePolicy( FIT_WITH_ASPECT_RATIO );
+       mPopup.Add( image );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == POPUP_BUTTON_CONTENT_IMAGE_FILL_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       mPopup.SetSizeMode( SIZE_RELATIVE_TO_PARENT );
+       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
+       ImageActor image = ImageActor::New( ResourceImage::New( IMAGE2 ) );
+       image.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       image.SetSizeScalePolicy( FILL_WITH_ASPECT_RATIO );
+       mPopup.Add( image );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == POPUP_BUTTON_TITLE_CONTENT_TEXT_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetTitle( "Popup!" );
 -      Toolkit::TextView text = Toolkit::TextView::New();
 -      text.SetName( "POPUP_CONTENT_TEXT" );
 -      text.SetText( CONTENT_TEXT );
 -      text.SetMultilinePolicy( Toolkit::TextView::SplitByWord );
 -      text.SetWidthExceedPolicy( Toolkit::TextView::Split );
 -      text.SetLineJustification( Toolkit::TextView::Left );
 -      text.SetResizePolicy( FILL_TO_PARENT, WIDTH );
 -      text.SetDimensionDependency( HEIGHT, WIDTH );
 -      text.SetPadding( Padding( 10.0f, 10.0f, 20.0f, 0.0f ) );
 -
 -      mPopup.Add( text );
++      // FIXME - Add text
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == POPUP_BUTTON_TITLE_CONTENT_TEXT_BUTTONS_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetTitle( "Popup!" );
 -        Toolkit::TextView text = Toolkit::TextView::New();
 -        text.SetText( "Do you really want to quit?" );
 -        text.SetMultilinePolicy( Toolkit::TextView::SplitByWord );
 -        text.SetWidthExceedPolicy( Toolkit::TextView::Split );
 -        text.SetLineJustification( Toolkit::TextView::Left );
 -        text.SetResizePolicy( FILL_TO_PARENT, WIDTH );
 -        text.SetDimensionDependency( HEIGHT, WIDTH );
++      // FIXME - Add text
+       Toolkit::PushButton cancelButton = Toolkit::PushButton::New();
+       cancelButton.SetName( CANCEL_BUTTON_ID );
+       cancelButton.SetLabel( "Cancel" );
+       cancelButton.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
+       cancelButton.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
+       cancelButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
+       mPopup.AddButton( cancelButton );
+       Toolkit::PushButton okayButton = Toolkit::PushButton::New();
+       okayButton.SetName( OKAY_BUTTON_ID );
+       okayButton.SetLabel( "OK!" );
+       okayButton.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
+       okayButton.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
+       okayButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
+       mPopup.AddButton( okayButton );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == POPUP_BUTTON_COMPLEX_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetTitle( "Warning" );
+       // Content
+       Toolkit::TableView content = Toolkit::TableView::New( 2, 2 );
+       content.SetName( "COMPLEX_TABLEVIEW" );
+       content.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+       content.SetResizePolicy( USE_NATURAL_SIZE, HEIGHT );
+       content.SetFitHeight( 0 );
+       content.SetFitHeight( 1 );
+       content.SetPadding( Padding( 20.0f, 20.0f, 20.0f, 0.0f ) );
+       // Text
+       {
 -        Toolkit::TextView text = Toolkit::TextView::New();
 -        text.SetText( "Don't show again" );
 -        text.SetLineJustification( Toolkit::TextView::Left );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New();
++        // FIXME
+         content.AddChild( text, Toolkit::TableView::CellPosition( 0, 0 ) );
+       }
+       // Image
+       {
+         ImageActor image = ImageActor::New( ResourceImage::New( IMAGE1 ) );
+         image.SetName( "COMPLEX_IMAGE" );
+         image.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+         image.SetDimensionDependency( HEIGHT, WIDTH );
+         image.SetPadding( Padding( 20.0f, 0.0f, 0.0f, 0.0f ) );
+         content.AddChild( image, Toolkit::TableView::CellPosition( 0, 1 ) );
+       }
+       // Text 2
+       {
+         Toolkit::TableView root = Toolkit::TableView::New( 1, 2 );
+         root.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+         root.SetResizePolicy( USE_NATURAL_SIZE, HEIGHT );
+         root.SetFitHeight( 0 );
+         root.SetFitWidth( 0 );
+         root.SetPadding( Padding( 0.0f, 0.0f, 0.0f, 20.0f ) );
+         Dali::Image unchecked = Dali::ResourceImage::New( CHECKBOX_UNCHECKED_IMAGE );
+         Dali::Image checked = Dali::ResourceImage::New( CHECKBOX_CHECKED_IMAGE );
+         Toolkit::CheckBoxButton checkBox = Toolkit::CheckBoxButton::New();
+         checkBox.SetBackgroundImage( unchecked );
+         checkBox.SetSelectedImage( checked );
+         checkBox.SetPreferredSize( Vector2( 48, 48 ) );
+         checkBox.SetResizePolicy( FIXED, ALL_DIMENSIONS );
+         root.AddChild( checkBox, Toolkit::TableView::CellPosition( 0, 0 ) );
 -        TextActor text = TextActor::New( "Fixed" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Don't show again" );
++        // FIXME
+         Actor textActor = text;
+         textActor.SetPadding( Padding( 20.0f, 0.0f, 0.0f, 10.0f ) );
+         root.AddChild( text, Toolkit::TableView::CellPosition( 0, 1 ) );
+         content.AddChild( root, Toolkit::TableView::CellPosition( 1, 0, 0, 2 ) );  // Column span 2
+       }
+       mPopup.Add( content );
+       // Buttons
+       Toolkit::PushButton cancelButton = Toolkit::PushButton::New();
+       cancelButton.SetName( CANCEL_BUTTON_ID );
+       cancelButton.SetLabel( "Cancel" );
+       cancelButton.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
+       cancelButton.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
+       cancelButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
+       mPopup.AddButton( cancelButton );
+       Toolkit::PushButton okayButton = Toolkit::PushButton::New();
+       okayButton.SetName( OKAY_BUTTON_ID );
+       okayButton.SetLabel( "OK!" );
+       okayButton.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
+       okayButton.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
+       okayButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
+       mPopup.AddButton( okayButton );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == TABLEVIEW_BUTTON_EMPTY_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       mPopup.SetSizeMode( SIZE_RELATIVE_TO_PARENT );
+       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
+       Toolkit::TableView table = Toolkit::TableView::New( 0, 0 );
+       table.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       mPopup.Add( table );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == TABLEVIEW_BUTTON_1CELL_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       mPopup.SetSizeMode( SIZE_RELATIVE_TO_PARENT );
+       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
+       Toolkit::TableView table = Toolkit::TableView::New( 0, 0 );
+       table.SetName( "TABLEVIEW_BUTTON_1CELL_ID" );
+       table.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
+       backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       table.Add( backing );
+       mPopup.Add( table );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == TABLEVIEW_BUTTON_3CELL_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       mPopup.SetSizeMode( SIZE_RELATIVE_TO_PARENT );
+       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
+       Toolkit::TableView table = Toolkit::TableView::New( 0, 0 );
+       table.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+         table.Add( backing );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+         table.Add( backing );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+         table.Add( backing );
+       }
+       mPopup.Add( table );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == TABLEVIEW_BUTTON_3X3CELL_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       mPopup.SetSizeMode( SIZE_RELATIVE_TO_PARENT );
+       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
+       Toolkit::TableView table = Toolkit::TableView::New( 3, 3 );
+       table.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       // Column 0
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+         table.AddChild( backing, Toolkit::TableView::CellPosition( 0, 0 ) );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+         table.AddChild( backing, Toolkit::TableView::CellPosition( 1, 0 ) );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+         table.AddChild( backing, Toolkit::TableView::CellPosition( 2, 0 ) );
+       }
+       // Column 1
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 1.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+         table.AddChild( backing, Toolkit::TableView::CellPosition( 0, 1 ) );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 1.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+         table.AddChild( backing, Toolkit::TableView::CellPosition( 1, 1 ) );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 0.0f, 1.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+         table.AddChild( backing, Toolkit::TableView::CellPosition( 2, 1 ) );
+       }
+       // Column 2
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 0.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+         table.AddChild( backing, Toolkit::TableView::CellPosition( 0, 2 ) );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.5f, 0.5f, 0.5f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+         table.AddChild( backing, Toolkit::TableView::CellPosition( 1, 2 ) );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.5f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+         table.AddChild( backing, Toolkit::TableView::CellPosition( 2, 2 ) );
+       }
+       mPopup.Add( table );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == TABLEVIEW_BUTTON_FIXED1_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       mPopup.SetSizeMode( SIZE_RELATIVE_TO_PARENT );
+       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
+       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
+       table.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       table.SetFixedHeight( 0, 50.0f );
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
 -        TextActor text = TextActor::New( "Fill" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fixed" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
 -        TextActor text = TextActor::New( "Fill" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
 -        TextActor text = TextActor::New( "Fixed" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       mPopup.Add( table );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == TABLEVIEW_BUTTON_FIXED2_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       mPopup.SetSizeMode( SIZE_RELATIVE_TO_PARENT );
+       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
+       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
+       table.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       table.SetFixedHeight( 0, 50.0f );
+       table.SetFixedHeight( 2, 50.0f );
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
 -        TextActor text = TextActor::New( "Fill" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fixed" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
 -        TextActor text = TextActor::New( "Fixed" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
 -        TextActor text = TextActor::New( "Fit" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fixed" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       mPopup.Add( table );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == TABLEVIEW_BUTTON_FIT1_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       mPopup.SetSizeMode( SIZE_RELATIVE_TO_PARENT );
+       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
+       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
+       table.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       table.SetFitHeight( 0 );
+       table.SetFitHeight( 2 );
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+         backing.SetResizePolicy( FIXED, HEIGHT );
+         backing.SetPreferredSize( Vector2( 0.0f, 100.0f ) );
 -        TextActor text = TextActor::New( "Fill" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
 -        TextActor text = TextActor::New( "Fit" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+         backing.SetResizePolicy( FIXED, HEIGHT );
+         backing.SetPreferredSize( Vector2( 0.0f, 100.0f ) );
 -        TextActor text = TextActor::New( "Fill" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       mPopup.Add( table );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == TABLEVIEW_BUTTON_FIT2_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       mPopup.SetSizeMode( SIZE_RELATIVE_TO_PARENT );
+       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
+       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
+       table.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+       table.SetFitHeight( 1 );
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
 -        TextActor text = TextActor::New( "Fit" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+         backing.SetResizePolicy( FIXED, HEIGHT );
+         backing.SetPreferredSize( Vector2( 0.0f, 200.0f ) );
 -        TextActor text = TextActor::New( "Fill" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
 -        TextActor text = TextActor::New( "Fit" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       mPopup.Add( table );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == TABLEVIEW_BUTTON_NATURAL1_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+       mPopup.SetSizeMode( SIZE_RELATIVE_TO_PARENT );
+       mPopup.SetSizeModeFactor( Vector3( 0.75f, 1.0f, 1.0f ) );
+       mPopup.SetResizePolicy( FIT_TO_CHILDREN, HEIGHT );
+       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
+       table.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+       table.SetResizePolicy( USE_NATURAL_SIZE, HEIGHT );
+       table.SetFitHeight( 0 );
+       table.SetFitHeight( 1 );
+       table.SetFitHeight( 2 );
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+         backing.SetResizePolicy( FIXED, HEIGHT );
+         backing.SetPreferredSize( Vector2( 0.0f, 100.0f ) );
 -        TextActor text = TextActor::New( "Fit" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+         backing.SetResizePolicy( FIXED, HEIGHT );
+         backing.SetPreferredSize( Vector2( 0.0f, 200.0f ) );
 -        TextActor text = TextActor::New( "Fit" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+         backing.SetResizePolicy( FIXED, HEIGHT );
+         backing.SetPreferredSize( Vector2( 0.0f, 300.0f ) );
 -        TextActor text = TextActor::New( "Fit" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       mPopup.Add( table );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == TABLEVIEW_BUTTON_NATURAL2_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+       mPopup.SetSizeMode( SIZE_RELATIVE_TO_PARENT );
+       mPopup.SetSizeModeFactor( Vector3( 0.75f, 1.0f, 1.0f ) );
+       mPopup.SetResizePolicy( FIT_TO_CHILDREN, HEIGHT );
+       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
+       table.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+       table.SetResizePolicy( USE_NATURAL_SIZE, HEIGHT );
+       table.SetFitHeight( 0 );
+       table.SetFitHeight( 1 );
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+         backing.SetResizePolicy( FIXED, HEIGHT );
+         backing.SetPreferredSize( Vector2( 0.0f, 100.0f ) );
 -        TextActor text = TextActor::New( "Fit" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+         backing.SetResizePolicy( FIXED, HEIGHT );
+         backing.SetPreferredSize( Vector2( 0.0f, 200.0f ) );
 -        TextActor text = TextActor::New( "Fixed" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       mPopup.Add( table );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == TABLEVIEW_BUTTON_NATURAL3_ID )
+     {
+       mPopup = CreatePopup();
+       mPopup.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+       mPopup.SetSizeMode( SIZE_RELATIVE_TO_PARENT );
+       mPopup.SetSizeModeFactor( Vector3( 0.75f, 1.0f, 1.0f ) );
+       mPopup.SetResizePolicy( FIT_TO_CHILDREN, HEIGHT );
+       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
+       table.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+       table.SetResizePolicy( USE_NATURAL_SIZE, HEIGHT );
+       table.SetFixedHeight( 0, 20.0f );
+       table.SetFitHeight( 1 );
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
 -        TextActor text = TextActor::New( "Fit" );
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fixed" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       {
+         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
+         backing.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+         backing.SetResizePolicy( FIXED, HEIGHT );
+         backing.SetPreferredSize( Vector2( 0.0f, 200.0f ) );
 -  Toolkit::TextView mTitleActor;             ///< Title text
++        Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
+         text.SetAnchorPoint( AnchorPoint::CENTER );
+         text.SetParentOrigin( ParentOrigin::CENTER );
+         backing.Add( text );
+         table.Add( backing );
+       }
+       mPopup.Add( table );
+       // The popup is not yet on the stage so needs to be flaged as dirty
+       mPopup.MarkDirtyForRelayout();
+       mPopup.Show();
+     }
+     else if( button.GetName() == OKAY_BUTTON_ID || button.GetName() == CANCEL_BUTTON_ID )
+     {
+       if( mPopup )
+       {
+         mPopup.Hide();
+       }
+     }
+     return true;
+   }
+   void OnPopupOutsideTouched()
+   {
+     if( mPopup )
+     {
+       mPopup.Hide();
+     }
+   }
+   void OnKeyEvent( const KeyEvent& event )
+   {
+     if( event.state == KeyEvent::Down )
+     {
+       if( IsKey( event, Dali::DALI_KEY_ESCAPE ) || IsKey( event, Dali::DALI_KEY_BACK ) )
+       {
+         // Exit application when click back or escape.
+         mApplication.Quit();
+       }
+     }
+   }
+ public: // From ItemFactory
+   /**
+    * @brief Return the number of items to display in the item view
+    *
+    * @return Return the number of items to display
+    */
+   virtual unsigned int GetNumberOfItems()
+   {
+     switch( mDemoState )
+     {
+       case POPUP:
+       {
+         return POPUP_BUTTON_ITEMS_COUNT;
+       }
+       case TABLEVIEW:
+       {
+         return TABLEVIEW_BUTTON_ITEMS_COUNT;
+       }
+       default:
+       {
+         break;
+       }
+     }
+     return 0;
+   }
+   /**
+    * @brief Create a new item to populate the item view with
+    *
+    * @param[in] itemId The index of the item to create
+    * @return Return the created actor for the given ID
+    */
+   virtual Actor NewItem(unsigned int itemId)
+   {
+     const ButtonItem* buttonDataArray = NULL;
+     switch( mDemoState )
+     {
+       case POPUP:
+       {
+         buttonDataArray = POPUP_BUTTON_ITEMS;
+         break;
+       }
+       case TABLEVIEW:
+       {
+         buttonDataArray = TABLEVIEW_BUTTON_ITEMS;
+         break;
+       }
+       default:
+       {
+         break;
+       }
+     }
+     if( buttonDataArray )
+     {
+       Toolkit::PushButton popupButton = Toolkit::PushButton::New();
+       popupButton.SetName( buttonDataArray[ itemId ].name );
+       popupButton.SetLabel( buttonDataArray[ itemId ].text );
+       popupButton.SetResizePolicy( USE_NATURAL_SIZE, ALL_DIMENSIONS );
+       popupButton.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
+       popupButton.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
+       popupButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
+       return popupButton;
+     }
+     return Actor();
+   }
+ private:
+   enum DemoState
+   {
+     POPUP,
+     TABLEVIEW
+   };
+   Application&      mApplication;
+   Toolkit::View     mView;                   ///< The View instance.
+   Toolkit::ToolBar  mToolBar;                ///< The View's Toolbar.
+   Layer             mContentLayer;           ///< Content layer
++  Toolkit::TextLabel mTitleActor;             ///< Title text
+   Toolkit::Popup    mMenu;                   ///< The navigation menu
+   bool              mMenuShown;              ///< If the navigation menu is currently being displayed or not
+   Toolkit::Popup    mPopup;
+   Toolkit::ItemView mItemView;               ///< ItemView to hold test images
+   DemoState mDemoState;
+ };
+ void RunTest( Application& application )
+ {
+   SizeNegotiationController test( application );
+   application.MainLoop();
+ }
+ // Entry point for Linux & SLP applications
+ //
+ int main( int argc, char **argv )
+ {
+   Application application = Application::New( &argc, &argv );
+   RunTest( application );
+   return 0;
+ }
index 9940514,0000000..ad18697
mode 100644,000000..100644
--- /dev/null
@@@ -1,121 -1,0 +1,123 @@@
- // INTERNAL INCLUDES
- #include "edit-layout.h"
 +/*
 + * Copyright (c) 2015 Samsung Electronics Co., Ltd.
 + *
 + * Licensed under the Apache License, Version 2.0 (the "License");
 + * you may not use this file except in compliance with the License.
 + * You may obtain a copy of the License at
 + *
 + * http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + *
 + */
 +
 +/**
 + * @file text-field-example.cpp
 + * @brief Basic usage of TextField control
 + */
 +
 +// EXTERNAL INCLUDES
 +#include <dali-toolkit/dali-toolkit.h>
 +#include <dali/public-api/text-abstraction/text-abstraction.h>
 +
-     EditLayout layout = EditLayout::New();
-     layout.SetParentOrigin( ParentOrigin::CENTER );
-     layout.SetAnchorPoint( AnchorPoint::CENTER );
-     layout.SetSize( stageSize.width - BORDER_WIDTH*2.0f, stageSize.height*0.2f );
-     stage.Add( layout );
 +using namespace Dali;
 +using namespace Dali::Toolkit;
 +
 +namespace
 +{
 +
++const char* const BACKGROUND_IMAGE = DALI_IMAGE_DIR "button-up.9.png";
++
 +const float BORDER_WIDTH = 4.0f;
 +
 +} // unnamed namespace
 +
 +/**
 + * @brief The main class of the demo.
 + */
 +class TextFieldExample : public ConnectionTracker
 +{
 +public:
 +
 +  TextFieldExample( Application& application )
 +  : mApplication( application )
 +  {
 +    // Connect to the Application's Init signal
 +    mApplication.InitSignal().Connect( this, &TextFieldExample::Create );
 +  }
 +
 +  ~TextFieldExample()
 +  {
 +    // Nothing to do here.
 +  }
 +
 +  /**
 +   * One-time setup in response to Application InitSignal.
 +   */
 +  void Create( Application& application )
 +  {
 +    Stage stage = Stage::GetCurrent();
 +
 +    stage.KeyEventSignal().Connect(this, &TextFieldExample::OnKeyEvent);
 +
 +    Vector2 stageSize = stage.GetSize();
 +
-     field.SetParentOrigin( ParentOrigin::CENTER );
-     field.SetBackgroundColor( Color::BLACK );
-     layout.SetTopPanel( field );
++    mContainer = Control::New();
++    mContainer.SetName( "Container" );
++    mContainer.SetParentOrigin( ParentOrigin::CENTER );
++    mContainer.SetResizePolicy( FIXED, ALL_DIMENSIONS );
++    mContainer.SetPreferredSize( Vector2(stageSize.width*0.6f, stageSize.width*0.6f) );
++    mContainer.SetBackgroundImage( ResourceImage::New( BACKGROUND_IMAGE ) );
++    mContainer.GetChildAt(0).SetZ(-1.0f);
++    stage.Add( mContainer );
 +
 +    TextField field = TextField::New();
++    mContainer.Add( field );
 +
 +    field.SetProperty( TextField::Property::TEXT, "Hello" );
 +
 +    Property::Value fieldText = field.GetProperty( TextField::Property::TEXT );
 +    std::cout << "Displaying text: " << fieldText.Get< std::string >() << std::endl;
 +  }
 +
 +  /**
 +   * Main key event handler
 +   */
 +  void OnKeyEvent(const KeyEvent& event)
 +  {
 +    if(event.state == KeyEvent::Down)
 +    {
 +      if( IsKey( event, DALI_KEY_ESCAPE) || IsKey( event, DALI_KEY_BACK ) )
 +      {
 +        mApplication.Quit();
 +      }
 +    }
 +  }
 +
 +private:
 +
 +  Application& mApplication;
++
++  Control mContainer;
 +};
 +
 +void RunTest( Application& application )
 +{
 +  TextFieldExample test( application );
 +
 +  application.MainLoop();
 +}
 +
 +/** Entry point for Linux & Tizen applications */
 +int main( int argc, char **argv )
 +{
 +  Application application = Application::New( &argc, &argv );
 +
 +  RunTest( application );
 +
 +  return 0;
 +}
index 8f0dd67,0000000..1cdff6c
mode 100644,000000..100644
--- /dev/null
@@@ -1,154 -1,0 +1,150 @@@
- // INTERNAL INCLUDES
- #include "vertical-layout.h"
- #include "emoji-strings.h"
 +/*
 + * Copyright (c) 2015 Samsung Electronics Co., Ltd.
 + *
 + * Licensed under the Apache License, Version 2.0 (the "License");
 + * you may not use this file except in compliance with the License.
 + * You may obtain a copy of the License at
 + *
 + * http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + *
 + */
 +
-     mLayout = VerticalLayout::New();
-     mLayout.SetParentOrigin( ParentOrigin::TOP_LEFT );
-     mLayout.SetAnchorPoint( AnchorPoint::TOP_LEFT );
 +// EXTERNAL INCLUDES
 +#include <dali-toolkit/dali-toolkit.h>
 +#include <dali/public-api/text-abstraction/text-abstraction.h>
 +#include <iostream>
 +
++// INTERNAL INCLUDES
++#include "emoji-strings.h"
++
 +using namespace Dali;
 +using namespace Dali::Toolkit;
 +using namespace EmojiStrings;
 +
 + // TODO Need to expose Text::RENDER.....
 +const int ATLAS_RENDERER = 0;
 +
 +// This example shows how to create and display Hello World! using a simple TextActor
 +//
 +class EmojiExample : public ConnectionTracker
 +{
 +public:
 +
 +  typedef uint32_t SizeType;
 +
 +  EmojiExample( Application& application )
 +  : mApplication( application )
 +  {
 +    std::cout << "EmoticonController::EmoticonController" << std::endl;
 +
 +    // Connect to the Application's Init signal
 +    mApplication.InitSignal().Connect( this, &EmojiExample::Create );
 +  }
 +
 +  ~EmojiExample()
 +  {
 +    // Nothing to do here;
 +  }
 +
 +  // The Init signal is received once (only) during the Application lifetime
 +  void Create( Application& application )
 +  {
-     stage.Add( mLayout );
 +    Stage stage = Stage::GetCurrent();
-       TextLabel label = TextLabel::New();
 +    stage.KeyEventSignal().Connect(this, &EmojiExample::OnKeyEvent);
 +
++    mTableView = Toolkit::TableView::New( NUMBER_OF_EMOJIS, 1 );
++    mTableView.SetResizePolicy( FILL_TO_PARENT, WIDTH );
++    mTableView.SetResizePolicy( USE_NATURAL_SIZE, HEIGHT );
++    mTableView.SetParentOrigin( ParentOrigin::TOP_LEFT );
++    mTableView.SetAnchorPoint( AnchorPoint::TOP_LEFT );
++    mTableView.TouchedSignal().Connect( this, &EmojiExample::OnTouchEvent );
++    stage.Add( mTableView );
++
 +    for( unsigned int index = 0u; index < NUMBER_OF_EMOJIS; ++index )
 +    {
 +      const Emoji& emoji = EMOJIS[index];
 +      const std::string text = emoji.mUTF8 + " " + emoji.mDescription;
-       label.SetProperty( TextLabel::Property::TEXT, text );
-       mLayout.AddLabel( label );
-       mLayout.TouchedSignal().Connect( this, &EmojiExample::OnTouchEvent );
-     }
-     const Vector2& size = stage.GetSize();
-     const float height = mLayout.GetHeightForWidth( size.width );
-     mLayout.SetSize( Size( size.width, height ) );
-     mLayout.TouchedSignal().Connect( this, &EmojiExample::OnTouchEvent );
++
++      TextLabel label = TextLabel::New( text );
 +      label.SetParentOrigin( ParentOrigin::TOP_CENTER );
 +      label.SetAnchorPoint( AnchorPoint::TOP_CENTER );
 +      label.SetProperty( TextLabel::Property::MULTI_LINE, true );
-           mAnimation.MoveBy( mLayout, Vector3( 0.f, localPoint - mLastPoint, 0.f ), AlphaFunctions::Linear );
 +
++      mTableView.SetFitHeight( index );
++      mTableView.AddChild( label, Toolkit::TableView::CellPosition( index, 0 ) );
++    }
 +  }
 +
 +  bool OnTouchEvent( Actor actor, const TouchEvent& event )
 +  {
 +    if( 1u == event.GetPointCount() )
 +    {
 +      const TouchPoint::State state = event.GetPoint(0u).state;
 +
 +      // Clamp to integer values; this is to reduce flicking due to pixel misalignment
 +      const float localPoint = static_cast<float>( static_cast<int>( event.GetPoint( 0 ).local.y ) );
 +
 +      if( TouchPoint::Down == state )
 +      {
 +        mLastPoint = localPoint;
 +        mAnimation = Animation::New( 0.25f );
 +      }
 +      else if( TouchPoint::Motion == state )
 +      {
 +        if( mAnimation )
 +        {
-   VerticalLayout mLayout;
++          mAnimation.MoveBy( mTableView, Vector3( 0.f, localPoint - mLastPoint, 0.f ), AlphaFunctions::Linear );
 +          mAnimation.Play();
 +          mLastPoint = localPoint;
 +        }
 +      }
 +    }
 +
 +    return true;
 +  }
 +
 +  /**
 +   * Main key event handler
 +   */
 +  void OnKeyEvent(const KeyEvent& event)
 +  {
 +    if(event.state == KeyEvent::Down)
 +    {
 +      if( IsKey( event, DALI_KEY_ESCAPE) || IsKey( event, DALI_KEY_BACK ) )
 +      {
 +        mApplication.Quit();
 +      }
 +    }
 +  }
 +
 +
 +private:
 +  Application&  mApplication;
++  TableView      mTableView;
 +  Animation      mAnimation;
 +  float          mLastPoint;
 +};
 +
 +void RunTest( Application& application )
 +{
 +  EmojiExample test( application );
 +
 +  application.MainLoop();
 +}
 +
 +// Entry point for Linux & SLP applications
 +//
 +int main( int argc, char **argv )
 +{
 +  Application application = Application::New( &argc, &argv );
 +
 +  RunTest( application );
 +
 +  return 0;
 +}
index 27c5422,0000000..c1f5e2d
mode 100644,000000..100644
--- /dev/null
@@@ -1,158 -1,0 +1,151 @@@
- #include "vertical-layout.h"
 +/*
 + * Copyright (c) 2015 Samsung Electronics Co., Ltd.
 + *
 + * Licensed under the Apache License, Version 2.0 (the "License");
 + * you may not use this file except in compliance with the License.
 + * You may obtain a copy of the License at
 + *
 + * http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + *
 + */
 +
 +/**
 + * @file text-label-example.cpp
 + * @brief Basic usage of TextLabel control
 + */
 +
 +// INTERNAL INCLUDES
-     mLayout = VerticalLayout::New();
-     mLayout.SetParentOrigin( ParentOrigin::TOP_LEFT );
-     mLayout.SetAnchorPoint( AnchorPoint::TOP_LEFT );
-     stage.Add( mLayout );
 +#include "shared/multi-language-strings.h"
 +
 +// EXTERNAL INCLUDES
 +#include <dali-toolkit/dali-toolkit.h>
 +#include <dali/public-api/text-abstraction/text-abstraction.h>
 +
 +using namespace Dali;
 +using namespace Dali::Toolkit;
 +using namespace MultiLanguageStrings;
 +
 +/**
 + * @brief The main class of the demo.
 + */
 +class TextLabelMultiLanguageExample : public ConnectionTracker
 +{
 +public:
 +
 +  TextLabelMultiLanguageExample( Application& application )
 +  : mApplication( application ),
 +    mLastPoint( 0.f )
 +  {
 +    // Connect to the Application's Init signal
 +    mApplication.InitSignal().Connect( this, &TextLabelMultiLanguageExample::Create );
 +  }
 +
 +  ~TextLabelMultiLanguageExample()
 +  {
 +    // Nothing to do here.
 +  }
 +
 +  /**
 +   * One-time setup in response to Application InitSignal.
 +   */
 +  void Create( Application& application )
 +  {
 +    Stage stage = Stage::GetCurrent();
 +
 +    stage.KeyEventSignal().Connect(this, &TextLabelMultiLanguageExample::OnKeyEvent);
 +
-       label.SetParentOrigin( ParentOrigin::TOP_CENTER );
-       label.SetAnchorPoint( AnchorPoint::TOP_CENTER );
++    mTableView = Toolkit::TableView::New( NUMBER_OF_LANGUAGES, 1 );
++    mTableView.SetResizePolicy( FILL_TO_PARENT, WIDTH );
++    mTableView.SetResizePolicy( USE_NATURAL_SIZE, HEIGHT );
++    mTableView.SetParentOrigin( ParentOrigin::TOP_LEFT );
++    mTableView.SetAnchorPoint( AnchorPoint::TOP_LEFT );
++    mTableView.TouchedSignal().Connect( this, &TextLabelMultiLanguageExample::OnTouchEvent );
++    stage.Add( mTableView );
 +
 +    for( unsigned int index = 0u; index < NUMBER_OF_LANGUAGES; ++index )
 +    {
 +      const Language& language = LANGUAGES[index];
 +
 +      TextLabel label = TextLabel::New();
 +      label.SetProperty( TextLabel::Property::MULTI_LINE, true );
 +
 +      const std::string text = language.languageName + " " + language.languageRomanName + " " + language.text;
-       mLayout.AddLabel( label );
 +      label.SetProperty( TextLabel::Property::TEXT, text );
-       mLayout.TouchedSignal().Connect( this, &TextLabelMultiLanguageExample::OnTouchEvent );
 +
-     const Vector2& size = Stage::GetCurrent().GetSize();
-     const float height = mLayout.GetHeightForWidth( size.width );
-     mLayout.SetSize( Size( size.width, height ) );
++      mTableView.SetFitHeight( index );
++      mTableView.AddChild( label, Toolkit::TableView::CellPosition( index, 0 ) );
 +    }
-           mAnimation.MoveBy( mLayout, Vector3( 0.f, localPoint - mLastPoint, 0.f ), AlphaFunctions::Linear );
 +  }
 +
 +  bool OnTouchEvent( Actor actor, const TouchEvent& event )
 +  {
 +    if( 1u == event.GetPointCount() )
 +    {
 +      const TouchPoint::State state = event.GetPoint(0u).state;
 +
 +      // Clamp to integer values; this is to reduce flicking due to pixel misalignment
 +      const float localPoint = static_cast<float>( static_cast<int>( event.GetPoint( 0 ).local.y ) );
 +
 +      if( TouchPoint::Down == state )
 +      {
 +        mLastPoint = localPoint;
 +        mAnimation = Animation::New( 0.25f );
 +      }
 +      else if( TouchPoint::Motion == state )
 +      {
 +        if( mAnimation )
 +        {
-   VerticalLayout mLayout;
++          mAnimation.MoveBy( mTableView, Vector3( 0.f, localPoint - mLastPoint, 0.f ), AlphaFunctions::Linear );
 +          mAnimation.Play();
 +          mLastPoint = localPoint;
 +        }
 +      }
 +    }
 +
 +    return true;
 +  }
 +
 +  /**
 +   * Main key event handler
 +   */
 +  void OnKeyEvent(const KeyEvent& event)
 +  {
 +    if(event.state == KeyEvent::Down)
 +    {
 +      if( IsKey( event, DALI_KEY_ESCAPE) || IsKey( event, DALI_KEY_BACK ) )
 +      {
 +        mApplication.Quit();
 +      }
 +    }
 +  }
 +
 +private:
 +
 +  Application&   mApplication;
++  TableView      mTableView;
 +  Animation      mAnimation;
 +  float          mLastPoint;
 +};
 +
 +void RunTest( Application& application )
 +{
 +  TextLabelMultiLanguageExample test( application );
 +
 +  application.MainLoop();
 +}
 +
 +/** Entry point for Linux & Tizen applications */
 +int main( int argc, char **argv )
 +{
 +  Application application = Application::New( &argc, &argv );
 +
 +  RunTest( application );
 +
 +  return 0;
 +}
index c2e66e8,0000000..fa7e67e
mode 100644,000000..100644
--- /dev/null
@@@ -1,228 -1,0 +1,276 @@@
- #include "center-layout.h"
 +/*
 + * Copyright (c) 2015 Samsung Electronics Co., Ltd.
 + *
 + * Licensed under the Apache License, Version 2.0 (the "License");
 + * you may not use this file except in compliance with the License.
 + * You may obtain a copy of the License at
 + *
 + * http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + *
 + */
 +
 +/**
 + * @file text-label-example.cpp
 + * @brief Basic usage of TextLabel control
 + */
 +
 +// EXTERNAL INCLUDES
 +#include <dali-toolkit/dali-toolkit.h>
 +#include <dali/public-api/text-abstraction/text-abstraction.h>
 +
 +// INTERNAL INCLUDES
-     stage.SetBackgroundColor( Color::BLACK );
 +#include "shared/multi-language-strings.h"
 +
 +using namespace Dali;
 +using namespace Dali::Toolkit;
 +using namespace MultiLanguageStrings;
 +
 +namespace
 +{
++  const char* const BACKGROUND_IMAGE = DALI_IMAGE_DIR "button-up.9.png";
++
 +  const unsigned int KEY_ZERO = 10;
 +  const unsigned int KEY_ONE = 11;
 +  const unsigned int KEY_H = 43;
 +  const unsigned int KEY_V = 55;
 +  const unsigned int KEY_M = 58;
 +  const unsigned int KEY_L = 46;
 +  const unsigned int KEY_S = 39;
 +  const unsigned int KEY_PLUS = 21;
 +  const unsigned int KEY_MINUS = 20;
 +
 +  const char* H_ALIGNMENT_STRING_TABLE[] =
 +  {
 +    "BEGIN",
 +    "CENTER",
 +    "END"
 +  };
 +
 +  const unsigned int H_ALIGNMENT_STRING_COUNT = sizeof( H_ALIGNMENT_STRING_TABLE ) / sizeof( H_ALIGNMENT_STRING_TABLE[0u] );
 +
 +  const char* V_ALIGNMENT_STRING_TABLE[] =
 +  {
 +    "TOP",
 +    "CENTER",
 +    "BOTTOM"
 +  };
 +
 +  const unsigned int V_ALIGNMENT_STRING_COUNT = sizeof( V_ALIGNMENT_STRING_TABLE ) / sizeof( V_ALIGNMENT_STRING_TABLE[0u] );
++
++  int ConvertToEven(int value)
++  {
++    return (value % 2 == 0) ? value : (value + 1);
++  }
 +}
 +
 +/**
 + * @brief The main class of the demo.
 + */
 +class TextLabelExample : public ConnectionTracker
 +{
 +public:
 +
 +  TextLabelExample( Application& application )
 +  : mApplication( application ),
 +    mLanguageId( 0u ),
 +    mAlignment( 0u )
 +  {
 +    // Connect to the Application's Init signal
 +    mApplication.InitSignal().Connect( this, &TextLabelExample::Create );
 +  }
 +
 +  ~TextLabelExample()
 +  {
 +    // Nothing to do here.
 +  }
 +
 +  /**
 +   * One-time setup in response to Application InitSignal.
 +   */
 +  void Create( Application& application )
 +  {
 +    Stage stage = Stage::GetCurrent();
 +
-     CenterLayout centerLayout = CenterLayout::New();
-     centerLayout.SetParentOrigin( ParentOrigin::CENTER );
-     centerLayout.SetSize( stageSize.width*0.6f, stageSize.width*0.6f );
-     stage.Add( centerLayout );
-     mLabel = TextLabel::New();
-     mLabel.SetBackgroundColor( Vector4(0.3f,0.3f,0.6f,1.0f) );
-     centerLayout.Add( mLabel );
 +    stage.KeyEventSignal().Connect(this, &TextLabelExample::OnKeyEvent);
 +    Vector2 stageSize = stage.GetSize();
 +
-     mLabel.SetProperty( TextLabel::Property::TEXT, "A Quick Brown Fox Jumps Over The Lazy Dog" );
++    mContainer = Control::New();
++    mContainer.SetName( "Container" );
++    mContainer.SetParentOrigin( ParentOrigin::CENTER );
++    mContainer.SetResizePolicy( FIXED, ALL_DIMENSIONS );
++    mLayoutSize = Vector2(stageSize.width*0.6f, stageSize.width*0.6f);
++    mContainer.SetPreferredSize( mLayoutSize );
++    mContainer.SetBackgroundImage( ResourceImage::New( BACKGROUND_IMAGE ) );
++    mContainer.GetChildAt(0).SetZ(-1.0f);
++    stage.Add( mContainer );
++
++    // Resize the center layout when the corner is grabbed
++    mGrabCorner = Control::New();
++    mGrabCorner.SetName( "GrabCorner" );
++    mGrabCorner.SetAnchorPoint( AnchorPoint::BOTTOM_RIGHT );
++    mGrabCorner.SetParentOrigin( ParentOrigin::BOTTOM_RIGHT );
++    mGrabCorner.SetResizePolicy( FIXED, ALL_DIMENSIONS );
++    mGrabCorner.SetPreferredSize( Vector2(stageSize.width*0.1f, stageSize.width*0.1f) );
++    mGrabCorner.SetZ(1.0f);
++    mContainer.Add( mGrabCorner );
++
++    mPanGestureDetector = PanGestureDetector::New();
++    mPanGestureDetector.Attach( mGrabCorner );
++    mPanGestureDetector.DetectedSignal().Connect( this, &TextLabelExample::OnPan );
++
++    mLabel = TextLabel::New( "A Quick Brown Fox Jumps Over The Lazy Dog" );
++    mLabel.SetName( "TextLabel" );
++    mLabel.SetAnchorPoint( AnchorPoint::TOP_LEFT );
++    mLabel.SetResizePolicy( FILL_TO_PARENT, HEIGHT );
 +    mLabel.SetProperty( TextLabel::Property::MULTI_LINE, true );
 +    mLabel.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 1.0f, 1.0f ) );
 +    mLabel.SetProperty( TextLabel::Property::SHADOW_COLOR, Color::BLACK );
++    mContainer.Add( mLabel );
 +
 +    Property::Value labelText = mLabel.GetProperty( TextLabel::Property::TEXT );
 +    std::cout << "Displaying text: \"" << labelText.Get< std::string >() << "\"" << std::endl;
 +  }
 +
++  // Resize the text-label with pan gesture
++  void OnPan( Actor actor, const PanGesture& gesture )
++  {
++    mLayoutSize.x += gesture.displacement.x * 2.0f;
++    mLayoutSize.y += gesture.displacement.y * 2.0f;
++
++    if( mLayoutSize.x >= 2.0f &&
++        mLayoutSize.y >= 2.0f )
++    {
++      // Avoid pixel mis-alignment issue
++      Vector2 clampedSize = Vector2( ConvertToEven(static_cast<int>(mLayoutSize.x)),
++                                     ConvertToEven(static_cast<int>(mLayoutSize.y)) );
++
++      mContainer.SetPreferredSize( clampedSize );
++    }
++  }
++
 +  /**
 +   * Main key event handler
 +   */
 +  void OnKeyEvent(const KeyEvent& event)
 +  {
 +    if(event.state == KeyEvent::Down)
 +    {
 +      if( IsKey( event, DALI_KEY_ESCAPE) || IsKey( event, DALI_KEY_BACK ) )
 +      {
 +        mApplication.Quit();
 +      }
 +      else if( event.IsCtrlModifier() )
 +      {
 +        switch( event.keyCode )
 +        {
 +          case KEY_ZERO: // fall through
 +          case KEY_ONE:
 +          {
 +            mLabel.SetProperty( TextLabel::Property::RENDERING_BACKEND, event.keyCode - 10 );
 +            break;
 +          }
 +          case KEY_H:
 +          {
 +            if( ++mAlignment >= H_ALIGNMENT_STRING_COUNT )
 +            {
 +              mAlignment = 0u;
 +            }
 +
 +            mLabel.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, H_ALIGNMENT_STRING_TABLE[ mAlignment ] );
 +            break;
 +          }
 +          case KEY_V:
 +          {
 +            if( ++mAlignment >= V_ALIGNMENT_STRING_COUNT )
 +            {
 +              mAlignment = 0u;
 +            }
 +
 +            mLabel.SetProperty( TextLabel::Property::VERTICAL_ALIGNMENT, V_ALIGNMENT_STRING_TABLE[ mAlignment ] );
 +            break;
 +          }
 +          case KEY_M:
 +          {
 +            bool multiLine = mLabel.GetProperty<bool>( TextLabel::Property::MULTI_LINE );
 +            mLabel.SetProperty( TextLabel::Property::MULTI_LINE, !multiLine );
 +            break;
 +          }
 +          case KEY_L:
 +          {
 +            const Language& language = LANGUAGES[ mLanguageId ];
 +
 +            mLabel.SetProperty( TextLabel::Property::TEXT, language.text );
 +
 +            if( ++mLanguageId >= NUMBER_OF_LANGUAGES )
 +            {
 +              mLanguageId = 0u;
 +            }
 +            break;
 +          }
 +          case KEY_S:
 +          {
 +            if( Color::BLACK == mLabel.GetProperty<Vector4>( TextLabel::Property::SHADOW_COLOR ) )
 +            {
 +              mLabel.SetProperty( TextLabel::Property::SHADOW_COLOR, Color::RED );
 +            }
 +            else
 +            {
 +              mLabel.SetProperty( TextLabel::Property::SHADOW_COLOR, Color::BLACK );
 +            }
 +            break;
 +          }
 +          case KEY_PLUS:
 +          {
 +            mLabel.SetProperty( TextLabel::Property::SHADOW_OFFSET, mLabel.GetProperty<Vector2>( TextLabel::Property::SHADOW_OFFSET ) + Vector2( 1.0f, 1.0f ) );
 +            break;
 +          }
 +          case KEY_MINUS:
 +          {
 +            mLabel.SetProperty( TextLabel::Property::SHADOW_OFFSET, mLabel.GetProperty<Vector2>( TextLabel::Property::SHADOW_OFFSET ) - Vector2( 1.0f, 1.0f ) );
 +            break;
 +          }
 +
 +        }
 +      }
 +    }
 +  }
 +
 +private:
 +
 +  Application& mApplication;
 +
 +  TextLabel mLabel;
 +
++  Control mContainer;
++  Actor mGrabCorner;
++
++  PanGestureDetector mPanGestureDetector;
++
++  Vector2 mLayoutSize;
++
 +  unsigned int mLanguageId;
 +  unsigned int mAlignment;
 +};
 +
 +void RunTest( Application& application )
 +{
 +  TextLabelExample test( application );
 +
 +  application.MainLoop();
 +}
 +
 +/** Entry point for Linux & Tizen applications */
 +int main( int argc, char **argv )
 +{
 +  Application application = Application::New( &argc, &argv );
 +
 +  RunTest( application );
 +
 +  return 0;
 +}
Simple merge
diff --cc shared/view.h
@@@ -61,15 -65,31 +61,17 @@@ float ScalePointSize(int pointSize
  Dali::Layer CreateToolbar( Dali::Toolkit::ToolBar& toolBar,
                             const std::string& toolbarImagePath,
                             const std::string& title,
 -                           const ViewStyle& style,
 -                           const Dali::TextStyle& textStyle )
 +                           const ViewStyle& style )
  {
 +  Dali::Stage stage = Dali::Stage::GetCurrent();
 +
    Dali::Layer toolBarLayer = Dali::Layer::New();
+   toolBarLayer.SetName( "TOOLBAR_LAYER" );
    toolBarLayer.SetAnchorPoint( Dali::AnchorPoint::TOP_CENTER );
    toolBarLayer.SetParentOrigin( Dali::ParentOrigin::TOP_CENTER );
-   toolBarLayer.ApplyConstraint( Dali::Constraint::New<Dali::Vector3>( Dali::Actor::Property::SIZE, Dali::ParentSource( Dali::Actor::Property::SIZE ), Dali::SourceWidthFixedHeight( style.mToolBarHeight  ) ) );
-   toolBarLayer.SetSize( 0.0f, style.mToolBarHeight );
+   toolBarLayer.SetPreferredSize( Dali::Vector2( 0.0f, style.mToolBarHeight ) );
+   toolBarLayer.SetResizePolicy( Dali::FILL_TO_PARENT, Dali::WIDTH );
+   toolBarLayer.SetResizePolicy( Dali::FIXED, Dali::HEIGHT );
  
    // Raise tool bar layer to the top.
    toolBarLayer.RaiseToTop();