GenCode_Haxe.lua 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. local function genCode(handler)
  2. local settings = handler.project:GetSettings("Publish").codeGeneration
  3. local codePkgName = handler:ToFilename(handler.pkg.name); --convert chinese to pinyin, remove special chars etc.
  4. local exportCodePath = handler.exportCodePath..'/'..codePkgName
  5. local namespaceName = codePkgName
  6. if settings.packageName~=nil and settings.packageName~='' then
  7. namespaceName = settings.packageName..'.'..namespaceName;
  8. end
  9. --CollectClasses(stripeMemeber, stripeClass, fguiNamespace)
  10. local classes = handler:CollectClasses(settings.ignoreNoname, settings.ignoreNoname, nil)
  11. handler:SetupCodeFolder(exportCodePath, "hx") --check if target folder exists, and delete old files
  12. local getMemberByName = settings.getMemberByName
  13. local classCnt = classes.Count
  14. local writer = CodeWriter.new()
  15. for i=0,classCnt-1 do
  16. local classInfo = classes[i]
  17. local members = classInfo.members
  18. writer:reset()
  19. writer:writeln('package %s', namespaceName)
  20. writer:startBlock()
  21. writer:writeln('import fairygui.*;')
  22. writer:writeln()
  23. writer:writeln('class %s extends %s', classInfo.className, classInfo.superClassName)
  24. writer:startBlock()
  25. local memberCnt = members.Count
  26. for j=0,memberCnt-1 do
  27. local memberInfo = members[j]
  28. writer:writeln('public var %s:%s;', memberInfo.varName, memberInfo.type)
  29. end
  30. writer:writeln('public static inline var URL:String = "ui://%s%s";', handler.pkg.id, classInfo.resId)
  31. writer:writeln()
  32. writer:writeln('public static function createInstance():%s', classInfo.className)
  33. writer:startBlock()
  34. writer:writeln('return cast(UIPackage.createObject("%s", "%s"), %s);', handler.pkg.name, classInfo.resName, classInfo.className)
  35. writer:endBlock()
  36. writer:writeln()
  37. writer:writeln('protected override function constructFromXML(xml:FastXML):Void')
  38. writer:startBlock()
  39. writer:writeln('super.constructFromXML(xml);')
  40. writer:writeln()
  41. for j=0,memberCnt-1 do
  42. local memberInfo = members[j]
  43. if memberInfo.group==0 then
  44. if getMemberByName then
  45. writer:writeln('%s = cast(this.getChild("%s"), %s);', memberInfo.varName, memberInfo.type, memberInfo.name)
  46. else
  47. writer:writeln('%s = cast(this.getChildAt(%s), %s);', memberInfo.varName, memberInfo.type, memberInfo.index)
  48. end
  49. elseif memberInfo.group==1 then
  50. if getMemberByName then
  51. writer:writeln('%s = this.getController("%s");', memberInfo.varName, memberInfo.name)
  52. else
  53. writer:writeln('%s = this.getControllerAt(%s);', memberInfo.varName, memberInfo.index)
  54. end
  55. else
  56. if getMemberByName then
  57. writer:writeln('%s = this.getTransition("%s");', memberInfo.varName, memberInfo.name)
  58. else
  59. writer:writeln('%s = this.getTransitionAt(%s);', memberInfo.varName, memberInfo.index)
  60. end
  61. end
  62. end
  63. writer:endBlock()
  64. writer:endBlock() --class
  65. writer:endBlock() --namepsace
  66. writer:save(exportCodePath..'/'..classInfo.className..'.hx')
  67. end
  68. writer:reset()
  69. local binderName = codePkgName..'Binder'
  70. writer:writeln('package %s', namespaceName)
  71. writer:startBlock()
  72. writer:writeln('import fairygui.*;')
  73. writer:writeln()
  74. writer:writeln('class %s', binderName)
  75. writer:startBlock()
  76. writer:writeln('public static function bindAll():Void')
  77. writer:startBlock()
  78. for i=0,classCnt-1 do
  79. local classInfo = classes[i]
  80. writer:writeln('UIObjectFactory.setPackageItemExtension(%s.URL, cast %s);', classInfo.className, classInfo.className)
  81. end
  82. writer:endBlock() --bindall
  83. writer:endBlock() --class
  84. writer:endBlock() --namespace
  85. writer:save(exportCodePath..'/'..binderName..'.hx')
  86. end
  87. return genCode