X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ffeedback%2Ffeedback-style.cpp;h=a5ed3b10d740ac84ccfa59882dca11cda73e6522;hb=HEAD;hp=c1dca7ede6cc11f8864d86750c54ab5b8af7f5cf;hpb=4f1a814c47a80f11892a6a887cd98099a2eace09;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/feedback/feedback-style.cpp b/dali-toolkit/internal/feedback/feedback-style.cpp index c1dca7e..a5ed3b1 100644 --- a/dali-toolkit/internal/feedback/feedback-style.cpp +++ b/dali-toolkit/internal/feedback/feedback-style.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 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. @@ -19,35 +19,33 @@ #include // EXTERNAL INCLUDES +#include #include -#include +#include #include -#include // INTERNAL INCLUDES +#include #include #include -using std::string; - namespace // unnamed namespace { - #if defined(DEBUG_ENABLED) Debug::Filter* gLogFilter = Debug::Filter::New(Debug::General, false, "LOG_FEEDBACK"); #endif -const char* DEFAULT_FEEDBACK_THEME_PATH = DALI_STYLE_DIR"default-feedback-theme.json"; +const char* DEFAULT_FEEDBACK_THEME_FILE_NAME = "default-feedback-theme.json"; // Sets bool and string if the node has a child "name" void GetIfString(const Dali::Toolkit::TreeNode& node, const std::string& name, bool& exists, std::string& str) { const Dali::Toolkit::TreeNode* child = node.GetChild(name); - if( child && - Dali::Toolkit::TreeNode::STRING == child->GetType() ) + if(child && + Dali::Toolkit::TreeNode::STRING == child->GetType()) { exists = true; - str = child->GetString(); + str = child->GetString(); } } @@ -55,34 +53,31 @@ void GetIfString(const Dali::Toolkit::TreeNode& node, const std::string& name, b namespace Dali { - namespace Toolkit { - namespace Internal { - struct SignalFeedbackInfo { /** * Default constructor. */ SignalFeedbackInfo() - :mHasHapticFeedbackInfo(false), - mHasSoundFeedbackInfo(false) + : mHasHapticFeedbackInfo(false), + mHasSoundFeedbackInfo(false) { } - bool mHasHapticFeedbackInfo; - bool mHasSoundFeedbackInfo; - string mSignalName; - string mHapticFeedbackPattern; - string mSoundFeedbackPattern; - string mHapticFeedbackFile; - string mSoundFeedbackFile; + bool mHasHapticFeedbackInfo; + bool mHasSoundFeedbackInfo; + std::string mSignalName; + std::string mHapticFeedbackPattern; + std::string mSoundFeedbackPattern; + std::string mHapticFeedbackFile; + std::string mSoundFeedbackFile; }; -typedef std::vector SignalFeedbackInfoContainer; +typedef std::vector SignalFeedbackInfoContainer; typedef SignalFeedbackInfoContainer::const_iterator SignalFeedbackInfoConstIter; struct FeedbackStyleInfo @@ -94,31 +89,29 @@ struct FeedbackStyleInfo { } - string mTypeName; + std::string mTypeName; SignalFeedbackInfoContainer mSignalFeedbackInfoList; }; -static const FeedbackStyleInfo DEFAULT_FEEDBACK_STYLE_INFO; - FeedbackStyle::FeedbackStyle() -: mConnections( this ) { mFeedback = Dali::FeedbackPlayer::Get(); - string defaultTheme; + const std::string styleDirPath = AssetManager::GetDaliStylePath(); + const std::string defaultThemeFilePath = styleDirPath + DEFAULT_FEEDBACK_THEME_FILE_NAME; + + std::string defaultTheme; - if( mFeedback && mFeedback.LoadFile( DEFAULT_FEEDBACK_THEME_PATH, defaultTheme ) ) + if(mFeedback && mFeedback.LoadFile(defaultThemeFilePath, defaultTheme)) { - LoadTheme( defaultTheme ); - DALI_LOG_INFO( gLogFilter, Debug::Verbose, "ResourceLoader::LoadTheme(%s) - loaded %d bytes\n", - DEFAULT_FEEDBACK_THEME_PATH, defaultTheme.size() ); + LoadTheme(defaultTheme); + DALI_LOG_INFO(gLogFilter, Debug::Verbose, "ResourceLoader::LoadTheme(%s) - loaded %d bytes\n", defaultThemeFilePath.c_str(), defaultTheme.size()); } else { - DALI_LOG_ERROR("ResourceLoader::LoadTheme(%s) - failed to load\n", DEFAULT_FEEDBACK_THEME_PATH); + DALI_LOG_ERROR("ResourceLoader::LoadTheme(%s) - failed to load\n", defaultThemeFilePath.c_str()); } - } FeedbackStyle::~FeedbackStyle() @@ -127,49 +120,45 @@ FeedbackStyle::~FeedbackStyle() struct PlayFeedbackFromSignal { - PlayFeedbackFromSignal( FeedbackStyle& controller, const string& typeName, const string& signalName ) - : mController( controller ), - mTypeName( typeName ), - mSignalName( signalName ) + PlayFeedbackFromSignal(FeedbackStyle& controller, const std::string& typeName, const std::string& signalName) + : mController(controller), + mTypeName(typeName), + mSignalName(signalName) { } void operator()() { - mController.PlayFeedback( mTypeName, mSignalName ); + mController.PlayFeedback(mTypeName, mSignalName); } FeedbackStyle& mController; - string mTypeName; - string mSignalName; + std::string mTypeName; + std::string mSignalName; }; - -void FeedbackStyle::ObjectCreated( BaseHandle handle ) +void FeedbackStyle::ObjectCreated(BaseHandle handle) { - std::string typeName = handle.GetTypeName(); - - if( handle ) + if(handle) { - string type = handle.GetTypeName(); + const std::string& type = handle.GetTypeName(); - const FeedbackStyleInfo styleInfo = GetStyleInfo( type ); + const FeedbackStyleInfo styleInfo = GetStyleInfo(type); - for( SignalFeedbackInfoConstIter iter = styleInfo.mSignalFeedbackInfoList.begin(); iter != styleInfo.mSignalFeedbackInfoList.end(); ++iter ) + for(SignalFeedbackInfoConstIter iter = styleInfo.mSignalFeedbackInfoList.begin(); iter != styleInfo.mSignalFeedbackInfoList.end(); ++iter) { const SignalFeedbackInfo& info = *iter; - if( info.mHasHapticFeedbackInfo || info.mHasSoundFeedbackInfo ) + if(info.mHasHapticFeedbackInfo || info.mHasSoundFeedbackInfo) { - if( !info.mHapticFeedbackPattern.empty() || !info.mHapticFeedbackFile.empty() || - !info.mSoundFeedbackPattern.empty() || !info.mSoundFeedbackFile.empty() ) + if(!info.mHapticFeedbackPattern.empty() || !info.mHapticFeedbackFile.empty() || + !info.mSoundFeedbackPattern.empty() || !info.mSoundFeedbackFile.empty()) { - handle.ConnectSignal( this, - info.mSignalName, - PlayFeedbackFromSignal( *this, type, info.mSignalName ) ); + handle.ConnectSignal(this, + info.mSignalName, + PlayFeedbackFromSignal(*this, type, info.mSignalName)); - DALI_LOG_INFO( gLogFilter, Debug::Verbose, "FeedbackStyle::Set found Haptic pattern %s for Object type: %s, Signal Type: %s\n", - info.mHapticFeedbackPattern.c_str(), type.c_str(), info.mSignalName.c_str() ); + DALI_LOG_INFO(gLogFilter, Debug::Verbose, "FeedbackStyle::Set found Haptic pattern %s for Object type: %s, Signal Type: %s\n", info.mHapticFeedbackPattern.c_str(), type.c_str(), info.mSignalName.c_str()); } else { @@ -180,33 +169,37 @@ void FeedbackStyle::ObjectCreated( BaseHandle handle ) } } -const FeedbackStyleInfo& FeedbackStyle::GetStyleInfo( const string& type ) const +const FeedbackStyleInfo& FeedbackStyle::GetStyleInfo(const std::string& type) const { - std::map::const_iterator iter( mStyleInfoLut.find( type ) ); - if( iter != mStyleInfoLut.end() ) + std::map::const_iterator iter(mStyleInfoLut.find(type)); + if(iter != mStyleInfoLut.end()) { return iter->second; } else { + static const FeedbackStyleInfo DEFAULT_FEEDBACK_STYLE_INFO; return DEFAULT_FEEDBACK_STYLE_INFO; } } -void FeedbackStyle::StyleChanged( const std::string& userDefinedThemePath, Dali::StyleChange::Type styleChange ) +void FeedbackStyle::StyleChanged(const std::string& userDefinedThemePath, Dali::StyleChange::Type styleChange) { - if( StyleChange::THEME_CHANGE ) + if(styleChange == StyleChange::THEME_CHANGE) { - string userDefinedTheme; + std::string userDefinedTheme; - if( mFeedback && mFeedback.LoadFile( userDefinedThemePath, userDefinedTheme ) ) + if(mFeedback && mFeedback.LoadFile(userDefinedThemePath, userDefinedTheme)) { - if( !LoadTheme( userDefinedTheme ) ) + if(!LoadTheme(userDefinedTheme)) { DALI_LOG_ERROR("FeedbackStyle::StyleChanged() User defined theme failed to load! \n"); + const std::string styleDirPath = AssetManager::GetDaliStylePath(); + const std::string defaultThemeFilePath = styleDirPath + DEFAULT_FEEDBACK_THEME_FILE_NAME; + //If there is any problem is using the user defined theme, then fall back to default theme - if( !LoadTheme( DEFAULT_FEEDBACK_THEME_PATH ) ) + if(!LoadTheme(defaultThemeFilePath)) { //If the default theme fails, Then No luck! DALI_LOG_ERROR("FeedbackStyle::StyleChanged() Default theme failed to load! \n"); @@ -214,8 +207,7 @@ void FeedbackStyle::StyleChanged( const std::string& userDefinedThemePath, Dali: } else { - DALI_LOG_INFO( gLogFilter, Debug::Verbose, "ResourceLoader::LoadTheme(%s) - loaded %d bytes\n", - userDefinedThemePath.c_str(), userDefinedTheme.size() ); + DALI_LOG_INFO(gLogFilter, Debug::Verbose, "ResourceLoader::LoadTheme(%s) - loaded %d bytes\n", userDefinedThemePath.c_str(), userDefinedTheme.size()); } } else @@ -225,36 +217,36 @@ void FeedbackStyle::StyleChanged( const std::string& userDefinedThemePath, Dali: } } -bool FeedbackStyle::LoadTheme( const string& data ) +bool FeedbackStyle::LoadTheme(const std::string& data) { bool result = false; try { - LoadFromString( data ); + LoadFromString(data); result = true; } catch(...) { //Problem in user set theme, So fallback to use default theme. - DALI_LOG_ERROR( "FeedbackStyle::LoadTheme() Failed to load theme\n" ); + DALI_LOG_ERROR("FeedbackStyle::LoadTheme() Failed to load theme\n"); } return result; } -void FeedbackStyle::LoadFromString( const string& data ) +void FeedbackStyle::LoadFromString(const std::string& data) { - Toolkit::JsonParser parser = Toolkit::JsonParser::New(); - const Toolkit::TreeNode* root = NULL; + Toolkit::JsonParser parser = Toolkit::JsonParser::New(); + const Toolkit::TreeNode* root = NULL; - if( !parser.Parse( data ) ) + if(!parser.Parse(data)) { - DALI_LOG_WARNING( "JSON Parse Error:'%s'\n", parser.GetErrorDescription().c_str() ); - DALI_LOG_WARNING( "JSON Parse Line :'%d (%d)'\n", - parser.GetErrorLineNumber(), - parser.GetErrorColumn() ); + DALI_LOG_WARNING("JSON Parse Error:'%s'\n", parser.GetErrorDescription().c_str()); + DALI_LOG_WARNING("JSON Parse Line :'%d (%d)'\n", + parser.GetErrorLineNumber(), + parser.GetErrorColumn()); } else { @@ -267,21 +259,21 @@ void FeedbackStyle::LoadFromString( const string& data ) mStyleInfoLut.clear(); // Parse style - if( const TreeNode* node = root->GetChild("style") ) + if(const TreeNode* node = root->GetChild("style")) { Toolkit::TreeNode::ConstIterator iter = node->CBegin(); - Toolkit::TreeNode::ConstIterator end = node->CEnd(); - for( ; iter != end; ++iter ) + Toolkit::TreeNode::ConstIterator end = node->CEnd(); + for(; iter != end; ++iter) { - const char* key = (*iter).first; + const char* key = (*iter).first; FeedbackStyleInfo themeInfo; themeInfo.mTypeName = key; - if( const TreeNode* signals = (*iter).second.GetChild("signals") ) + if(const TreeNode* signals = (*iter).second.GetChild("signals")) { TreeNode::ConstIterator signalIter = signals->CBegin(); - TreeNode::ConstIterator signalEnd = signals->CEnd(); - for( ; signalIter != signalEnd; ++signalIter ) + TreeNode::ConstIterator signalEnd = signals->CEnd(); + for(; signalIter != signalEnd; ++signalIter) { SignalFeedbackInfo signalFeedbackInfo; @@ -289,25 +281,17 @@ void FeedbackStyle::LoadFromString( const string& data ) DALI_ASSERT_ALWAYS(type && TreeNode::STRING == type->GetType() && "Signal must have a type"); signalFeedbackInfo.mSignalName = type->GetString(); - GetIfString( (*signalIter).second, "haptic-feedback-pattern", - signalFeedbackInfo.mHasHapticFeedbackInfo, - signalFeedbackInfo.mHapticFeedbackPattern ); + GetIfString((*signalIter).second, "hapticFeedbackPattern", signalFeedbackInfo.mHasHapticFeedbackInfo, signalFeedbackInfo.mHapticFeedbackPattern); - GetIfString( (*signalIter).second, "haptic-feedback-file", - signalFeedbackInfo.mHasHapticFeedbackInfo, - signalFeedbackInfo.mHapticFeedbackFile ); + GetIfString((*signalIter).second, "hapticFeedbackFile", signalFeedbackInfo.mHasHapticFeedbackInfo, signalFeedbackInfo.mHapticFeedbackFile); - GetIfString( (*signalIter).second, "sound-feedback-pattern", - signalFeedbackInfo.mHasSoundFeedbackInfo, - signalFeedbackInfo.mSoundFeedbackPattern ); + GetIfString((*signalIter).second, "soundFeedbackPattern", signalFeedbackInfo.mHasSoundFeedbackInfo, signalFeedbackInfo.mSoundFeedbackPattern); - GetIfString( (*signalIter).second, "haptic-feedback-file", - signalFeedbackInfo.mHasSoundFeedbackInfo, - signalFeedbackInfo.mSoundFeedbackFile ); + GetIfString((*signalIter).second, "hapticFeedbackFile", signalFeedbackInfo.mHasSoundFeedbackInfo, signalFeedbackInfo.mSoundFeedbackFile); - if( signalFeedbackInfo.mHasHapticFeedbackInfo || signalFeedbackInfo.mHasSoundFeedbackInfo ) + if(signalFeedbackInfo.mHasHapticFeedbackInfo || signalFeedbackInfo.mHasSoundFeedbackInfo) { - AddSignalInfo( themeInfo, signalFeedbackInfo ); + AddSignalInfo(themeInfo, std::move(signalFeedbackInfo)); } } } @@ -315,20 +299,20 @@ void FeedbackStyle::LoadFromString( const string& data ) mStyleInfoLut[key] = themeInfo; } // for styles - } // if(style) - } // if(root) + } // if(style) + } // if(root) } // LoadFromString() -void FeedbackStyle::AddSignalInfo( FeedbackStyleInfo& styleInfo, SignalFeedbackInfo signalInfo ) +void FeedbackStyle::AddSignalInfo(FeedbackStyleInfo& styleInfo, SignalFeedbackInfo&& signalInfo) { - bool updated = false; - std::vector::iterator iter; + bool updated = false; + SignalFeedbackInfoContainer::iterator iter; // If info exists for the signal then update it, else add new - for( iter = styleInfo.mSignalFeedbackInfoList.begin(); iter != styleInfo.mSignalFeedbackInfoList.end(); ++iter ) + for(iter = styleInfo.mSignalFeedbackInfoList.begin(); iter != styleInfo.mSignalFeedbackInfoList.end(); ++iter) { - if( (*iter).mSignalName == signalInfo.mSignalName ) + if((*iter).mSignalName == signalInfo.mSignalName) { (*iter).mHasHapticFeedbackInfo = signalInfo.mHasHapticFeedbackInfo; (*iter).mHapticFeedbackPattern = signalInfo.mHapticFeedbackPattern; @@ -342,15 +326,15 @@ void FeedbackStyle::AddSignalInfo( FeedbackStyleInfo& styleInfo, SignalFeedbackI } } - if( !updated ) + if(!updated) { - styleInfo.mSignalFeedbackInfoList.push_back( signalInfo ); + styleInfo.mSignalFeedbackInfoList.emplace_back(std::move(signalInfo)); } } -void FeedbackStyle::PlayFeedback(const string& type, const string& signalName) +void FeedbackStyle::PlayFeedback(const std::string& type, const std::string& signalName) { - const FeedbackStyleInfo styleInfo = GetStyleInfo(type); + const FeedbackStyleInfo styleInfo = GetStyleInfo(type); SignalFeedbackInfoConstIter iter; for(iter = styleInfo.mSignalFeedbackInfoList.begin(); iter != styleInfo.mSignalFeedbackInfoList.end(); ++iter) @@ -363,14 +347,13 @@ void FeedbackStyle::PlayFeedback(const string& type, const string& signalName) { if(!info.mHapticFeedbackPattern.empty()) { - DALI_LOG_INFO( gLogFilter, Debug::Verbose, "FeedbackStyle::PlayFeedback Playing Haptic effect: Object type: %s, Signal type: %s, pattern type: %s\n", - type.c_str(), signalName.c_str(), info.mHapticFeedbackPattern.c_str()); + DALI_LOG_INFO(gLogFilter, Debug::Verbose, "FeedbackStyle::PlayFeedback Playing Haptic effect: Object type: %s, Signal type: %s, pattern type: %s\n", type.c_str(), signalName.c_str(), info.mHapticFeedbackPattern.c_str()); - mFeedback.PlayFeedbackPattern( FEEDBACK_TYPE_VIBRATION, GetFeedbackPattern(info.mHapticFeedbackPattern) ); + mFeedback.PlayFeedbackPattern(FEEDBACK_TYPE_VIBRATION, GetFeedbackPattern(info.mHapticFeedbackPattern)); } else if(!info.mHapticFeedbackFile.empty()) { - mFeedback.PlayFile( info.mHapticFeedbackFile ); + mFeedback.PlayFile(info.mHapticFeedbackFile); } } @@ -378,14 +361,13 @@ void FeedbackStyle::PlayFeedback(const string& type, const string& signalName) { if(!info.mSoundFeedbackPattern.empty()) { - DALI_LOG_INFO( gLogFilter, Debug::Verbose, "FeedbackStyle::PlayFeedback Playing Sound effect: Object type: %s, Signal type: %s, pattern type: %s\n", - type.c_str(), signalName.c_str(), info.mHapticFeedbackPattern.c_str()); + DALI_LOG_INFO(gLogFilter, Debug::Verbose, "FeedbackStyle::PlayFeedback Playing Sound effect: Object type: %s, Signal type: %s, pattern type: %s\n", type.c_str(), signalName.c_str(), info.mHapticFeedbackPattern.c_str()); - mFeedback.PlayFeedbackPattern( FEEDBACK_TYPE_SOUND, GetFeedbackPattern(info.mSoundFeedbackPattern) ); + mFeedback.PlayFeedbackPattern(FEEDBACK_TYPE_SOUND, GetFeedbackPattern(info.mSoundFeedbackPattern)); } else if(!info.mSoundFeedbackFile.empty()) { - mFeedback.PlaySound( info.mSoundFeedbackFile ); + mFeedback.PlaySound(info.mSoundFeedbackFile); } } @@ -394,9 +376,9 @@ void FeedbackStyle::PlayFeedback(const string& type, const string& signalName) } } -FeedbackPattern FeedbackStyle::GetFeedbackPattern( const string &pattern ) +FeedbackPattern FeedbackStyle::GetFeedbackPattern(const std::string& pattern) { - if( 0 == mFeedbackPatternLut.size() ) + if(0 == mFeedbackPatternLut.size()) { mFeedbackPatternLut["FEEDBACK_PATTERN_NONE"] = Dali::FEEDBACK_PATTERN_NONE; mFeedbackPatternLut["FEEDBACK_PATTERN_TAP"] = Dali::FEEDBACK_PATTERN_TAP; @@ -450,21 +432,21 @@ FeedbackPattern FeedbackStyle::GetFeedbackPattern( const string &pattern ) mFeedbackPatternLut["FEEDBACK_PATTERN_SLIDER_SWEEP"] = Dali::FEEDBACK_PATTERN_SLIDER_SWEEP; } - std::map::const_iterator iter( mFeedbackPatternLut.find( pattern ) ); + std::map::const_iterator iter(mFeedbackPatternLut.find(pattern)); - if( iter != mFeedbackPatternLut.end() ) + if(iter != mFeedbackPatternLut.end()) { return iter->second; } else { - DALI_LOG_ERROR( "Unknown feedback pattern type: %s, So Defaulting to FEEDBACK_PATTERN_NONE!\n" ); + DALI_LOG_ERROR("Unknown feedback pattern type: %s, So Defaulting to FEEDBACK_PATTERN_NONE!\n"); return Dali::FEEDBACK_PATTERN_NONE; } } -} // namespace Toolkit - } // namespace Internal +} // namespace Toolkit + } // namespace Dali