From dbe9b795d03114abef61adda554b558a38c94d8e Mon Sep 17 00:00:00 2001 From: minho.sun Date: Mon, 6 Mar 2017 15:54:47 +0900 Subject: [PATCH] Focus Integration Sample --- com.samsung.dali-demo.xml | 3 +++ examples-reel/dali-examples-reel.cpp | 1 + examples/focus-integration/focus-integration.cpp | 204 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ resources/po/en_GB.po | 3 +++ resources/po/en_US.po | 3 +++ shared/dali-demo-strings.h | 2 ++ 6 files changed, 216 insertions(+), 0 deletions(-) create mode 100644 examples/focus-integration/focus-integration.cpp diff --git a/com.samsung.dali-demo.xml b/com.samsung.dali-demo.xml index 1705678..e26f63a 100644 --- a/com.samsung.dali-demo.xml +++ b/com.samsung.dali-demo.xml @@ -197,4 +197,7 @@ + + + diff --git a/examples-reel/dali-examples-reel.cpp b/examples-reel/dali-examples-reel.cpp index 2995ea8..adc351d 100644 --- a/examples-reel/dali-examples-reel.cpp +++ b/examples-reel/dali-examples-reel.cpp @@ -44,6 +44,7 @@ int DALI_EXPORT_API main(int argc, char **argv) demo.AddExample(Example("dissolve-effect.example", DALI_DEMO_STR_TITLE_DISSOLVE_TRANSITION)); demo.AddExample(Example("effects-view.example", DALI_DEMO_STR_TITLE_EFFECTS_VIEW)); demo.AddExample(Example("flex-container.example", DALI_DEMO_STR_TITLE_FLEXBOX_PLAYGROUND)); + demo.AddExample(Example("focus-integration.example", DALI_DEMO_STR_TITLE_FOCUS_INTEGRATION)); demo.AddExample(Example("gradients.example", DALI_DEMO_STR_TITLE_COLOR_GRADIENT)); demo.AddExample(Example("image-scaling-and-filtering.example", DALI_DEMO_STR_TITLE_IMAGE_FITTING_SAMPLING)); demo.AddExample(Example("image-scaling-irregular-grid.example", DALI_DEMO_STR_TITLE_IMAGE_SCALING)); diff --git a/examples/focus-integration/focus-integration.cpp b/examples/focus-integration/focus-integration.cpp new file mode 100644 index 0000000..10520b9 --- /dev/null +++ b/examples/focus-integration/focus-integration.cpp @@ -0,0 +1,204 @@ +/* + * 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. + * + */ + +#include "shared/view.h" +#include + +using namespace Dali; +using namespace Dali::Toolkit; + +namespace +{ + +const char* const BACKGROUND_IMAGE = DEMO_IMAGE_DIR "background-gradient.jpg"; +const char* const TOOLBAR_IMAGE = DEMO_IMAGE_DIR "top-bar.png"; +const char* const TOOLBAR_TITLE = "Focus Integration"; +const Vector4 BACKGROUND_COLOUR( 1.0f, 1.0f, 1.0f, 0.15f ); + +// Layout sizes +const int MARGIN_SIZE = 10; +const int TOP_MARGIN = 85; +const std::string ITEMNAME[] = { "TextLabel", "TextField", "TextEditor", "PushButton", "RadioButton", "CheckBoxButton" }; + +} // namespace + +/** + * @brief Shows how integrated DALi Focus works. + */ +class FocusIntegrationExample: public ConnectionTracker +{ +public: + + FocusIntegrationExample( Application& application ) + : mApplication( application ) + { + // Connect to the Application's Init signal + mApplication.InitSignal().Connect( this, &FocusIntegrationExample::Create ); + } + + void Create( Application& application ) + { + mStage = Stage::GetCurrent(); + mContentLayer = DemoHelper::CreateView( application, + mView, + mToolBar, + BACKGROUND_IMAGE, + TOOLBAR_IMAGE, + TOOLBAR_TITLE ); + + TableView contentTable = TableView::New(2, 1); + contentTable.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH); + contentTable.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT); + contentTable.SetAnchorPoint(AnchorPoint::TOP_LEFT); + contentTable.SetParentOrigin(ParentOrigin::TOP_LEFT); + contentTable.SetCellPadding(Size(MARGIN_SIZE, MARGIN_SIZE * 0.5f)); + contentTable.SetKeyboardFocusable(true); + + for( unsigned int i = 0; i < contentTable.GetRows(); ++i ) + { + contentTable.SetFitHeight( i ); + } + contentTable.SetPosition( 0.0f, TOP_MARGIN ); + mContentLayer.Add( contentTable ); + + // Create label to display which control's KeyEvent callback is called + mEventLabel = TextLabel::New("Controls don't get KeyEvent yet"); + mEventLabel.SetSize( mStage.GetSize().width, mStage.GetSize().height*0.1f ); + mEventLabel.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH); + mEventLabel.SetProperty( TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" ); + mEventLabel.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" ); + mEventLabel.SetBackgroundColor( Color::WHITE ); + contentTable.Add( mEventLabel ); + + mContainer = TableView::New( 4, 3 ); + mContainer.SetSize( mStage.GetSize().width, mStage.GetSize().height*0.4f ); + mContainer.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH); + mContainer.SetBackgroundColor( BACKGROUND_COLOUR ); + mContainer.SetCellPadding( Size( MARGIN_SIZE, MARGIN_SIZE ) ); + mContainer.SetRelativeHeight( 0, 0.2f); + mContainer.SetRelativeHeight( 1, 0.3f); + mContainer.SetRelativeHeight( 2, 0.2f); + mContainer.SetRelativeHeight( 3, 0.3f); + mContainer.SetKeyboardFocusable(true); + contentTable.Add( mContainer ); + + // Make name label for each controls + for(int i = 0; i < 6; i++) + { + TextLabel itemLabel = TextLabel::New( ITEMNAME[i] ); + itemLabel.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); + itemLabel.SetBackgroundColor( BACKGROUND_COLOUR ); + itemLabel.SetProperty( TextLabel::Property::POINT_SIZE, 14.0f ); + itemLabel.SetProperty( TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" ); + itemLabel.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" ); + mContainer.AddChild( itemLabel, TableView::CellPosition( (i/3)*2, i%3 ) ); + } + + TextLabel textLabel = TextLabel::New("TextLabel"); + mContainer.AddChild( textLabel, TableView::CellPosition( 1, 0 ) ); + + TextField textField = TextField::New(); + textField.SetBackgroundColor( Color::WHITE ); + textField.SetProperty( TextField::Property::TEXT, "Text" ); + mContainer.AddChild( textField, TableView::CellPosition( 1, 1 ) ); + + TextEditor textEditor = TextEditor::New(); + textEditor.SetBackgroundColor( Color::WHITE ); + textEditor.SetProperty( TextEditor::Property::TEXT, "Text\nText" ); + mContainer.AddChild( textEditor, TableView::CellPosition( 1, 2 ) ); + + PushButton pushButton = PushButton::New(); + mContainer.AddChild( pushButton, TableView::CellPosition( 3, 0 ) ); + + RadioButton radioButton = RadioButton::New(); + mContainer.AddChild( radioButton, TableView::CellPosition( 3, 1 ) ); + + CheckBoxButton checkBoxButton = CheckBoxButton::New(); + mContainer.AddChild( checkBoxButton, TableView::CellPosition( 3, 2 ) ); + + // Set name and keyboard focusable for each controls + for(int i = 0; i<6; i++) + { + Control control = Control::DownCast( mContainer.GetChildAt( TableView::CellPosition( (i/3)*2+1, i%3 ) ) ); + control.SetKeyboardFocusable(true); + control.SetName(ITEMNAME[i]); + control.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); + control.KeyEventSignal().Connect( this, &FocusIntegrationExample::OnControlKeyEvent ); + } + + KeyboardFocusManager::Get().PreFocusChangeSignal().Connect( this, &FocusIntegrationExample::OnPreFocusChange ); + } + + // Callback for KeyboardFocusManager + Actor OnPreFocusChange( Actor current, Actor next, Control::KeyboardFocus::Direction direction ) + { + if( !current && !next ) + { + next = mContainer.GetChildAt( TableView::CellPosition( 1, 0 ) ); + } + return next; + } + + // Callback for each controls. + // Display current control name. + bool OnControlKeyEvent( Control control, const KeyEvent& event ) + { + std::string controlName = control.GetName(); + mEventLabel.SetProperty( TextLabel::Property::TEXT, controlName+"'s KeyEvent works\n" ); + + return false; + } + +private: + + /** + * 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; + Stage mStage; + TableView mContainer; + TextLabel mEventLabel; + Toolkit::Control mView; ///< The View instance. + Toolkit::ToolBar mToolBar; ///< The View's Toolbar. + Layer mContentLayer; ///< Content layer. +}; + +// Entry point for Linux & Tizen applications +// +int DALI_EXPORT_API main( int argc, char **argv ) +{ + Application application = Application::New( &argc, &argv ); + + FocusIntegrationExample test( application ); + + application.MainLoop(); + + return 0; +} diff --git a/resources/po/en_GB.po b/resources/po/en_GB.po index 6ab4531..ed2233a 100755 --- a/resources/po/en_GB.po +++ b/resources/po/en_GB.po @@ -168,3 +168,6 @@ msgstr "Draw triangle" msgid "DALI_DEMO_STR_TITLE_RENDERING_DRAW_LINE" msgstr "Draw line" + +msgid "DALI_DEMO_STR_TITLE_FOCUS_INTEGRATION" +msgstr "Focus integration" diff --git a/resources/po/en_US.po b/resources/po/en_US.po index bdf64d4..cc16c77 100755 --- a/resources/po/en_US.po +++ b/resources/po/en_US.po @@ -168,3 +168,6 @@ msgstr "Draw triangle" msgid "DALI_DEMO_STR_TITLE_RENDERING_DRAW_LINE" msgstr "Draw line" + +msgid "DALI_DEMO_STR_TITLE_FOCUS_INTEGRATION" +msgstr "Focus integration" diff --git a/shared/dali-demo-strings.h b/shared/dali-demo-strings.h index 11be2f6..fc182de 100644 --- a/shared/dali-demo-strings.h +++ b/shared/dali-demo-strings.h @@ -46,6 +46,7 @@ extern "C" #define DALI_DEMO_STR_TITLE_EMOJI_TEXT dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_EMOJI_TEXT") #define DALI_DEMO_STR_TITLE_FPP_GAME dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_FPP_GAME") #define DALI_DEMO_STR_TITLE_FLEXBOX_PLAYGROUND dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_FLEXBOX_PLAYGROUND") +#define DALI_DEMO_STR_TITLE_FOCUS_INTEGRATION dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_FOCUS_INTEGRATION") #define DALI_DEMO_STR_TITLE_IMAGE_FITTING_SAMPLING dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_IMAGE_FITTING_SAMPLING") #define DALI_DEMO_STR_TITLE_IMAGE_SCALING dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_IMAGE_SCALING") #define DALI_DEMO_STR_TITLE_IMAGE_VIEW dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_IMAGE_VIEW") @@ -105,6 +106,7 @@ extern "C" #define DALI_DEMO_STR_TITLE_EMOJI_TEXT "Emoji Text" #define DALI_DEMO_STR_TITLE_FPP_GAME "First Person Game" #define DALI_DEMO_STR_TITLE_FLEXBOX_PLAYGROUND "Flexbox Playground" +#define DALI_DEMO_STR_TITLE_FOCUS_INTEGRATION "Focus Integration" #define DALI_DEMO_STR_TITLE_IMAGE_FITTING_SAMPLING "Image Fitting and Sampling" #define DALI_DEMO_STR_TITLE_IMAGE_SCALING "Image Scaling Grid" #define DALI_DEMO_STR_TITLE_IMAGE_VIEW "Image View" -- libgit2 0.21.4