Comment correction for Disambiguated function
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / builder / builder-set-property.cpp
index 285bd7b..c2d77a7 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
 {
 
@@ -94,7 +102,7 @@ Vector4 HexStringToVector4( const char* s )
 /**
  * A property value type can be forced when its unknown by a disambiguation convention in the json
  * ie  "myarray": [1,2,3,4] ; would be a vector but
- *     "myarray": {'type-cast':'array', 'value':[1,2,3,4]} would be an array
+ *     "myarray": {"type-cast":"array", "value":[1,2,3,4]} would be an array
  * @param child The node whos string to search for a disambiguated type
  * @param value The value to set
  * @param overrideMap The user overriding constant map
@@ -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() )
       {
@@ -254,8 +256,8 @@ bool SetPropertyFromNode( const TreeNode& node, Property::Type type, Property::V
         if( r && g && b )
         {
           float red( (*r) * (1.0f/255.0f) );
-          float green( (*r) * (1.0f/255.0f) );
-          float blue( (*r) * (1.0f/255.0f) );
+          float green( (*g) * (1.0f/255.0f) );
+          float blue( (*b) * (1.0f/255.0f) );
           // check for optional "a" (alpha) node, default to fully opaque if it is not found.
           float alpha( 1.0f );
           OptionalInteger a = replacer.IsInteger( IsChild(node, "a") );
@@ -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;
+              }
             }
           }
         }