X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=examples%2Fbuilder%2Fexamples.cpp;h=e0222277b7126c576707f8867bfae937e11de848;hb=5a901bc3b6c16d1930d745708d158efb701b1de4;hp=98bf5a61c46544d84978350f8df769ab8cd9364e;hpb=d6ad9aff913e3d14eb832c105d29cd179e40ae60;p=platform%2Fcore%2Fuifw%2Fdali-demo.git diff --git a/examples/builder/examples.cpp b/examples/builder/examples.cpp index 98bf5a6..e022227 100644 --- a/examples/builder/examples.cpp +++ b/examples/builder/examples.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 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. @@ -20,11 +20,15 @@ // //------------------------------------------------------------------------------ -#include "dali.h" +#include #include -#include -#include -#include +#include +#include +#include +#include +#include +#include + #include #include #include @@ -36,8 +40,10 @@ #include "sys/stat.h" #include +#include #include +#include #include "shared/view.h" #define TOKEN_STRING(x) #x @@ -49,8 +55,9 @@ namespace { const char* BACKGROUND_IMAGE( "" ); -const char* TOOLBAR_IMAGE( DALI_IMAGE_DIR "top-bar.png" ); -const char* EDIT_IMAGE( DALI_IMAGE_DIR "icon-change.png" ); +const char* TOOLBAR_IMAGE( DEMO_IMAGE_DIR "top-bar.png" ); +const char* EDIT_IMAGE( DEMO_IMAGE_DIR "icon-change.png" ); +const char* EDIT_IMAGE_SELECTED( DEMO_IMAGE_DIR "icon-change-selected.png" ); std::string USER_DIRECTORY; @@ -59,9 +66,9 @@ std::string JSON_BROKEN(" \ 'stage': \ [ \ { \ - 'type':'TextView', \ + 'type':'TextLabel', \ 'size': [50,50,1], \ - 'parent-origin': 'CENTER', \ + 'parentOrigin': 'CENTER', \ 'text':'COULD NOT LOAD JSON FILE' \ } \ ] \ @@ -80,9 +87,14 @@ std::string ReplaceQuotes(const std::string &single_quoted) std::string GetFileContents(const std::string &fn) { - std::ifstream t(fn.c_str()); - return std::string((std::istreambuf_iterator(t)), - std::istreambuf_iterator()); + std::streampos bufferSize = 0; + Dali::Vector fileBuffer; + if( !Dali::FileLoader::ReadFile( fn, bufferSize, fileBuffer, FileLoader::FileType::BINARY ) ) + { + return std::string(); + } + + return std::string( &fileBuffer[0], bufferSize ); }; typedef std::vector FileList; @@ -133,6 +145,7 @@ const std::string ShortName( const std::string& name ) if( pos != std::string::npos ) { + pos++; return name.substr( pos ); } else @@ -141,11 +154,6 @@ const std::string ShortName( const std::string& name ) } } -static Vector3 SetItemSize(unsigned int numberOfColumns, float layoutWidth, float sideMargin, float columnSpacing) -{ - return Vector3(layoutWidth, 50, 1); -} - //------------------------------------------------------------------------------ // // @@ -241,59 +249,41 @@ public: void SetTitle(const std::string& title) { - // TODO - } - - bool OnToolSelectLayout( Toolkit::Button button ) - { - bool on = mItemView.IsVisible(); - - if( on ) - { - LeaveSelection(); - } - else + if(!mTitleActor) { - EnterSelection(); + mTitleActor = DemoHelper::CreateToolBarLabel( "" ); + // Add title to the tool bar. + mToolBar.AddControl( mTitleActor, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarTitlePercentage, Alignment::HorizontalCenter ); } - return true; + mTitleActor.SetProperty( TextLabel::Property::TEXT, title ); } - void LeaveSelection() + bool OnBackButtonPressed( Toolkit::Button button ) { - + OnQuitOrBack(); + return true; } - void EnterSelection() + void SetUpItemView() { Stage stage = Stage::GetCurrent(); mTapDetector = TapGestureDetector::New(); mTapDetector.DetectedSignal().Connect( this, &ExampleApp::OnTap ); - if( mItemView ) - { - stage.Remove( mItemView ); - } - mFiles.clear(); mItemView = ItemView::New(*this); - stage.Add( mItemView ); + mItemView.SetParentOrigin(ParentOrigin::CENTER); mItemView.SetAnchorPoint(AnchorPoint::CENTER); - mGridLayout = GridLayout::New(); - mGridLayout->SetNumberOfColumns(1); + mLayout = DefaultItemLayout::New( DefaultItemLayout::LIST ); - mGridLayout->SetItemSizeFunction(SetItemSize); + mLayout->SetItemSize( Vector3( stage.GetSize().width, 50, 1 ) ); - mGridLayout->SetTopMargin(DemoHelper::DEFAULT_VIEW_STYLE.mToolBarHeight); + mItemView.AddLayout( *mLayout ); - mItemView.AddLayout(*mGridLayout); - - Vector3 size(stage.GetSize()); - mItemView.ActivateLayout(0, size, 0.0f/*immediate*/); mItemView.SetKeyboardFocusable( true ); mFiles.clear(); @@ -305,7 +295,7 @@ public: } else { - DirectoryFilesByType( DALI_SCRIPT_DIR, "json", files ); + DirectoryFilesByType( DEMO_SCRIPT_DIR, "json", files ); } std::sort(files.begin(), files.end()); @@ -353,28 +343,11 @@ public: } } - // Display item view on the stage - stage.Add( mItemView ); - - mItemView.SetVisible( true ); - mBuilderLayer.SetVisible( false ); - - SetTitle("Select"); - - // Itemview renderes the previous items unless its scrolled. Not sure why at the moment so we force a scroll - mItemView.ScrollToItem(0, 0); - + // Activate the layout + Vector3 size(stage.GetSize()); + mItemView.ActivateLayout(0, size, 0.0f/*immediate*/); } - void ExitSelection() - { - mTapDetector.Reset(); - - mItemView.SetVisible( false ); - mBuilderLayer.SetVisible( true ); - - SetTitle("View"); - } void OnTap( Actor actor, const TapGesture& tap ) { @@ -385,7 +358,14 @@ public: Actor MenuItem(const std::string& text) { - return Actor(); + TextLabel label = TextLabel::New( ShortName( text ) ); + label.SetStyleName( "BuilderLabel" ); + label.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH ); + + // Hook up tap detector + mTapDetector.Attach( label ); + + return label; } bool OnTimer() @@ -403,12 +383,12 @@ public: Stage stage = Stage::GetCurrent(); builder = Builder::New(); - builder.QuitSignal().Connect( this, &ExampleApp::OnBuilderQuit ); + builder.QuitSignal().Connect( this, &ExampleApp::OnQuitOrBack ); Property::Map defaultDirs; - defaultDirs[ TOKEN_STRING(DALI_IMAGE_DIR) ] = DALI_IMAGE_DIR; - defaultDirs[ TOKEN_STRING(DALI_MODEL_DIR) ] = DALI_MODEL_DIR; - defaultDirs[ TOKEN_STRING(DALI_SCRIPT_DIR) ] = DALI_SCRIPT_DIR; + defaultDirs[ TOKEN_STRING(DEMO_IMAGE_DIR) ] = DEMO_IMAGE_DIR; + defaultDirs[ TOKEN_STRING(DEMO_MODEL_DIR) ] = DEMO_MODEL_DIR; + defaultDirs[ TOKEN_STRING(DEMO_SCRIPT_DIR) ] = DEMO_SCRIPT_DIR; builder.AddConstants( defaultDirs ); @@ -454,7 +434,6 @@ public: } builder.AddActors( layer ); - } @@ -472,17 +451,13 @@ public: { ReloadJsonFile( name, mBuilder, mBuilderLayer ); - // do this here as GetCurrentSize() - mBuilderLayer.SetParentOrigin(ParentOrigin::CENTER); - mBuilderLayer.SetAnchorPoint(AnchorPoint::CENTER); + mBuilderLayer.SetParentOrigin(ParentOrigin::BOTTOM_CENTER); + mBuilderLayer.SetAnchorPoint(AnchorPoint::BOTTOM_CENTER); Dali::Vector3 size = Stage::GetCurrent().GetRootLayer().GetCurrentSize(); size.y -= DemoHelper::DEFAULT_VIEW_STYLE.mToolBarHeight; mBuilderLayer.SetSize( size ); - mBuilderLayer.LowerToBottom(); - Stage::GetCurrent().GetRootLayer().RaiseToTop(); - - ExitSelection(); + mNavigationView.Push( mBuilderLayer ); } void Create(Application& app) @@ -498,20 +473,43 @@ public: TOOLBAR_IMAGE, "" ); - SetTitle("Builder"); + SetTitle("Select Example"); mBuilderLayer = Layer::New(); - stage.GetRootLayer().Add(mBuilderLayer); - // Create an edit mode button. (left of toolbar) - Toolkit::PushButton editButton = Toolkit::PushButton::New(); - editButton.SetBackgroundImage( ResourceImage::New( EDIT_IMAGE ) ); - editButton.ClickedSignal().Connect( this, &ExampleApp::OnToolSelectLayout); - editButton.SetLeaveRequired( true ); - mToolBar.AddControl( editButton, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, Toolkit::Alignment::HorizontalLeft, DemoHelper::DEFAULT_MODE_SWITCH_PADDING ); - - EnterSelection(); + Toolkit::PushButton backButton = Toolkit::PushButton::New(); + backButton.SetProperty( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL, EDIT_IMAGE ); + backButton.SetProperty( Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL, EDIT_IMAGE_SELECTED ); + backButton.ClickedSignal().Connect( this, &ExampleApp::OnBackButtonPressed); + backButton.SetLeaveRequired( true ); + mToolBar.AddControl( backButton, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, Toolkit::Alignment::HorizontalLeft, DemoHelper::DEFAULT_MODE_SWITCH_PADDING ); + + mNavigationView = Toolkit::NavigationView::New(); + mNavigationView.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); + mNavigationView.SetAnchorPoint( AnchorPoint::TOP_LEFT); + + stage.Add( mNavigationView ); + + // Set up the background gradient. + Property::Array stopOffsets; + stopOffsets.PushBack( 0.0f ); + stopOffsets.PushBack( 1.0f ); + Property::Array stopColors; + stopColors.PushBack( Color::WHITE ); + stopColors.PushBack( Vector4( 0.45f, 0.70f, 0.80f, 1.0f ) ); // Medium bright, pastel blue + const float percentageStageHeight = stage.GetSize().height * 0.6f; + + mNavigationView.SetProperty( Toolkit::Control::Property::BACKGROUND, Dali::Property::Map() + .Add( Toolkit::Visual::Property::TYPE, Dali::Toolkit::Visual::GRADIENT ) + .Add( Toolkit::GradientVisual::Property::STOP_OFFSET, stopOffsets ) + .Add( Toolkit::GradientVisual::Property::STOP_COLOR, stopColors ) + .Add( Toolkit::GradientVisual::Property::START_POSITION, Vector2( 0.0f, -percentageStageHeight ) ) + .Add( Toolkit::GradientVisual::Property::END_POSITION, Vector2( 0.0f, percentageStageHeight ) ) + .Add( Toolkit::GradientVisual::Property::UNITS, Toolkit::GradientVisual::Units::USER_SPACE ) ); + + SetUpItemView(); + mNavigationView.Push( mItemView ); mTimer = Timer::New( 500 ); // ms mTimer.TickSignal().Connect( this, &ExampleApp::OnTimer); @@ -539,14 +537,7 @@ public: { if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) ) { - if ( mItemView.IsVisible() ) - { - mApp.Quit(); - } - else - { - EnterSelection(); - } + OnQuitOrBack(); } } } @@ -554,33 +545,32 @@ public: /** * Event handler when Builder wants to quit (we only want to close the shown json unless we're at the top-level) */ - void OnBuilderQuit() + void OnQuitOrBack() { - if ( mItemView.IsVisible() ) + if ( mItemView.OnStage() ) { mApp.Quit(); } else { - EnterSelection(); + mNavigationView.Pop(); } } private: Application& mApp; - GridLayoutPtr mGridLayout; + ItemLayoutPtr mLayout; ItemView mItemView; + Toolkit::NavigationView mNavigationView; - Toolkit::View mView; - unsigned int mOrientation; + Toolkit::Control mView; Toolkit::ToolBar mToolBar; + TextLabel mTitleActor; Layer mBuilderLayer; - Toolkit::Popup mMenu; - TapGestureDetector mTapDetector; // builder @@ -590,8 +580,6 @@ private: FileWatcher mFileWatcher; Timer mTimer; - - }; //------------------------------------------------------------------------------ @@ -599,7 +587,7 @@ private: // // //------------------------------------------------------------------------------ -int main(int argc, char **argv) +int DALI_EXPORT_API main(int argc, char **argv) { if(argc > 2) { @@ -609,7 +597,7 @@ int main(int argc, char **argv) } } - Application app = Application::New(&argc, &argv); + Application app = Application::New(&argc, &argv, DEMO_THEME_PATH); ExampleApp dali_app(app);