NewProjectWindow.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. #include "NewProjectWindow.h"
  2. NewProjectWindow::NewProjectWindow() : UIWindow(L"Create New Project", 500, 300){
  3. templateFolder = "";
  4. closeOnEscape = true;
  5. defaultTemplateTree = NULL;
  6. Config *conf = CoreServices::getInstance()->getConfig();
  7. String fontName = conf->getStringValue("Polycode", "uiDefaultFontName");
  8. int fontSize = conf->getNumericValue("Polycode", "uiDefaultFontSize");
  9. templateContainer = new UITreeContainer("boxIcon.png", L"Templates", 200, 300-topPadding-padding-padding);
  10. TemplateUserData *data = new TemplateUserData();
  11. data->type = 0;
  12. templateContainer->getRootNode()->setUserData(data);
  13. addChild(templateContainer);
  14. templateContainer->setPosition(padding,topPadding+padding);
  15. templateContainer->getRootNode()->toggleCollapsed();
  16. templateContainer->getRootNode()->addEventListener(this, UITreeEvent::SELECTED_EVENT);
  17. vector<OSFileEntry> templates = OSBasics::parseFolder(RESOURCE_PATH"ProjectTemplates", false);
  18. for(int i=0; i < templates.size(); i++) {
  19. OSFileEntry entry = templates[i];
  20. if(entry.type == OSFileEntry::TYPE_FOLDER) {
  21. UITree *newChild = templateContainer->getRootNode()->addTreeChild("folder.png", entry.name, NULL);
  22. TemplateUserData *data = new TemplateUserData();
  23. data->type = 0;
  24. newChild->setUserData(data);
  25. if(i == 0) {
  26. newChild->toggleCollapsed();
  27. }
  28. parseTemplatesIntoTree(newChild, entry);
  29. }
  30. }
  31. ScreenLabel *label2 = new ScreenLabel(fontName, L"Project Name", fontSize, Label::ANTIALIAS_FULL);
  32. addChild(label2);
  33. label2->setPosition(padding+220, templateContainer->getPosition().y);
  34. projectNameInput = new UITextInput(false, 500-padding-220-padding-padding, 12);
  35. addChild(projectNameInput);
  36. projectNameInput->setPosition(label2->getPosition().x, label2->getPosition().y+label2->getHeight()+2);
  37. ScreenLabel *label3 = new ScreenLabel(fontName, L"Project Location", fontSize, Label::ANTIALIAS_FULL);
  38. addChild(label3);
  39. label3->setPosition(padding+220, templateContainer->getPosition().y+50);
  40. projectLocationInput = new UITextInput(false, 500-padding-220-padding-padding, 12);
  41. addChild(projectLocationInput);
  42. projectLocationInput->setPosition(label3->getPosition().x, label3->getPosition().y+label3->getHeight()+2);
  43. locationSelectButton = new UIButton(L"Choose...", 100);
  44. locationSelectButton->addEventListener(this, UIEvent::CLICK_EVENT);
  45. addChild(locationSelectButton);
  46. locationSelectButton->setPosition(500-100-padding, projectLocationInput->getPosition().y+projectLocationInput->getHeight()+5);
  47. cancelButton = new UIButton(L"Cancel", 100);
  48. cancelButton->addEventListener(this, UIEvent::CLICK_EVENT);
  49. addChild(cancelButton);
  50. cancelButton->setPosition(500-100-padding-100-10, 265);
  51. okButton = new UIButton(L"Create Project", 100);
  52. okButton->addEventListener(this, UIEvent::CLICK_EVENT);
  53. addChild(okButton);
  54. okButton->setPosition(500-100-padding, 265);
  55. }
  56. String NewProjectWindow::getTemplateFolder() {
  57. return templateFolder;
  58. }
  59. String NewProjectWindow::getProjectName() {
  60. return projectNameInput->getText();
  61. }
  62. String NewProjectWindow::getProjectLocation() {
  63. return projectLocationInput->getText();
  64. }
  65. void NewProjectWindow::ResetForm() {
  66. if(defaultTemplateTree)
  67. defaultTemplateTree->setSelected();
  68. focusChild(projectNameInput);
  69. projectNameInput->setText(L"Untitled");
  70. projectLocationInput->setText(L"~/Documents/Polycode");
  71. }
  72. void NewProjectWindow::handleEvent(Event *event) {
  73. if(event->getEventType() == "UIEvent") {
  74. if(event->getEventCode() == UIEvent::CLICK_EVENT) {
  75. if(event->getDispatcher() == okButton) {
  76. dispatchEvent(new UIEvent(), UIEvent::OK_EVENT);
  77. }
  78. if(event->getDispatcher() == cancelButton) {
  79. dispatchEvent(new UIEvent(), UIEvent::CLOSE_EVENT);
  80. }
  81. if(event->getDispatcher() == locationSelectButton) {
  82. String pathName = CoreServices::getInstance()->getCore()->openFolderPicker();
  83. projectLocationInput->setText(pathName);
  84. }
  85. }
  86. }
  87. if(event->getEventType() == "UITreeEvent" && event->getEventCode() == UITreeEvent::SELECTED_EVENT) {
  88. if(event->getDispatcher() == templateContainer->getRootNode()) {
  89. UITreeEvent *treeEvent = (UITreeEvent*) event;
  90. TemplateUserData *data = (TemplateUserData *)treeEvent->selection->getUserData();
  91. if(data->type == 1)
  92. templateFolder = data->templateFolder;
  93. }
  94. }
  95. UIWindow::handleEvent(event);
  96. }
  97. void NewProjectWindow::parseTemplatesIntoTree(UITree *tree, OSFileEntry folder) {
  98. vector<OSFileEntry> templates = OSBasics::parseFolder(folder.fullPath, false);
  99. for(int i=0; i < templates.size(); i++) {
  100. OSFileEntry entry = templates[i];
  101. if(entry.type == OSFileEntry::TYPE_FOLDER) {
  102. UITree *newChild = tree->addTreeChild("templateIcon.png", entry.name, NULL);
  103. TemplateUserData *data = new TemplateUserData();
  104. data->type = 1;
  105. data->templateFolder = entry.fullPath;
  106. newChild->setUserData(data);
  107. if(entry.name == "Empty Project") {
  108. defaultTemplateTree = newChild;
  109. newChild->setSelected();
  110. }
  111. }
  112. }
  113. }
  114. NewProjectWindow::~NewProjectWindow() {
  115. }