Using migrated Public Visual API
[platform/core/uifw/dali-demo.git] / examples / styling / styling-application.cpp
index c885987..ff88750 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2017 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.
@@ -24,7 +24,6 @@
 
 // External includes
 #include <dali-toolkit/dali-toolkit.h>
-//#include <dali-toolkit/devel-api/controls/slider/slider.h>
 #include <dali-toolkit/devel-api/controls/popup/popup.h>
 #include "image-channel-control.h"
 #include <cstdio>
@@ -92,7 +91,8 @@ Property::Index GetChannelProperty( int index )
 
 
 StylingApplication::StylingApplication( Application& application )
-: mApplication( application )
+: mApplication( application ),
+  mCurrentTheme( 0 )
 {
   application.InitSignal().Connect( this, &StylingApplication::Create );
 }
@@ -176,7 +176,7 @@ void StylingApplication::Create( Application& application )
   for( int i=0; i<3; ++i )
   {
     std::ostringstream thumbnailName; thumbnailName << "thumbnail" << i+1;
-    ImageView image = ImageView::New( ResourceImage::New( images[i] ) );
+    ImageView image = ImageView::New( images[i] );
     image.SetName( thumbnailName.str() );
     image.SetSize( DP(RADIO_LABEL_THUMBNAIL_SIZE), DP(RADIO_LABEL_THUMBNAIL_SIZE) );
 
@@ -187,7 +187,7 @@ void StylingApplication::Create( Application& application )
     mRadioButtons[i].SetName( radioButtonStyleName.str() );
     mRadioButtons[i].SetParentOrigin( ParentOrigin::TOP_LEFT );
     mRadioButtons[i].SetAnchorPoint( AnchorPoint::TOP_LEFT );
-    mRadioButtons[i].SetSelected( false );
+    mRadioButtons[i].SetProperty( Button::Property::SELECTED, false );
     mRadioButtons[i].StateChangedSignal().Connect( this, &StylingApplication::OnButtonStateChange );
 
     radioButtonsLayout.AddChild( mRadioButtons[i], TableView::CellPosition( i, 0 ) );
@@ -196,16 +196,43 @@ void StylingApplication::Create( Application& application )
     radioButtonsLayout.SetCellAlignment( TableView::CellPosition( i, 1 ), HorizontalAlignment::CENTER, VerticalAlignment::CENTER );
   }
 
-  mRadioButtons[0].SetSelected( true );
-
-  mImageChannelControl = ImageChannelControl::New( BIG_IMAGE_1 );
-  mImageChannelControl.SetName("ImageChannelControl");
-  mImageChannelControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT , Dimension::ALL_DIMENSIONS );
-  mImageChannelControl.SetSizeScalePolicy( SizeScalePolicy::FIT_WITH_ASPECT_RATIO );
-  imageSelectLayout.AddChild( mImageChannelControl, TableView::CellPosition( 0, 1 ) );
+  mRadioButtons[0].SetProperty( Button::Property::SELECTED, true );
 
+  mImagePlacement = Actor::New();
+  mImagePlacement.SetParentOrigin( ParentOrigin::CENTER );
+  mImagePlacement.SetAnchorPoint( AnchorPoint::CENTER );
+  mImagePlacement.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
+  imageSelectLayout.AddChild( mImagePlacement, TableView::CellPosition( 0, 1 ) );
   imageSelectLayout.SetCellAlignment( TableView::CellPosition( 0, 1 ), HorizontalAlignment::RIGHT, VerticalAlignment::CENTER );
 
+  mIcc1 = ImageChannelControl::New( BIG_IMAGE_1 );
+  mIcc1.SetName("ICC1");
+  mIcc1.SetResizePolicy( ResizePolicy::FILL_TO_PARENT , Dimension::ALL_DIMENSIONS );
+  mIcc1.SetSizeScalePolicy( SizeScalePolicy::FIT_WITH_ASPECT_RATIO );
+  mIcc1.SetParentOrigin( ParentOrigin::CENTER );
+  mIcc1.SetVisibility( true );
+
+  mImagePlacement.Add( mIcc1 );
+
+  mIcc2 = ImageChannelControl::New( BIG_IMAGE_2 );
+  mIcc2.SetName("ICC2");
+  mIcc2.SetResizePolicy( ResizePolicy::FILL_TO_PARENT , Dimension::ALL_DIMENSIONS );
+  mIcc2.SetSizeScalePolicy( SizeScalePolicy::FIT_WITH_ASPECT_RATIO );
+  mIcc2.SetParentOrigin( ParentOrigin::CENTER );
+  mIcc2.SetVisibility( false );
+
+  mImagePlacement.Add( mIcc2 );
+
+  mIcc3 = ImageChannelControl::New( BIG_IMAGE_3 );
+  mIcc3.SetName("ICC3");
+  mIcc3.SetResizePolicy( ResizePolicy::FILL_TO_PARENT , Dimension::ALL_DIMENSIONS );
+  mIcc3.SetSizeScalePolicy( SizeScalePolicy::FIT_WITH_ASPECT_RATIO );
+  mIcc3.SetParentOrigin( ParentOrigin::CENTER );
+  mIcc3.SetVisibility( false );
+
+  mImagePlacement.Add( mIcc3 );
+
+  mImageChannelControl = mIcc1;
 
   TableView channelSliderLayout = TableView::New( 3, 3 );
   channelSliderLayout.SetName("ChannelSliderLayout");
@@ -237,7 +264,7 @@ void StylingApplication::Create( Application& application )
     mCheckButtons[i].SetName( checkBoxStyleName.str() );
     mCheckButtons[i].SetParentOrigin( ParentOrigin::CENTER );
     mCheckButtons[i].SetAnchorPoint( AnchorPoint::CENTER );
-    mCheckButtons[i].SetSelected( true );
+    mCheckButtons[i].SetProperty( Button::Property::SELECTED, true );
 
     mCheckButtons[i].StateChangedSignal().Connect( this, &StylingApplication::OnCheckButtonChange );
     mCheckButtons[i].RegisterProperty( "channel", i, Property::READ_WRITE );
@@ -281,7 +308,7 @@ void StylingApplication::Create( Application& application )
   }
 
   mResetButton = PushButton::New();
-  mResetButton.SetLabelText( "Reset" );
+  mResetButton.SetProperty( Toolkit::Button::Property::LABEL, "Reset" );
   mResetButton.SetName("ResetButton");
   mResetButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
   mResetButton.ClickedSignal().Connect( this, &StylingApplication::OnResetClicked );
@@ -321,9 +348,9 @@ void StylingApplication::Create( Application& application )
     mThemeButtons[i].ClickedSignal().Connect( this, &StylingApplication::OnThemeButtonClicked );
     themeButtonLayout.AddChild( mThemeButtons[i], TableView::CellPosition( 0, 1+i ) );
   }
-  mThemeButtons[0].SetLabelText( "Lite" ); // Lightweight changes on top of Dali
-  mThemeButtons[1].SetLabelText( "App1" ); // Different application style
-  mThemeButtons[2].SetLabelText( "App2" );
+  mThemeButtons[0].SetProperty( Toolkit::Button::Property::LABEL, "Lite" ); // Lightweight changes on top of Dali
+  mThemeButtons[1].SetProperty( Toolkit::Button::Property::LABEL, "App1" ); // Different application style
+  mThemeButtons[2].SetProperty( Toolkit::Button::Property::LABEL, "App2" );
 
   contentLayout.Add( themeButtonLayout );
 }
@@ -410,7 +437,7 @@ Popup StylingApplication::CreateResetPopup()
   PushButton okayButton = PushButton::New();
   okayButton.SetName( POPUP_CONTROL_OK_NAME );
   okayButton.SetStyleName( POPUP_CONTROL_OK_NAME );
-  okayButton.SetLabelText( "Ok!" );
+  okayButton.SetProperty( Toolkit::Button::Property::LABEL, "Ok!" );
   okayButton.ClickedSignal().Connect( this, &StylingApplication::OnReset );
   okayButton.SetParentOrigin( ParentOrigin::CENTER );
   okayButton.SetAnchorPoint( AnchorPoint::CENTER );
@@ -420,7 +447,7 @@ Popup StylingApplication::CreateResetPopup()
   PushButton cancelButton = PushButton::New();
   cancelButton.SetName( POPUP_CONTROL_CANCEL_NAME );
   cancelButton.SetStyleName( POPUP_CONTROL_CANCEL_NAME );
-  cancelButton.SetLabelText( "Cancel" );
+  cancelButton.SetProperty( Toolkit::Button::Property::LABEL, "Cancel" );
   cancelButton.ClickedSignal().Connect( this, &StylingApplication::OnResetCancelled );
   cancelButton.SetParentOrigin( ParentOrigin::CENTER );
   cancelButton.SetAnchorPoint( AnchorPoint::CENTER );
@@ -451,23 +478,40 @@ TextLabel StylingApplication::CreateTitle( std::string title )
 
 bool StylingApplication::OnButtonStateChange( Button button )
 {
-  // Todo: save / restore slider states per image
+  // On button press, called twice, once to tell new button it's selected,
+  // once to tell old button it isn't selected?
 
-  if( mImageChannelControl )
+// Todo: save / restore slider states per image
+
+  if( button.GetProperty<bool>(Button::Property::SELECTED) )
   {
-    if( mRadioButtons[0].IsSelected() )
+
+    ImageChannelControl prevIcc = mImageChannelControl;
+
+    if( mRadioButtons[0].GetProperty<bool>(Button::Property::SELECTED) )
     {
-      mImageChannelControl.SetImage( BIG_IMAGE_1 );
+      mImageChannelControl = mIcc1;
     }
-    else if( mRadioButtons[1].IsSelected() )
+    else if( mRadioButtons[1].GetProperty<bool>(Button::Property::SELECTED) )
     {
-      mImageChannelControl.SetImage( BIG_IMAGE_2 );
+      mImageChannelControl = mIcc2;
     }
-    else if( mRadioButtons[2].IsSelected() )
+    else if( mRadioButtons[2].GetProperty<bool>(Button::Property::SELECTED) )
     {
-      mImageChannelControl.SetImage( BIG_IMAGE_3 );
+      mImageChannelControl = mIcc3;
+    }
+
+    if( prevIcc )
+    {
+      prevIcc.SetVisibility( false );
+    }
+
+    if( mImageChannelControl )
+    {
+      mImageChannelControl.SetVisibility( true );
     }
   }
+
   return true;
 }
 
@@ -478,7 +522,7 @@ bool StylingApplication::OnCheckButtonChange( Button button )
   {
     int channel = button.GetProperty<int>( index );
     float value = mChannelSliders[channel].GetProperty<float>( Slider::Property::VALUE );
-    if( !button.IsSelected() )
+    if( !button.GetProperty<bool>(Button::Property::SELECTED) )
     {
       // "Turn off" the channel's contribution
       value = 0.0f;
@@ -512,6 +556,7 @@ bool StylingApplication::OnThemeButtonClicked( Button button )
       break;
     }
   }
+
   StyleManager::Get().ApplyTheme( themePath );
 
   return true;
@@ -554,7 +599,7 @@ bool StylingApplication::OnSliderChanged( Slider slider, float value )
   if( index != Property::INVALID_INDEX )
   {
     int channel = slider.GetProperty<int>( index );
-    if( mCheckButtons[channel].IsSelected() )
+    if( mCheckButtons[channel].GetProperty<bool>(Button::Property::SELECTED) )
     {
       Property::Index channelIndex = GetChannelProperty( channel );
       mImageChannelControl.SetProperty(channelIndex, value/100.0f);