ProjectGamePanel.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. function ProjectGamePanel::onAdd(%this)
  2. {
  3. %this.init("Project");
  4. %this.buttonBar.addButton("createNewModule", 11, "Create Module", "");
  5. %this.buttonBar.addButton("editModule", 49, "Edit Module", "editModuleAvailable");
  6. }
  7. function ProjectGamePanel::onOpen(%this, %allModules)
  8. {
  9. %appCore = ModuleDatabase.findModule("AppCore", 1);
  10. if(isObject(%appCore))
  11. {
  12. %this.setTitle(%appCore.project);
  13. }
  14. %loadedModules = ModuleDatabase.findModules(true);
  15. %this.clearModules();
  16. for(%i = 0; %i < getWordCount(%allModules); %i++)
  17. {
  18. %mod = getWord(%allModules, %i);
  19. %this.addModule(%mod, %loadedModules);
  20. }
  21. %this.list.sortByText();
  22. if(%this.card.visible)
  23. {
  24. %this.refreshCard();
  25. }
  26. else
  27. {
  28. %this.buttonBar.refreshEnabled();
  29. }
  30. }
  31. function ProjectGamePanel::addModule(%this, %module, %loadedModules)
  32. {
  33. %color = %this.gray;
  34. if(%module.Deprecated)
  35. {
  36. %color = %this.darkRed;
  37. }
  38. for(%i = 0; %i < getWordCount(%loadedModules); %i++)
  39. {
  40. %loadedModule = getWord(%loadedModules, %i);
  41. if(%loadedModule == %module)
  42. {
  43. %color = %this.yellow;
  44. if(%module.Deprecated)
  45. {
  46. %color = %this.darkRed;
  47. }
  48. }
  49. }
  50. %this.list.addItemWithID(%this.getModuleName(%module), %module);
  51. %index = %this.list.findItemID(%module);
  52. %this.list.setItemColor(%index, %color);
  53. }
  54. function ProjectGamePanel::refreshCard(%this)
  55. {
  56. %module = ModuleDatabase.findModule(%this.card.moduleID, %this.card.versionID);
  57. %indexList = %this.list.findItemText(%this.getModuleName(%module));
  58. %index = getWord(%indexList, 0);
  59. if(%index != -1)
  60. {
  61. %this.list.setCurSel(%index);
  62. }
  63. %this.card.show(%module);
  64. }
  65. function ProjectGamePanel::createNewModule(%this)
  66. {
  67. %width = 500;
  68. %height = 190;
  69. %dialog = new GuiControl()
  70. {
  71. class = "NewModuleDialog";
  72. superclass = "EditorDialog";
  73. dialogSize = (%width + 8) SPC (%height + 8);
  74. dialogCanClose = true;
  75. dialogText = "Create Module";
  76. };
  77. %dialog.init(%width, %height);
  78. %this.startListening(%dialog);
  79. Canvas.pushDialog(%dialog);
  80. }
  81. function ProjectGamePanel::onDialogClosed(%this, %dialog)
  82. {
  83. %this.dialog = %dialog;
  84. %this.schedule(100, "deleteDialog");
  85. }
  86. function ProjectGamePanel::deleteDialog(%this)
  87. {
  88. %this.dialog.delete();
  89. }
  90. function ProjectGamePanel::onModuleCreated(%this, %data)
  91. {
  92. if(%data.template !$= "none")
  93. {
  94. %templatePath = pathConcat(getMainDotCsDir(), "library", %data.template);
  95. if(isDirectory(%templatePath))
  96. {
  97. pathCopy(%templatePath, %data.path);
  98. %obj = TamlRead(pathConcat(%data.path, "module.taml"));
  99. %obj.ModuleID = %data.moduleName;
  100. %obj.Type = "";
  101. TamlWrite(%obj, pathConcat(%data.path, "module.taml"));
  102. }
  103. }
  104. else
  105. {
  106. %obj = new ModuleDefinition()
  107. {
  108. ModuleID = %data.moduleName;
  109. VersionID = "1";
  110. BuildID = "1";
  111. Synchronized = false;
  112. Description = "";
  113. Author = "";
  114. };
  115. createPath(%data.path);
  116. TamlWrite(%obj, pathConcat(%data.path, "module.taml"));
  117. }
  118. ModuleDatabase.scanModules(%data.path);
  119. %this.onOpen(ModuleDatabase.findModules(false));
  120. }
  121. function ProjectGamePanel::editModule(%this)
  122. {
  123. %width = 500;
  124. %height = 520;
  125. %dialog = new GuiControl()
  126. {
  127. class = "EditModuleDialog";
  128. superclass = "EditorDialog";
  129. dialogSize = (%width + 8) SPC (%height + 8);
  130. dialogCanClose = true;
  131. dialogText = "Edit Module";
  132. module = %this.card.activeModule;
  133. };
  134. %dialog.init(%width, %height);
  135. %this.startListening(%dialog);
  136. Canvas.pushDialog(%dialog);
  137. }
  138. function ProjectGamePanel::editModuleAvailable(%this)
  139. {
  140. if(isObject(%this.card.activeModule) && !%this.card.activeModule.Synchronized)
  141. {
  142. return true;
  143. }
  144. return false;
  145. }
  146. function ProjectGamePanel::onModuleEdited(%this, %data)
  147. {
  148. if(%this.moduleHasChanged(%data))
  149. {
  150. %module = %this.card.activeModule;
  151. %moduleID = %this.card.activeModule.moduleID;
  152. %projectPath = ProjectManager.getProjectFolder();
  153. %modulePath = pathConcat(%projectPath, %module.moduleID);
  154. if(ModuleDatabase.isModuleLoaded(%module.moduleID))
  155. {
  156. if(%module.group !$= "")
  157. {
  158. ModuleDatabase.unloadGroup(%module.group);
  159. }
  160. else
  161. {
  162. ModuleDatabase.unloadExplicit(%module.moduleID);
  163. }
  164. }
  165. ModuleDatabase.unregisterModule(%module.moduleID, %module.versionID);
  166. %newModulePath = pathConcat(%projectPath, %data.moduleID);
  167. if(%moduleID !$= %data.moduleID && !isDirectory(%newModulePath))
  168. {
  169. if(pathCopy(%modulePath, %newModulePath))
  170. {
  171. directoryDelete(%modulePath);
  172. %modulePath = %newModulePath;
  173. }
  174. }
  175. echo("Editing Module at " @ %modulePath);
  176. %file = TamlRead(pathConcat(%modulePath, "module.taml"));
  177. %file.moduleID = %data.moduleID;
  178. %file.versionID = %data.versionID;
  179. %file.buildID = %data.buildID;
  180. %file.description = %data.description;
  181. %file.type = %data.type;
  182. %file.author = %data.author;
  183. TamlWrite(%file, pathConcat(%modulePath, "module.taml"));
  184. ModuleDatabase.scanModules(%modulePath, true);
  185. %this.card.moduleID = %data.moduleID;
  186. %this.card.versionID = %data.versionID;
  187. %allModules = ModuleDatabase.findModules(false);
  188. %this.onOpen(%allModules);
  189. }
  190. }
  191. function ProjectGamePanel::moduleHasChanged(%this, %data)
  192. {
  193. %module = %this.card.activeModule;
  194. return %module.moduleID !$= %data.moduleID ||
  195. %module.versionID !$= %data.versionID ||
  196. %module.buildID !$= %data.buildID ||
  197. %module.description !$= %data.description ||
  198. %module.type !$= %data.type ||
  199. %module.author !$= %data.author;
  200. }