-//
-// Copyright (c) 2014 Samsung Electronics Co., Ltd.
-//
-// Licensed under the Flora License, Version 1.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://floralicense.org/license/
-//
-// 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.
-//
+/*
+ * Copyright (c) 2014 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 "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
{
{
BaseHandle handle = StyleManager::Get();
- if ( !handle && Adaptor::IsAvailable() )
+ if ( !handle )
{
- Toolkit::StyleManager manager = Toolkit::StyleManager( new Internal::StyleManager() );
- Adaptor::Get().RegisterSingleton( typeid( manager ), manager );
- handle = manager;
+ SingletonService singletonService( SingletonService::Get() );
+ if ( singletonService )
+ {
+ Toolkit::StyleManager manager = Toolkit::StyleManager( new Internal::StyleManager() );
+ singletonService.Register( typeid( manager ), manager );
+ handle = manager;
+ }
}
return handle;
}
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()
{
Toolkit::StyleManager manager;
- if ( Adaptor::IsAvailable() )
+ SingletonService singletonService( SingletonService::Get() );
+ if ( singletonService )
{
// Check whether the style manager is already created
- Dali::BaseHandle handle = Dali::Adaptor::Get().GetSingleton( typeid( Toolkit::StyleManager ) );
+ Dali::BaseHandle handle = singletonService.GetSingleton( typeid( Toolkit::StyleManager ) );
if( handle )
{
// If so, downcast the handle of singleton
}
StyleManager::StyleManager()
- : mOrientationDegrees( 0 ), // Portrait
- mSetThemeConnection( false )
+ : mOrientationDegrees( 0 ) // Portrait
{
// Add theme builder constants
mThemeBuilderConstants[ PACKAGE_PATH_KEY ] = DEFAULT_PACKAGE_PATH;
RequestDefaultTheme();
- if( Adaptor::IsAvailable() )
+ StyleMonitor styleMonitor( StyleMonitor::Get() );
+ if( styleMonitor )
{
- StyleMonitor::Get().StyleChangeSignal().Connect( this, &StyleManager::StyleMonitorChange );
+ styleMonitor.StyleChangeSignal().Connect( this, &StyleManager::StyleMonitorChange );
}
}
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 );
+ if ( LoadJSON( mThemeBuilder, mThemeFile ) )
+ {
+ StyleChange change;
+ change.themeChange = true;
+ mStyleChangeSignal.Emit( Toolkit::StyleManager::Get(), change );
+ }
+ else
+ {
+ mThemeBuilder.Reset();
+ }
}
Toolkit::Builder StyleManager::FindCachedBuilder( const std::string& key )