Merge "Add LinearLayout weigth usage in LinearExample." into devel/master
[platform/core/uifw/dali-demo.git] / examples / layouting / linear-example.cpp
index 9f56222..13b8f27 100644 (file)
@@ -27,6 +27,7 @@ using namespace Dali::Toolkit;
 
 namespace
 {
+const char* const TITLE = "Linear Example";
 
 // Button file names
 const char* LTR_IMAGE( DEMO_IMAGE_DIR "icon-play.png" );
@@ -38,6 +39,12 @@ const char* RTL_SELECTED_IMAGE( DEMO_IMAGE_DIR "icon-reverse-selected.png" );
 const char* ROTATE_CLOCKWISE_IMAGE( DEMO_IMAGE_DIR "icon-reset.png" );
 const char* ROTATE_CLOCKWISE_SELECTED_IMAGE( DEMO_IMAGE_DIR "icon-reset-selected.png" );
 
+const char* ALIGN_IMAGE( DEMO_IMAGE_DIR "icon-replace.png" );
+const char* ALIGN_SELECTED_IMAGE( DEMO_IMAGE_DIR "icon-replace-selected.png" );
+
+const char* WEIGHT_IMAGE( DEMO_IMAGE_DIR "icon-item-view-layout-grid.png" );
+const char* WEIGHT_SELECTED_IMAGE( DEMO_IMAGE_DIR "icon-item-view-layout-grid-selected.png" );
+
 // Child image filenames
 const char* IMAGE_PATH[] = {
   DEMO_IMAGE_DIR "application-icon-101.png",
@@ -57,8 +64,8 @@ void CreateChildImageView( ImageView& imageView, const char* filename, Size size
   imagePropertyMap[ Toolkit::ImageVisual::Property::URL ] = filename;
   imagePropertyMap[ ImageVisual::Property::DESIRED_WIDTH ] = size.width;
   imagePropertyMap[ ImageVisual::Property::DESIRED_HEIGHT ] = size.height;
-  imageView.SetProperty(Toolkit::ImageView::Property::IMAGE , imagePropertyMap );
-  imageView.SetName("ImageView");
+  imageView.SetProperty( Toolkit::ImageView::Property::IMAGE, imagePropertyMap );
+  imageView.SetName( "ImageView" );
   imageView.SetAnchorPoint( AnchorPoint::TOP_LEFT );
   imageView.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
 }
@@ -69,7 +76,9 @@ namespace Demo
 {
 
 LinearExample::LinearExample()
-: mLTRDirection(true)
+: Example( TITLE ),
+  mLTRDirection(true),
+  mImagesWeighted (false )
 {
 }
 
@@ -81,25 +90,44 @@ void LinearExample::Create()
   mDirectionButton.SetProperty( PushButton::Property::UNSELECTED_ICON, RTL_IMAGE );
   mDirectionButton.SetProperty( PushButton::Property::SELECTED_ICON, RTL_SELECTED_IMAGE );
   mDirectionButton.ClickedSignal().Connect( this, &LinearExample::OnDirectionClicked );
-  mDirectionButton.SetParentOrigin( Vector3(0.33f, 1.0f, 0.5f ) );
+  mDirectionButton.SetParentOrigin( Vector3( 0.2f, 1.0f, 0.5f ) );
   mDirectionButton.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
-  mDirectionButton.SetSize(75, 75);
+  mDirectionButton.SetSize( 75, 75 );
   stage.Add( mDirectionButton );
 
+  mAlignmentButton = PushButton::New();
+  mAlignmentButton.SetProperty( PushButton::Property::UNSELECTED_ICON, ALIGN_IMAGE );
+  mAlignmentButton.SetProperty( PushButton::Property::SELECTED_ICON, ALIGN_SELECTED_IMAGE );
+  mAlignmentButton.ClickedSignal().Connect( this, &LinearExample::OnAlignmentClicked );
+  mAlignmentButton.SetParentOrigin( Vector3( 0.4f, 1.0f, 0.5f ) );
+  mAlignmentButton.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
+  mAlignmentButton.SetSize( 75, 75 );
+  stage.Add( mAlignmentButton );
+
+  mWeightButton = Toolkit::PushButton::New();
+  mWeightButton.SetProperty( PushButton::Property::UNSELECTED_ICON, WEIGHT_IMAGE );
+  mWeightButton.SetProperty( PushButton::Property::SELECTED_ICON, WEIGHT_SELECTED_IMAGE );
+  mWeightButton.ClickedSignal().Connect( this, &LinearExample::OnWeightClicked );
+  mWeightButton.SetParentOrigin( Vector3( 0.6f, 1.0f, 0.5f ) );
+  mWeightButton.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
+  mWeightButton.SetSize( 75, 75 );
+  stage.Add( mWeightButton );
+
   mRotateButton = PushButton::New();
   mRotateButton.SetProperty( PushButton::Property::UNSELECTED_ICON, ROTATE_CLOCKWISE_IMAGE );
   mRotateButton.SetProperty( PushButton::Property::SELECTED_ICON, ROTATE_CLOCKWISE_SELECTED_IMAGE );
   mRotateButton.ClickedSignal().Connect( this, &LinearExample::OnRotateClicked );
-  mRotateButton.SetParentOrigin( Vector3(0.66f, 1.0f, 0.5f ));
-  mRotateButton.SetAnchorPoint( Vector3(0.5f, 1.0f, 0.5f));
-  mRotateButton.SetSize(75, 75);
+  mRotateButton.SetParentOrigin( Vector3( 0.8f, 1.0f, 0.5f ) );
+  mRotateButton.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
+  mRotateButton.SetSize( 75, 75 );
   stage.Add( mRotateButton );
 
   // Create a linear layout
   mLinearContainer = Control::New();
   auto layout = LinearLayout::New();
   layout.SetAnimateLayout(true);
-  layout.SetOrientation( LinearLayout::Orientation::VERTICAL );
+  layout.SetOrientation( LinearLayout::Orientation::HORIZONTAL );
+  layout.SetAlignment( LinearLayout::Alignment::CENTER_VERTICAL );
   DevelControl::SetLayout( mLinearContainer, layout );
 
   mLinearContainer.SetParentOrigin( ParentOrigin::CENTER );
@@ -113,8 +141,9 @@ void LinearExample::Create()
   for( unsigned int x = 0; x < NUMBER_OF_RESOURCES; ++x )
   {
     Toolkit::ImageView imageView;
-    CreateChildImageView( imageView, IMAGE_PATH[ x ], Size(100.0f, 100.0f) );
+    CreateChildImageView( imageView, IMAGE_PATH[ x ], Size( 100.0f, 100.0f ) );
     mLinearContainer.Add( imageView );
+    mImages.push_back( imageView );
   }
 }
 
@@ -124,6 +153,8 @@ void LinearExample::Remove()
   if ( mLinearContainer )
   {
     UnparentAndReset( mDirectionButton );
+    UnparentAndReset( mAlignmentButton );
+    UnparentAndReset( mWeightButton );
     UnparentAndReset( mRotateButton );
     UnparentAndReset( mLinearContainer);
   }
@@ -132,6 +163,8 @@ void LinearExample::Remove()
 // Mirror items in layout
 bool LinearExample::OnDirectionClicked( Button button )
 {
+  auto layout = LinearLayout::DownCast( DevelControl::GetLayout( mLinearContainer ) );
+  layout.SetOrientation( LinearLayout::Orientation::HORIZONTAL );
   if( !mLTRDirection )
   {
     mDirectionButton.SetProperty( PushButton::Property::UNSELECTED_ICON, LTR_IMAGE );
@@ -155,12 +188,64 @@ bool LinearExample::OnRotateClicked( Button button )
   if( layout.GetOrientation() == LinearLayout::Orientation::VERTICAL )
   {
     layout.SetOrientation( LinearLayout::Orientation::HORIZONTAL );
+    layout.SetAlignment(LinearLayout::Alignment::CENTER_VERTICAL );
   }
   else
   {
     layout.SetOrientation( LinearLayout::Orientation::VERTICAL );
+    layout.SetAlignment( LinearLayout::Alignment::CENTER_HORIZONTAL );
+  }
+  return true;
+}
+
+bool LinearExample::OnAlignmentClicked( Button button )
+{
+  auto layout = LinearLayout::DownCast( DevelControl::GetLayout( mLinearContainer ) );
+  if ( layout.GetAlignment() == LinearLayout::Alignment::CENTER_VERTICAL ) {
+    layout.SetAlignment( LinearLayout::Alignment::BEGIN );
+  }
+  else if ( layout.GetAlignment() == LinearLayout::Alignment::BEGIN )
+  {
+    layout.SetAlignment( LinearLayout::Alignment::END );
+  }
+  else if ( layout.GetAlignment() == LinearLayout::Alignment::END )
+  {
+    layout.SetAlignment( LinearLayout::Alignment::CENTER_HORIZONTAL);
+  }
+  else if ( layout.GetAlignment() == LinearLayout::Alignment::CENTER_HORIZONTAL )
+  {
+    layout.SetAlignment( LinearLayout::Alignment::TOP );
+  }
+  else if ( layout.GetAlignment() == LinearLayout::Alignment::TOP )
+  {
+    layout.SetAlignment( LinearLayout::Alignment::BOTTOM );
+  }
+  else if ( layout.GetAlignment() == LinearLayout::Alignment::BOTTOM )
+  {
+    layout.SetAlignment( LinearLayout::Alignment::CENTER_VERTICAL );
   }
   return true;
 }
 
+bool LinearExample::OnWeightClicked( Button button )
+{
+  if( !mImagesWeighted )
+  {
+    for( auto&& iter : mImages )
+    {
+      iter.SetProperty( Toolkit::LinearLayout::ChildProperty::WEIGHT, 0.25f );
+    }
+  }
+  else
+  {
+    for( auto&& iter : mImages )
+    {
+      iter.SetProperty( Toolkit::LinearLayout::ChildProperty::WEIGHT, 0.0f );
+    }
+  }
+
+  mImagesWeighted = !mImagesWeighted;
+  return true;
+}
+
 } // namespace Demo