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=78cb1f2f70443ae94e334cdc5989d41af5af3e4c;hp=5e60919d1df8cc21d847a070ed4de3ec9c8b3a04;hb=3fc0516c8f87d42c4bbf7979bd2002c62c4c537f;hpb=b34b7545bf6bb2526b2a0544868a4aec8ee16335 diff --git a/plugins/dali-swig/property-wrapper.rb b/plugins/dali-swig/property-wrapper.rb index 5e60919..78cb1f2 100755 --- a/plugins/dali-swig/property-wrapper.rb +++ b/plugins/dali-swig/property-wrapper.rb @@ -20,19 +20,34 @@ $typeTable = [ ["VECTOR4", "Vector4", "", "Vector4 temp = new Vector4(0.0f,0.0f,0.0f,0.0f);"], ["MATRIX3", "Matrix3", "", "Matrix3 temp = new Matrix3();"], ["MATRIX", "Matrix", "", "Matrix temp = new Matrix();" ], - ["RECTANGLE", "RectInteger", "", "RectInteger temp = new RectInteger(0,0,0,0);"], - ["ROTATION", "Quaternion", "", "Quaternion temp = new Quaternion();"], + ["RECTANGLE", "Rectangle", "", "Rectangle temp = new Rectangle(0,0,0,0);"], + ["ROTATION", "Rotation", "", "Rotation temp = new Rotation();"], ["STRING", "string", "out", "string temp;"], ["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 @@ -273,22 +312,32 @@ def writeCSharpData next end + #exception case <<< + #Tooltip gives swig build error + if( property.name == "Tooltip" ) + next + end + #exception case >>> + $totalProperties+=1 # keep track of total propertyType = propertyInfo[1] # e.g. bool or int 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 - property.csharpGetter =" public #{propertyType} #{property.name} \n"\ - " { \n"\ - " get \n" \ + property.csharpGetter =" public #{propertyType} #{property.name}\n"\ + " {\n"\ + " get\n" \ " {\n"\ " #{tempDeclaration}\n"\ " GetProperty( #{propertyName}).Get( #{propertyArg} temp );\n"\ @@ -297,18 +346,35 @@ def writeCSharpData if property.writable #text.SetProperty(TextLabel.Property.HORIZONTAL_ALIGNMENT, new Property.Value("CENTER")); - property.csharpSetter = " set \n" \ - " { \n"\ + property.csharpSetter = " set\n" \ + " {\n"\ " SetProperty( #{propertyName}, new Dali.Property.Value( value ) );\n" \ " }\n"\ " }\n" else property.csharpSetter = "}" # close the opening property declaration end + + #exception case <<< + if( property.name == "Behavior" ) + property.csharpGetter =" public Layer.LayerBehavior #{property.name} \n"\ + " { \n"\ + " get \n" \ + " {\n"\ + " return GetBehavior();\n"\ + " }\n" + + property.csharpSetter = " set \n" \ + " { \n"\ + " SetBehavior( value );\n" \ + " }\n"\ + " }\n" + end + #exception case >>> 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 +426,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 +474,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")