simple-visuals-application.cpp 4.37 KB
/*
 * Copyright (c) 2020 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 "my-control.h"

// EXTERNAL INCLUDES
#include <dali-toolkit/dali-toolkit.h>
#include <dali-toolkit/devel-api/controls/table-view/table-view.h>
#include <dali-toolkit/devel-api/focus-manager/keyinput-focus-manager.h>
#include <dali/integration-api/events/touch-event-integ.h>
#include <cstdio>
#include <sstream>

// INTERNAL INCLUDES
#include "simple-visuals-application.h"

using namespace Dali;
using namespace Dali::Toolkit;

namespace
{

}

namespace Demo
{

const char* ICON_IMAGE( DEMO_IMAGE_DIR  "application-icon-13.png" );

SimpleVisualsApplication::SimpleVisualsApplication( Application& application )
: mApplication( application ),
  mMyControl()
{
  application.InitSignal().Connect( this, &SimpleVisualsApplication::Create );
}

Dali::Actor SimpleVisualsApplication::OnKeyboardPreFocusChange( Dali::Actor current, Dali::Actor proposed, Dali::Toolkit::Control::KeyboardFocus::Direction direction )
{
  Actor nextFocusActor = proposed;

  if( !current && !proposed  )
  {
    // Set the initial focus to the first tile in the current page should be focused.
    nextFocusActor = mMyControl;
  }
  else
  {
    if ( current == mMyControl )
    {
      nextFocusActor = mMyControl2;
    }
    else
    {
      nextFocusActor = mMyControl;
    }
  }

  return nextFocusActor;
}


void SimpleVisualsApplication::OnKeyEvent( const KeyEvent& keyEvent )
{
  static int keyPressed = 0;

  if( keyEvent.GetState() == KeyEvent::DOWN)
  {
    if( keyPressed == 0 ) // Is this the first down event?
    {
      printf("Key pressed: %s %d\n", keyEvent.GetKeyName().c_str(), keyEvent.GetKeyCode() );

      if( IsKey( keyEvent, DALI_KEY_ESCAPE) || IsKey( keyEvent, DALI_KEY_BACK ) )
      {
        mApplication.Quit();
      }
      else if( keyEvent.GetKeyName().compare("Return") == 0 )
      {
      }
    }
    keyPressed = 1;
  }
  else if( keyEvent.GetState() == KeyEvent::UP )
  {
    keyPressed = 0;
  }
}

void SimpleVisualsApplication::Create( Application& application )
{
  Window window = application.GetWindow();
  window.SetBackgroundColor( Vector4( 0.1f, 0.1f, 0.1f, 1.0f ) );

  // Connect to key events so can quit application
  window.KeyEventSignal().Connect(this, &SimpleVisualsApplication::OnKeyEvent);

  // Create a table view to parent the 2 MyControls
  TableView contentLayout = TableView::New( 2, 2 );
  contentLayout.SetProperty( Dali::Actor::Property::NAME,"ContentLayout");
  contentLayout.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
  contentLayout.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::HEIGHT );
  contentLayout.SetProperty( Actor::Property::SIZE_MODE_FACTOR, Vector3( 1.0f, .5f, 1.0f ) );
  contentLayout.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER );
  contentLayout.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
  contentLayout.SetCellPadding( Vector2( 50.0f, 15.0f ) );
  contentLayout.SetBackgroundColor( Vector4(0.949, 0.949, 0.949, 1.0) );

  // Listen to focus change so can see Visual change from NORMAL to FOCUSED state
  KeyboardFocusManager::Get().PreFocusChangeSignal().Connect( this, &SimpleVisualsApplication::OnKeyboardPreFocusChange );

  window.Add( contentLayout );

  // Create 2 MyControls and add to table view.
  mMyControl = MyControl::New();
  mMyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
  mMyControl.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::TOP_LEFT);

  mMyControl2 = MyControl::New();
  mMyControl2.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
  mMyControl2.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);

  contentLayout.AddChild( mMyControl2, TableView::CellPosition(0, 0) );
  contentLayout.AddChild( mMyControl, TableView::CellPosition(0, 1) );
}

} // namespace Demo