Fix C# build break due to C++ property macro modification
[platform/core/uifw/dali-toolkit.git] / plugins / dali-swig / property-wrapper.rb
index 1f3fc62..37a8cf9 100755 (executable)
@@ -26,13 +26,28 @@ $typeTable =  [
         ["ARRAY",       "Dali.Property.Array",   "",     "Dali.Property.Array temp = new Dali.Property.Array();"],
         ["MAP",         "Dali.Property.Map",     "",     "Dali.Property.Map temp = new Dali.Property.Map();"],
     ]
+
+# Some csharp classes are renamed ( e.g. C++ Control is called View in C#)
+$renameMap = [
+              ["Control", "View"]
+             ]
+
 $daliSwigPath = String.new;
 
+def getCSharpName( cppClassName )
+
+    entry = $renameMap.select{ |a| a.first == cppClassName }
+    if( entry.empty?)
+      return cppClassName
+    end
+    return entry[0][1]
+end
+
 # use the table above to get information for a specific type
 def getCSharpType( type )
 
     entry = $typeTable.select{ |a| a.first == type }
-    if( entry == nil )
+    if( entry.empty? )
       return nil
     end
     return entry[0]
@@ -40,7 +55,7 @@ end
 
 
 # Property struct stores the information about a property after parsing the C++ DALI_PROPERTY macro
-$propertyStruct = Struct.new("Property", :name, :type, :writable, :animatable,:constrainInput, :enum, :shortenum,  :csharpGetter, :csharpSetter, :childProperty,)
+$propertyStruct = Struct.new("Property", :name, :type, :writable, :animatable,:constrainInput, :enum, :shortenum, :develAPI, :csharpGetter, :csharpSetter, :childProperty,)
 
 # daliClass struct stores a class name and an array of properties
 $daliClassStruct = Struct.new("DaliClass", :name, :properties )
@@ -75,6 +90,16 @@ def extractPropertyInfo( propertyMacro )
     # extract the property enum name Dali::Path::Property::POINTS -> POINTS
     shortenum =  data[6].split(":").last
 
+    develAPI = false;
+    # Check if the property uses devel API
+    # Currently we ignore devel properties for now
+    if data[6].include? "Devel"
+      develAPI = true;
+      puts("Ignoring DEVEL API property: " + shortenum);
+    end
+
+
+
     # store the :name, :type, :writable, :animatable, :constrainInput, :enum
     property = $propertyStruct.new;
 
@@ -84,7 +109,7 @@ def extractPropertyInfo( propertyMacro )
     property.animatable = (data[4] == "true")
     property.constrainInput = (data[5]=="true")
     property.enum = shortenum
-
+    property.develAPI = develAPI;
     return property;
 end
 
@@ -94,6 +119,14 @@ def extractToolkitPropertyInfo( propertyMacro )
     # Extract the property name, type
     property = $propertyStruct.new;
 
+    #First strip out any comments at the end of the macro, some have text like // deprecated
+    commentIndex = propertyMacro.index("//");
+
+    if( commentIndex )
+        propertyMacro = propertyMacro.slice(0..commentIndex-1)
+    end
+
+
     # Split the macro definition by comma and quotes, close bracket and delete any empty segments
     data = propertyMacro.split(/[\s,")]/).reject { |s| s.empty? }
 
@@ -152,6 +185,7 @@ def extractToolkitPropertyInfo( propertyMacro )
         property.type = data[4]
       end
 
+      # last item should be property enum, e.g. INPUT_POINT_SIZE
       property.enum = data[data.length-1]
 
     end
@@ -182,7 +216,11 @@ def writePropertiesToCSharpFile( daliClass )
    # open the CSharp file autogenerated by SWIG
   swigFiles =  $daliSwigPath + "/automatic/csharp/"
 
-  fileName =(swigFiles+daliClass.name) + ".cs"
+  # some C++ classes are renamed for C#
+  className = getCSharpName( daliClass.name )
+
+  fileName =(swigFiles + className ) + ".cs"
+
 
   # it's possible some classes in dali-core aren't being wrapped by swig, so if the swig generated file
   # doesn't exist just return
@@ -202,7 +240,7 @@ def writePropertiesToCSharpFile( daliClass )
 
   for property in daliClass.properties
 
-    if (!property.childProperty)
+    if( (!property.childProperty) && (!property.develAPI))
       file.write( property.csharpGetter );
       file.write( property.csharpSetter );
     end
@@ -212,7 +250,7 @@ def writePropertiesToCSharpFile( daliClass )
   file.write("\n}\n\n}");  # re-insert the closing brackets we over-wrote
   end
 
-  puts("Injected #{daliClass.properties.length} C# Properties into #{daliClass.name}.cs".blueBackground)
+  puts("Injected #{daliClass.properties.length} C# Properties from #{daliClass.name} into #{className}.cs".blueBackground)
 
 end
 
@@ -222,7 +260,7 @@ def writeChildPropertiesToCSharpFile( daliClass )
   swigFiles =  $daliSwigPath + "/automatic/csharp/"
 
   # Add all the child properties to Control
-  fileName = (swigFiles+"Control") + ".cs"
+  fileName = (swigFiles+"View") + ".cs"
 
   if( ! File.exist?(fileName) )
     return
@@ -252,7 +290,7 @@ def writeChildPropertiesToCSharpFile( daliClass )
   file.write("\n}\n\n}");  # re-insert the closing brackets we over-wrote
   end
 
-  puts("Injected #{$childPropertyCount} C# Child Properties into #{"Control"}.cs".blueBackground)
+  puts("Injected #{$childPropertyCount} C# Child Properties into #{"View"}.cs".blueBackground)
 
 end
 
@@ -263,6 +301,7 @@ def writeCSharpData
 
         #puts ( daliClass.name )
 
+
         hasChildProperties = false
 
         for property in daliClass.properties
@@ -279,10 +318,13 @@ def writeCSharpData
             propertyArg =  propertyInfo[2]  # e.g. ref or out
             tempDeclaration = propertyInfo[3] # e.g. bool temp;
 
-            propertyName = "#{daliClass.name}.Property.#{property.enum}"
+            csharpClassName = getCSharpName(daliClass.name);
+
+
+            propertyName = "#{csharpClassName}.Property.#{property.enum}"
 
             if property.childProperty
-              propertyName = "#{daliClass.name}.ChildProperty.#{property.enum}"
+              propertyName = "#{csharpClassName}.ChildProperty.#{property.enum}"
               hasChildProperties = true
             end
 
@@ -308,7 +350,7 @@ def writeCSharpData
         end
         # write normal properties to the class's own csharp file
         writePropertiesToCSharpFile( daliClass )
-        # write child properties to Control.cs
+        # write child properties to View.cs ( on Control has child properties)
         if (hasChildProperties)
           writeChildPropertiesToCSharpFile( daliClass )
         end