Fix prevent issues
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / builder / builder-set-property.cpp
index e02467a..c78e19c 100644 (file)
@@ -1,24 +1,32 @@
-//
-// 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) 2015 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.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#include <sstream>
+#include <dali/public-api/object/property-array.h>
+#include <dali/public-api/object/property-map.h>
+#include <dali/devel-api/adaptor-framework/color-controller.h>
 
 // INTERNAL INCLUDES
 #include <dali-toolkit/internal/builder/builder-impl.h>
 #include <dali-toolkit/internal/builder/builder-get-is.inl.h>
 #include <dali-toolkit/internal/builder/replacement.h>
 
+
 namespace Dali
 {
 
@@ -200,18 +208,6 @@ bool SetPropertyFromNode( const TreeNode& node, Property::Type type, Property::V
       }
       break;
     }
-    case Property::UNSIGNED_INTEGER:
-    {
-      if( OptionalInteger v = replacer.IsInteger(node) )
-      {
-        if( *v >= 0 ) // with a loss of resolution....
-        {
-          value = *v;
-          done = true;
-        }
-      }
-      break;
-    }
     case Property::VECTOR2:
     {
       if( OptionalVector2 v = replacer.IsVector2(node) )
@@ -244,6 +240,12 @@ bool SetPropertyFromNode( const TreeNode& node, Property::Type type, Property::V
           value = HexStringToVector4( &(*s)[1] );
           done = true;
         }
+        else if( Dali::ColorController::Get() )
+        {
+          Vector4 color;
+          done = Dali::ColorController::Get().RetrieveColor( *s, color );
+          value = color;
+        }
       }
       else if( TreeNode::OBJECT == node.GetType() )
       {
@@ -340,24 +342,30 @@ bool SetPropertyFromNode( const TreeNode& node, Property::Type type, Property::V
       else if(node.Size())
       {
         value = Property::Value(Property::ARRAY);
+        Property::Array* array = value.GetArray();
+
         unsigned int i = 0;
         TreeNode::ConstIterator iter(node.CBegin());
-        for( ; i < node.Size(); ++i, ++iter)
+
+        if( array )
         {
-          Property::Value v;
-          if( SetPropertyFromNode( (*iter).second, v, replacer ) )
+          for( ; i < node.Size(); ++i, ++iter)
           {
-            value.AppendItem(v);
+            Property::Value childValue;
+            if( SetPropertyFromNode( (*iter).second, childValue, replacer ) )
+            {
+              array->PushBack( childValue );
+            }
           }
-        }
 
-        if( value.GetSize() == static_cast<int>(node.Size()) )
-        {
-          done = true;
-        }
-        else
-        {
-          done = false;
+          if( array->Count() == node.Size() )
+          {
+            done = true;
+          }
+          else
+          {
+            done = false;
+          }
         }
       }
       break;
@@ -371,29 +379,34 @@ bool SetPropertyFromNode( const TreeNode& node, Property::Type type, Property::V
       else if(node.Size())
       {
         value = Property::Value(Property::MAP);
+        Property::Map* map = value.GetMap();
+
         unsigned int i = 0;
         TreeNode::ConstIterator iter(node.CBegin());
-        for( ; i < node.Size(); ++i, ++iter)
+
+        if( map )
         {
-          Property::Value v;
-          if( SetPropertyFromNode( (*iter).second, v, replacer ) )
+          for( ; i < node.Size(); ++i, ++iter)
           {
-            value.SetValue( (*iter).first, v );
+            Property::Value childValue;
+            if( SetPropertyFromNode( (*iter).second, childValue, replacer ) )
+            {
+              map->Insert( (*iter).first, childValue );
+            }
           }
-        }
 
-        if( value.GetSize() == static_cast<int>(node.Size()) )
-        {
-          done = true;
-        }
-        else
-        {
-          done = false;
+          if( map->Count() == node.Size() )
+          {
+            done = true;
+          }
+          else
+          {
+            done = false;
+          }
         }
       }
       break;
     }
-    case Property::TYPE_COUNT:
     case Property::NONE:
     {
       break;
@@ -478,14 +491,18 @@ bool SetPropertyFromNode( const TreeNode& node, Property::Value& value,
         else
         {
           value = Property::Value(Property::ARRAY);
-          Property::Value v;
+          Property::Array* array = value.GetArray();
 
-          for(TreeConstIter iter = node.CBegin(); iter != node.CEnd(); ++iter)
+          if( array )
           {
-            if( SetPropertyFromNode( (*iter).second, v, replacer ) )
+            for(TreeConstIter iter = node.CBegin(); iter != node.CEnd(); ++iter)
             {
-              value.AppendItem(v);
-              done = true;
+              Property::Value childValue;
+              if( SetPropertyFromNode( (*iter).second, childValue, replacer ) )
+              {
+                array->PushBack( childValue );
+                done = true;
+              }
             }
           }
         }
@@ -502,26 +519,36 @@ bool SetPropertyFromNode( const TreeNode& node, Property::Value& value,
         if( ((*iter).first) == 0 )
         {
           value = Property::Value(Property::ARRAY);
-          Property::Value v;
-          for(unsigned int i = 0; i < node.Size(); ++i, ++iter)
+          Property::Array* array = value.GetArray();
+
+          if( array )
           {
-            if( SetPropertyFromNode( (*iter).second, v, replacer ) )
+            for(unsigned int i = 0; i < node.Size(); ++i, ++iter)
             {
-              value.AppendItem(v);
-              done = true;
+              Property::Value childValue;
+              if( SetPropertyFromNode( (*iter).second, childValue, replacer ) )
+              {
+                array->PushBack( childValue );
+                done = true;
+              }
             }
           }
         }
         else
         {
           value = Property::Value(Property::MAP);
-          Property::Value v;
-          for(unsigned int i = 0; i < node.Size(); ++i, ++iter)
+          Property::Map* map = value.GetMap();
+
+          if( map )
           {
-            if( SetPropertyFromNode( (*iter).second, v, replacer ) )
+            for(unsigned int i = 0; i < node.Size(); ++i, ++iter)
             {
-              value.SetValue((*iter).first, v);
-              done = true;
+              Property::Value childValue;
+              if( SetPropertyFromNode( (*iter).second, childValue, replacer ) )
+              {
+                map->Insert( (*iter).first, childValue );
+                done = true;
+              }
             }
           }
         }