/* * 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. * 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 transition-application.cpp * @brief Application class for showing stylable transitions */ // Class include #include "transition-application.h" // External includes #include #include #include "shadow-button.h" #include #include // Internal includes using namespace Dali; using namespace Dali::Toolkit; namespace { void SetLabelText( Button button, const char* label ) { button.SetProperty( Toolkit::Button::Property::LABEL, label ); } } namespace Demo { const char* TransitionApplication::DEMO_THEME_ONE_PATH( DEMO_STYLE_DIR "style-example-theme-one.json" ); const char* TransitionApplication::DEMO_THEME_TWO_PATH( DEMO_STYLE_DIR "style-example-theme-two.json" ); TransitionApplication::TransitionApplication( Application& application ) : mApplication( application ), mTitle(), mShadowButton(), mActionButtons(), mVisualIndex( Property::INVALID_INDEX ), mActionIndex( Property::INVALID_INDEX ) { application.InitSignal().Connect( this, &TransitionApplication::Create ); } TransitionApplication::~TransitionApplication() { } void TransitionApplication::Create( Application& application ) { Stage stage = Stage::GetCurrent(); stage.KeyEventSignal().Connect(this, &TransitionApplication::OnKeyEvent); stage.SetBackgroundColor( Vector4( 0.1f, 0.1f, 0.1f, 1.0f ) ); // Hide the indicator bar application.GetWindow().ShowIndicator( Dali::Window::INVISIBLE ); // Content panes: TableView contentLayout = TableView::New( 3, 1 ); contentLayout.SetName("ContentLayout"); contentLayout.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); contentLayout.SetAnchorPoint( AnchorPoint::TOP_LEFT ); contentLayout.SetParentOrigin( ParentOrigin::TOP_LEFT ); contentLayout.SetCellPadding( Vector2( 0.0f, 5.0f ) ); contentLayout.SetBackgroundColor( Vector4(0.949, 0.949, 0.949, 1.0) ); // Assign all rows the size negotiation property of fitting to children stage.Add( contentLayout ); mTitle = TextLabel::New( "Custom Control Transition Example" ); mTitle.SetName( "Title" ); mTitle.SetStyleName("Title"); mTitle.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH ); mTitle.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT ); mTitle.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" ); contentLayout.Add( mTitle ); contentLayout.SetFitHeight(0); // Fill width // Provide some padding around the center cell TableView buttonLayout = TableView::New( 3, 3 ); buttonLayout.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); buttonLayout.SetFixedHeight(1, 100 ); buttonLayout.SetFixedWidth(1, 350 ); contentLayout.Add( buttonLayout ); mShadowButton = ShadowButton::New(); mShadowButton.SetName("ShadowButton"); mShadowButton.SetActiveState( false ); mShadowButton.SetAnchorPoint( AnchorPoint::CENTER ); mShadowButton.SetParentOrigin( ParentOrigin::CENTER ); mShadowButton.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); mShadowButton.SetProperty( DevelControl::Property::STATE, DevelControl::DISABLED ); mShadowButton.SetProperty( DevelControl::Property::SUB_STATE, "UNCHECKED" ); buttonLayout.AddChild( mShadowButton, TableView::CellPosition(1, 1) ); TableView actionButtonLayout = TableView::New( 1, NUMBER_OF_ACTION_BUTTONS+1 ); actionButtonLayout.SetName("ThemeButtonsLayout"); actionButtonLayout.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH ); actionButtonLayout.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::HEIGHT ); actionButtonLayout.SetFitHeight( 0 ); TextLabel label = TextLabel::New( "Action: "); label.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS ); label.SetStyleName("ActionLabel"); actionButtonLayout.AddChild( label, TableView::CellPosition( 0, 0 ) ); actionButtonLayout.SetCellAlignment( TableView::CellPosition( 0, 0 ), HorizontalAlignment::LEFT, VerticalAlignment::CENTER ); for( int i=0; i( mActionIndex ); switch( action ) { case 0: { bool activeState = mShadowButton.GetActiveState(); mShadowButton.SetActiveState( ! activeState ); if( activeState ) { SetLabelText( button, "Enable" ); mShadowButton.SetProperty( DevelControl::Property::STATE, DevelControl::DISABLED ); } else { SetLabelText( button, "Disable" ); mShadowButton.SetProperty( DevelControl::Property::STATE, DevelControl::NORMAL ); } mActionButtons[1].SetProperty( Button::Property::DISABLED, activeState ); break; } case 1: { bool checkState = mShadowButton.GetCheckState(); mShadowButton.SetCheckState( ! checkState ); if( checkState ) { SetLabelText( button, "Check" ); mShadowButton.SetProperty( DevelControl::Property::SUB_STATE, "UNCHECKED" ); } else { SetLabelText( button, "Uncheck" ); mShadowButton.SetProperty( DevelControl::Property::SUB_STATE, "CHECKED" ); } break; } case 2: { break; } case 3: { break; } } return true; } void TransitionApplication::OnKeyEvent( const KeyEvent& keyEvent ) { static int keyPressed = 0; if( keyEvent.state == KeyEvent::Down) { if( keyPressed == 0 ) // Is this the first down event? { printf("Key pressed: %s %d\n", keyEvent.keyPressedName.c_str(), keyEvent.keyCode ); if( IsKey( keyEvent, DALI_KEY_ESCAPE) || IsKey( keyEvent, DALI_KEY_BACK ) ) { mApplication.Quit(); } else if( keyEvent.keyPressedName.compare("Return") == 0 ) { } } keyPressed = 1; } else if( keyEvent.state == KeyEvent::Up ) { keyPressed = 0; } } } // namespace Demo