GenCode_AS3.ts 4.2 KB

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