X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=plugins%2Fdali-swig%2Fproperty-wrapper.rb;h=37a8cf97bbe66d4eb92130bb6a93a40693ad32ad;hp=5e60919d1df8cc21d847a070ed4de3ec9c8b3a04;hb=7162819ff25fd6b90ab1c1dca97a30af3d0c5a14;hpb=85affa07d97fb47fd8a244247710efc077cfd096 diff --git a/plugins/dali-swig/property-wrapper.rb b/plugins/dali-swig/property-wrapper.rb index 5e60919..37a8cf9 100755 --- a/plugins/dali-swig/property-wrapper.rb +++ b/plugins/dali-swig/property-wrapper.rb @@ -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 @@ -180,9 +214,13 @@ end def writePropertiesToCSharpFile( daliClass ) # open the CSharp file autogenerated by SWIG - swigFiles = $daliSwigPath + "/csharp/" + swigFiles = $daliSwigPath + "/automatic/csharp/" + + # some C++ classes are renamed for C# + className = getCSharpName( daliClass.name ) + + fileName =(swigFiles + className ) + ".cs" - fileName =(swigFiles+daliClass.name) + ".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,17 +250,17 @@ 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 def writeChildPropertiesToCSharpFile( daliClass ) # open the CSharp file autogenerated by SWIG - swigFiles = $daliSwigPath + "/csharp/" + 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 @@ -360,7 +402,7 @@ def writeDaliCoreProperties puts("Scanning folder: #{$daliCorePath}\n\n"); # Executed a recursive grep over dali-core for the DALI_PROPERTY macro - result =`grep --include *.cpp -r "DALI_PROPERTY( \" #{$daliCorePath}` + result =`grep --include \\*.cpp -r "DALI_PROPERTY( \" #{$daliCorePath}` # We now have a list of lines that look like this: @@ -408,7 +450,7 @@ def writeDaliToolkitProperties # DALI_PROPERTY_REGISTRATION # DALI_ANIMATABLE_PROPERTY_REGISTRATION # DALI_CHILD_PROPERTY_REGISTRATION - result =`grep --include *.cpp -w 'Control::Impl::SetProperty\\|DALI_ANIMATABLE_PROPERTY_REGISTRATION_WITH_DEFAULT(\\|DALI_CHILD_PROPERTY_REGISTRATION(\\|DALI_ANIMATABLE_PROPERTY_REGISTRATION(\\|DALI_PROPERTY_REGISTRATION' -r #{$daliToolkitPath}` + result =`grep --include \\*.cpp -w 'Control::Impl::SetProperty\\|DALI_ANIMATABLE_PROPERTY_REGISTRATION_WITH_DEFAULT(\\|DALI_CHILD_PROPERTY_REGISTRATION(\\|DALI_ANIMATABLE_PROPERTY_REGISTRATION(\\|DALI_PROPERTY_REGISTRATION' -r #{$daliToolkitPath}` if( result == "" ) puts("Error parsing #{$daliToolkitPath} no properties found")