NewProjectWindow.cpp 5.2 KB

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