// CLASS HEADER
#include "style-manager-impl.h"
-// INTERNAL INCLUDES
-#include <dali-toolkit/public-api/controls/control.h>
-#include <dali-toolkit/public-api/controls/control-impl.h>
-#include <dali-toolkit/public-api/styling/style-manager.h>
-#include <dali-toolkit/internal/styling/util.h>
-#include <dali/integration-api/debug.h>
-
// EXTERNAL INCLUDES
#include <fstream>
#include <iostream>
#include <sstream>
+#include <dali/public-api/adaptor-framework/singleton-service.h>
+#include <dali/public-api/object/type-registry.h>
+#include <dali/integration-api/debug.h>
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/controls/control.h>
+#include <dali-toolkit/public-api/controls/control-impl.h>
+#include <dali-toolkit/public-api/styling/style-manager.h>
namespace
{
}
TypeRegistration STYLE_MANAGER_TYPE( typeid(Dali::Toolkit::StyleManager), typeid(Dali::BaseHandle), Create, true /* Create instance at startup */ );
-/**
- * Merge two maps into one
- */
-void MergeMaps( const PropertyValueMap& a, const PropertyValueMap& b, PropertyValueMap& out )
-{
- out = a;
- for( PropertyValueMap::const_iterator it = b.begin(), itEnd = b.end(); it != itEnd; ++it )
- {
- out[ it->first ] = it->second;
- }
-}
-
} // namespace
Toolkit::StyleManager StyleManager::Get()
}
StyleManager::StyleManager()
- : mOrientationDegrees( 0 ), // Portrait
- mSetThemeConnection( false )
+ : mOrientationDegrees( 0 ) // Portrait
{
// Add theme builder constants
mThemeBuilderConstants[ PACKAGE_PATH_KEY ] = DEFAULT_PACKAGE_PATH;
StyleManager::~StyleManager()
{
- // Disconnect from signal
- SetOrientation( Orientation() );
}
void StyleManager::SetOrientationValue( int orientation )
{
- mOrientationDegrees = orientation;
-
- Util::ConnectEventProcessingFinishedSignal();
- mSetThemeConnection = true;
+ if( orientation != mOrientationDegrees )
+ {
+ mOrientationDegrees = orientation;
+ // TODO: if orientation changed, apply the new style to all controls
+ // dont want to really do the whole load from file again if the bundle contains both portrait & landscape
+ SetTheme();
+ }
}
int StyleManager::GetOrientationValue()
bool StyleManager::GetStyleConstant( const std::string& key, Property::Value& valueOut )
{
- Toolkit::PropertyValueMap::iterator valueIt = mStyleBuilderConstants.find( key );
- if( valueIt != mStyleBuilderConstants.end() )
+ Property::Value* value = mStyleBuilderConstants.Find( key );
+ if( value )
{
- valueOut = valueIt->second;
+ valueOut = *value;
return true;
}
void StyleManager::OnOrientationChanged( Orientation orientation )
{
mOrientation = orientation;
-
- if( mOrientation )
- {
- Util::ConnectEventProcessingFinishedSignal();
- mSetThemeConnection = true;
- }
+ // TODO: if orientation changed, apply the new style to all controls
+ // dont want to really do the whole load from file again if the bundle contains both portrait & landscape
+ SetTheme();
}
-Toolkit::Builder StyleManager::CreateBuilder( const PropertyValueMap& constants )
+Toolkit::Builder StyleManager::CreateBuilder( const Property::Map& constants )
{
Toolkit::Builder builder = Toolkit::Builder::New();
builder.AddConstants( constants );
else
{
// Merge theme and style constants
- PropertyValueMap constants;
- MergeMaps( mThemeBuilderConstants, mStyleBuilderConstants, constants );
+ Property::Map constants( mThemeBuilderConstants );
+ constants.Merge( mStyleBuilderConstants );
// Create it
builder = CreateBuilder( constants );
{
mThemeFile = themeFile;
- Util::ConnectEventProcessingFinishedSignal();
- mSetThemeConnection = true;
+ // need to do style change synchronously as app might create a UI control on the next line
+ SetTheme();
}
void StyleManager::RequestDefaultTheme()
RequestThemeChange( DEFAULT_THEME );
}
-bool StyleManager::IsThemeRequestPending()
-{
- return mSetThemeConnection;
-}
-
void StyleManager::SetTheme()
{
mThemeBuilder = CreateBuilder( mThemeBuilderConstants );
LoadJSON( mThemeBuilder, mThemeFile );
- mSetThemeConnection = false;
-
StyleChange change;
change.themeChange = true;
mStyleChangeSignal.Emit( Toolkit::StyleManager::Get(), change );