GenCode_TS.ts 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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. let ns = "fgui";
  9. let isThree = handler.project.type == FairyEditor.ProjectType.ThreeJS;
  10. if (settings.packageName)
  11. namespaceName = settings.packageName + '.' + namespaceName;
  12. //CollectClasses(stripeMemeber, stripeClass, fguiNamespace)
  13. let classes = handler.CollectClasses(settings.ignoreNoname, settings.ignoreNoname, ns);
  14. handler.SetupCodeFolder(exportCodePath, "ts"); //check if target folder exists, and delete old files
  15. let getMemberByName = settings.getMemberByName;
  16. let classCnt = classes.Count;
  17. let writer = new CodeWriter({ blockFromNewLine: false, usingTabs: true });
  18. for (let i: number = 0; i < classCnt; i++) {
  19. let classInfo = classes.get_Item(i);
  20. let members = classInfo.members;
  21. let references = classInfo.references;
  22. writer.reset();
  23. let refCount = references.Count;
  24. if (refCount > 0) {
  25. for (let j: number = 0; j < refCount; j++) {
  26. let ref = references.get_Item(j);
  27. writer.writeln('import %s from "./%s";', ref, ref);
  28. }
  29. writer.writeln();
  30. }
  31. if (isThree) {
  32. writer.writeln('import * as fgui from "fairygui-three";');
  33. if (refCount == 0)
  34. writer.writeln();
  35. }
  36. writer.writeln('export default class %s extends %s', classInfo.className, classInfo.superClassName);
  37. writer.startBlock();
  38. writer.writeln();
  39. let memberCnt = members.Count;
  40. for (let j: number = 0; j < memberCnt; j++) {
  41. let memberInfo = members.get_Item(j);
  42. writer.writeln('public %s:%s;', memberInfo.varName, memberInfo.type);
  43. }
  44. writer.writeln('public static URL:string = "ui://%s%s";', handler.pkg.id, classInfo.resId);
  45. writer.writeln();
  46. writer.writeln('public static createInstance():%s', classInfo.className);
  47. writer.startBlock();
  48. writer.writeln('return <%s>(%s.UIPackage.createObject("%s", "%s"));', classInfo.className, ns, handler.pkg.name, classInfo.resName);
  49. writer.endBlock();
  50. writer.writeln();
  51. writer.writeln('protected onConstruct():void');
  52. writer.startBlock();
  53. for (let j: number = 0; j < memberCnt; j++) {
  54. let memberInfo = members.get_Item(j);
  55. if (memberInfo.group == 0) {
  56. if (getMemberByName)
  57. writer.writeln('this.%s = <%s>(this.getChild("%s"));', memberInfo.varName, memberInfo.type, memberInfo.name);
  58. else
  59. writer.writeln('this.%s = <%s>(this.getChildAt(%s));', memberInfo.varName, memberInfo.type, memberInfo.index);
  60. }
  61. else if (memberInfo.group == 1) {
  62. if (getMemberByName)
  63. writer.writeln('this.%s = this.getController("%s");', memberInfo.varName, memberInfo.name);
  64. else
  65. writer.writeln('this.%s = this.getControllerAt(%s);', memberInfo.varName, memberInfo.index);
  66. }
  67. else {
  68. if (getMemberByName)
  69. writer.writeln('this.%s = this.getTransition("%s");', memberInfo.varName, memberInfo.name);
  70. else
  71. writer.writeln('this.%s = this.getTransitionAt(%s);', memberInfo.varName, memberInfo.index);
  72. }
  73. }
  74. writer.endBlock();
  75. writer.endBlock(); //class
  76. writer.save(exportCodePath + '/' + classInfo.className + '.ts');
  77. }
  78. writer.reset();
  79. let binderName = codePkgName + 'Binder';
  80. for (let i: number = 0; i < classCnt; i++) {
  81. let classInfo = classes.get_Item(i);
  82. writer.writeln('import %s from "./%s";', classInfo.className, classInfo.className);
  83. }
  84. if (isThree) {
  85. writer.writeln('import * as fgui from "fairygui-three";');
  86. writer.writeln();
  87. }
  88. writer.writeln();
  89. writer.writeln('export default class %s', binderName);
  90. writer.startBlock();
  91. writer.writeln('public static bindAll():void');
  92. writer.startBlock();
  93. for (let i: number = 0; i < classCnt; i++) {
  94. let classInfo = classes.get_Item(i);
  95. writer.writeln('%s.UIObjectFactory.setExtension(%s.URL, %s);', ns, classInfo.className, classInfo.className);
  96. }
  97. writer.endBlock(); //bindall
  98. writer.endBlock(); //class
  99. writer.save(exportCodePath + '/' + binderName + '.ts');
  100. }
  101. export { genCode };