PolycodeProjectBrowser.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #include "PolycodeProjectBrowser.h"
  2. PolycodeProjectBrowser::PolycodeProjectBrowser() : ScreenEntity() {
  3. treeContainer = new UITreeContainer("boxIcon.png", L"Projects", 200, 555);
  4. treeContainer->getRootNode()->toggleCollapsed();
  5. treeContainer->getRootNode()->addEventListener(this, UITreeEvent::SELECTED_EVENT);
  6. treeContainer->addEventListener(this, InputEvent::EVENT_MOUSEDOWN);
  7. BrowserUserData *data = new BrowserUserData();
  8. data->type = 0;
  9. data->parentProject = NULL;
  10. treeContainer->getRootNode()->setUserData((void*) data) ;
  11. addChild(treeContainer);
  12. treeContainer->setPosition(0,45);
  13. selectedData = NULL;
  14. }
  15. PolycodeProjectBrowser::~PolycodeProjectBrowser() {
  16. }
  17. void PolycodeProjectBrowser::removeProject(PolycodeProject *project) {
  18. UITree *projectTree = treeContainer->getRootNode();
  19. for(int i=0; i < projectTree->getNumTreeChildren(); i++) {
  20. UITree *projectChild = projectTree->getTreeChild(i);
  21. BrowserUserData *userData = (BrowserUserData*)projectChild->getUserData();
  22. if(userData->parentProject == project) {
  23. projectTree->removeTreeChild(projectChild);
  24. return;
  25. }
  26. }
  27. }
  28. void PolycodeProjectBrowser::addProject(PolycodeProject *project) {
  29. UITree *projectTree = treeContainer->getRootNode()->addTreeChild("projectIcon.png", project->getProjectName(), (void*) project);
  30. projectTree->toggleCollapsed();
  31. BrowserUserData *data = new BrowserUserData();
  32. data->type = 0;
  33. data->parentProject = project;
  34. projectTree->setUserData((void*) data) ;
  35. parseFolderIntoNode(projectTree, project->getRootFolder(), project);
  36. }
  37. void PolycodeProjectBrowser::handleEvent(Event *event) {
  38. if(event->getDispatcher() == treeContainer) {
  39. if(event->getEventCode() == InputEvent::EVENT_MOUSEDOWN) {
  40. InputEvent *inputEvent = (InputEvent*) event;
  41. if(inputEvent->mouseButton == CoreInput::MOUSE_BUTTON2) {
  42. PolycodeProjectBrowserEvent *bEvent = new PolycodeProjectBrowserEvent();
  43. dispatchEvent(bEvent, PolycodeProjectBrowserEvent::SHOW_MENU);
  44. }
  45. }
  46. }
  47. if(event->getDispatcher() == treeContainer->getRootNode()) {
  48. if(event->getEventCode() == UITreeEvent::SELECTED_EVENT){
  49. BrowserUserData *data = (BrowserUserData *)treeContainer->getRootNode()->getSelectedNode()->getUserData();
  50. selectedData = data;
  51. dispatchEvent(new Event(), Event::CHANGE_EVENT);
  52. }
  53. }
  54. ScreenEntity::handleEvent(event);
  55. }
  56. void PolycodeProjectBrowser::parseFolderIntoNode(UITree *node, String spath, PolycodeProject *parentProject) {
  57. printf("Parsing %s\n", spath.c_str());
  58. vector<OSFileEntry> files = OSBasics::parseFolder(spath, false);
  59. for(int i=0; i < files.size(); i++) {
  60. OSFileEntry entry = files[i];
  61. if(entry.type == OSFileEntry::TYPE_FOLDER) {
  62. BrowserUserData *data = new BrowserUserData();
  63. data->fileEntry = entry;
  64. UITree *newChild = node->addTreeChild("folder.png", entry.name, (void*) data);
  65. data->type = 2;
  66. data->parentProject = parentProject;
  67. parseFolderIntoNode(newChild, entry.fullPath, parentProject);
  68. } else {
  69. BrowserUserData *data = new BrowserUserData();
  70. data->fileEntry = entry;
  71. data->type = 1;
  72. data->parentProject = parentProject;
  73. UITree *newChild = node->addTreeChild("file.png", entry.name, (void*) data);
  74. }
  75. }
  76. }
  77. void PolycodeProjectBrowser::Resize(int newWidth, int newHeight) {
  78. treeContainer->Resize(newWidth, newHeight);
  79. }