CreateProject.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import EditorEvents = require("../../editor/EditorEvents");
  2. import EditorUI = require("../EditorUI");
  3. import ModalWindow = require("./ModalWindow");
  4. class CreateProject extends ModalWindow {
  5. constructor(templateSourceDir: string, imagePath: string = "") {
  6. super();
  7. this.templateSourceDir = templateSourceDir;
  8. this.init("Create Project", "AtomicEditor/editor/ui/createproject.tb.txt");
  9. this.projectPathField = <Atomic.UIEditField> this.getWidget("project_path");
  10. this.projectNameField = <Atomic.UIEditField> this.getWidget("project_name");
  11. this.image = <Atomic.UIImageWidget> this.getWidget("project_image");
  12. if (!imagePath)
  13. this.image.visibility = Atomic.UI_WIDGET_VISIBILITY_GONE;
  14. else
  15. this.image.image = imagePath;
  16. var fileSystem = Atomic.getFileSystem();
  17. var userDocuments = fileSystem.userDocumentsDir;
  18. if (Atomic.platform == "MacOSX") {
  19. userDocuments += "Documents/AtomicProjects";
  20. } else {
  21. userDocuments += "AtomicProjects";
  22. }
  23. this.projectPathField.text = userDocuments;
  24. this.resizeToFitContent();
  25. this.center();
  26. }
  27. tryProjectCreate(): boolean {
  28. var name = this.projectNameField.text.trim();
  29. if (!name) {
  30. EditorUI.showModalError("New Project Editor Error", "Please enter a project name");
  31. return false;
  32. }
  33. var folder = this.projectPathField.text.trim();
  34. if (!folder) {
  35. EditorUI.showModalError("New Project Editor Error", "Please choose a root project folder");
  36. return false;
  37. }
  38. folder += "/" + name;
  39. var fileSystem = Atomic.getFileSystem();
  40. if (fileSystem.dirExists(folder) || fileSystem.fileExists(folder)) {
  41. var message = folder + " exists\n\nPlease choose a different root folder or project name";
  42. EditorUI.showModalError("New Project Editor Error", message);
  43. return false;
  44. }
  45. folder = Atomic.addTrailingSlash(folder);
  46. if (!fileSystem.dirExists(folder)) {
  47. var utils = new Editor.FileUtils();
  48. utils.createDirs(folder);
  49. utils.createDirs(folder + "Cache");
  50. if (!fileSystem.dirExists(folder)) {
  51. var message = "Unable to create folder: " + folder + "\n\nPlease choose a different root folder or project name";
  52. EditorUI.showModalError("New Project Editor Error", message);
  53. return false;
  54. }
  55. }
  56. // Do the creation!
  57. fileSystem.copyDir(this.templateSourceDir + "Resources", folder + "Resources");
  58. var file = new Atomic.File(folder + name + ".atomic", Atomic.FILE_WRITE);
  59. file.close();
  60. this.hide();
  61. this.sendEvent(EditorEvents.LoadProject, { path: folder });
  62. return true;
  63. }
  64. handleWidgetEvent(ev: Atomic.UIWidgetEvent) {
  65. if (ev.type == Atomic.UI_EVENT_TYPE_CLICK) {
  66. var id = ev.target.id;
  67. if (id == "cancel") {
  68. this.hide();
  69. return true;
  70. }
  71. else if (id == "choose_path") {
  72. var utils = new Editor.FileUtils();
  73. var path = utils.newProjectFileDialog();
  74. if (path.length)
  75. this.projectPathField.text = path;
  76. return true;
  77. }
  78. else if (id == "create") {
  79. this.tryProjectCreate();
  80. return true;
  81. }
  82. }
  83. }
  84. projectPathField: Atomic.UIEditField;
  85. projectNameField: Atomic.UIEditField;
  86. image: Atomic.UIImageWidget;
  87. templateSourceDir: string;
  88. }
  89. export = CreateProject;