// EXTERNAL INCLUDES
#include <sys/stat.h>
+#include <boost/function.hpp>
#include <sstream>
// INTERNAL INCLUDES
extern bool SetPropertyFromNode( const TreeNode& node, Property::Value& value, const Replacement& replacements );
extern bool SetPropertyFromNode( const TreeNode& node, Property::Type type, Property::Value& value );
extern bool SetPropertyFromNode( const TreeNode& node, Property::Type type, Property::Value& value, const Replacement& replacements );
-extern Actor SetupSignalAction(ConnectionTracker* tracker, const TreeNode &root, const TreeNode &child, Actor actor);
-extern Actor SetupPropertyNotification(ConnectionTracker* tracker, const TreeNode &root, const TreeNode &child, Actor actor);
+extern Actor SetupSignalAction(ConnectionTracker* tracker, const TreeNode &root, const TreeNode &child, Actor actor, boost::function<void (void)> quitAction);
+extern Actor SetupPropertyNotification(ConnectionTracker* tracker, const TreeNode &root, const TreeNode &child, Actor actor, boost::function<void (void)> quitAction);
extern Actor SetupActor( const TreeNode& node, Actor& actor, const Replacement& constant );
#if defined(DEBUG_ENABLED)
return ss.str();
}
+#if defined(DEBUG_ENABLED)
std::string PropertyValueToString( const Property::Value& value )
{
return ret;
}
+#endif // DEBUG_ENABLED
/*
* Recursively collects all stylesin a node (An array of style names).
}
}
+struct QuitAction
+{
+public:
+ QuitAction( Builder& builder )
+ : mBuilder( builder )
+ {
+ }
+
+ void operator()(void)
+ {
+ mBuilder.EmitQuitSignal();
+ }
+
+private:
+ Builder& mBuilder;
+};
+
} // namespace anon
/*
// special field 'effect' references the shader effect instances
if(key == "effect")
{
- Actor actor = Actor::DownCast(handle);
- OptionalString s = constant.IsString( keyChild.second );
- if(actor && s)
+ RenderableActor actor = RenderableActor::DownCast(handle);
+ if( actor )
{
- ShaderEffect e = GetShaderEffect(*s, constant);
- actor.SetShaderEffect(e);
+ OptionalString str = constant.IsString( keyChild.second );
+ if( str )
+ {
+ ShaderEffect effect = GetShaderEffect( *str, constant );
+ actor.SetShaderEffect(effect);
+ }
}
else
{
if( Property::INVALID_INDEX == index )
{
- Actor actor = Actor::DownCast(propertyObject);
+ RenderableActor actor = RenderableActor::DownCast(handle);
if( actor )
{
if( ShaderEffect effect = actor.GetShaderEffect() )
SetupActor( node, actor, constant );
// add signals
- SetupSignalAction( mSlotDelegate.GetConnectionTracker(), root, node, actor );
-
- SetupPropertyNotification( mSlotDelegate.GetConnectionTracker(), root, node, actor );
+ QuitAction quitAction( *this );
+ SetupSignalAction( mSlotDelegate.GetConnectionTracker(), root, node, actor, quitAction );
+ SetupPropertyNotification( mSlotDelegate.GetConnectionTracker(), root, node, actor, quitAction );
}
}
else
}
}
- ApplyProperties( root, node, handle, replacements );
-
- if( actor)
+ if( actor )
{
// add children of all the styles
if( OptionalChild actors = IsChild( node, KEYNAME_ACTORS ) )
parent.Add( actor );
}
}
-
+ else
+ {
+ ApplyProperties( root, node, handle, replacements );
+ }
}
else
{
return baseHandle;
}
-
-ActorContainer Builder::GetTopLevelActors() const
-{
- // deprecated function.
- return ActorContainer();
-}
-
-Animation Builder::GetAnimation( const std::string &name ) const
-{
- // deprecated
- return Animation();
-}
-
void Builder::SetupTask( RenderTask& task, const TreeNode& node, const Replacement& constant )
{
const Stage& stage = Stage::GetCurrent();
if( SetPropertyFromNode( *image, Property::MAP, propertyMap, constant ) )
{
propertyMap.SetValue(KEYNAME_TYPE, Property::Value(std::string("FrameBufferImage")));
- ret = Dali::Scripting::NewImage( propertyMap );
+ ret = FrameBufferImage::DownCast( Dali::Scripting::NewImage( propertyMap ) );
mFrameBufferImageLut[ name ] = ret;
}
}
return ret;
}
-Font Builder::GetFont( const std::string& name ) const
-{
- // deprecated function.
- Font font;
- return font;
-}
-
-TextStyle Builder::GetTextStyle( const std::string& name ) const
-{
- // deprecated
- return TextStyle();
-}
-
-Image Builder::GetImage( const std::string& name) const
+Toolkit::Builder::Signal& Builder::QuitSignal()
{
- // deprecated function.
- return Image();
+ return mQuitSignal;
}
-Actor Builder::GetActor( const std::string &name ) const
+void Builder::EmitQuitSignal()
{
- // deprecated function.
- return Actor();
+ mQuitSignal.Emit();
}
void Builder::AddActors( Actor toActor )
}
else
{
- DALI_SCRIPT_WARNING("No styles section to create style '%s'\n", styleName.c_str());
return false;
}
}
return baseHandle;
}
+BaseHandle Builder::CreateFromJson( const std::string& json )
+{
+ BaseHandle ret;
+
+ // merge in new template, hoping no one else has one named '@temp@'
+ std::string newTemplate =
+ std::string("{\"templates\":{\"@temp@\":") + \
+ json + \
+ std::string("}}");
+
+ if( mParser.Parse(newTemplate) )
+ {
+ Replacement replacement( mReplacementMap );
+ ret = Create( "@temp@", replacement );
+ }
+
+ return ret;
+}
+
+bool Builder::ApplyFromJson( Handle& handle, const std::string& json )
+{
+ bool ret = false;
+
+ // merge new style, hoping no one else has one named '@temp@'
+ std::string newStyle =
+ std::string("{\"styles\":{\"@temp@\":") + \
+ json + \
+ std::string("}}");
+
+ if( mParser.Parse(newStyle) )
+ {
+ Replacement replacement( mReplacementMap );
+ ret = ApplyStyle( "@temp@", handle, replacement );
+ }
+
+ return ret;
+}
+
BaseHandle Builder::Create( const std::string& templateName )
{