PolycodeProjectBrowser::PolycodeProjectBrowser(PolycodeProject *project) : UIElement() { this->project = project; headerBg = new UIRect(10,10); addChild(headerBg); headerBg->setAnchorPoint(-1.0, -1.0, 0.0); headerBg->color.setColorHexFromString(CoreServices::getInstance()->getConfig()->getStringValue("Polycode", "uiHeaderBgColor")); UILabel *label = new UILabel("PROJECT BROWSER", 18, "section", Label::ANTIALIAS_FULL); label->color.setColorHexFromString(CoreServices::getInstance()->getConfig()->getStringValue("Polycode", "uiHeaderFontColor")); addChild(label); label->setPosition(10, 3); treeContainer = new UITreeContainer("boxIcon.png", project->getProjectName(), 200, 555); treeContainer->getRootNode()->toggleCollapsed(); treeContainer->getRootNode()->addEventListener(this, UITreeEvent::SELECTED_EVENT); treeContainer->addEventListener(this, InputEvent::EVENT_MOUSEDOWN); treeContainer->setPosition(0, 30); BrowserUserData *data = new BrowserUserData(); data->type = 0; data->parentProject = project; treeContainer->getRootNode()->setUserData((void*) data) ; addChild(treeContainer); selectedData = NULL; parseFolderIntoNode(treeContainer->getRootNode(), project->getRootFolder()); }
void PolycodeProjectBrowser::addProject(PolycodeProject *project) { UITree *projectTree = treeContainer->getRootNode()->addTreeChild("projectIcon.png", project->getProjectName(), (void*) project); projectTree->toggleCollapsed(); BrowserUserData *data = new BrowserUserData(); data->type = 3; data->parentProject = project; projectTree->setUserData((void*) data) ; parseFolderIntoNode(projectTree, project->getRootFolder(), project); }
void PolycodeProjectBrowser::refreshProject(PolycodeProject *project) { UITree *projectTree = treeContainer->getRootNode(); for(int i=0; i < projectTree->getNumTreeChildren(); i++) { UITree *projectChild = projectTree->getTreeChild(i); BrowserUserData *userData = (BrowserUserData*)projectChild->getUserData(); if(userData->parentProject == project) { parseFolderIntoNode(projectChild, project->getRootFolder(), project); return; } } }
void PolycodeProjectBrowser::parseFolderIntoNode(UITree *node, String spath, PolycodeProject *parentProject) { vector<OSFileEntry> files = OSBasics::parseFolder(spath, false); // check if files got deleted for(int i=0; i < node->getNumTreeChildren(); i++) { UITree *projectChild = node->getTreeChild(i); if(!listHasFileEntry(files, ((BrowserUserData*)projectChild->getUserData())->fileEntry)) { node->removeTreeChild(projectChild); } } for(int i=0; i < files.size(); i++) { OSFileEntry entry = files[i]; if(entry.type == OSFileEntry::TYPE_FOLDER) { UITree *existing = nodeHasName(node, entry.name); if(!existing) { BrowserUserData *data = new BrowserUserData(); data->fileEntry = entry; UITree *newChild = node->addTreeChild("folder.png", entry.name, (void*) data); data->type = 2; data->parentProject = parentProject; parseFolderIntoNode(newChild, entry.fullPath, parentProject); } else { parseFolderIntoNode(existing, entry.fullPath, parentProject); } } else { if(!nodeHasName(node, entry.name)) { BrowserUserData *data = new BrowserUserData(); data->fileEntry = entry; data->type = 1; data->parentProject = parentProject; node->addTreeChild("file.png", entry.name, (void*) data); } } } }
void PolycodeProjectBrowser::Refresh() { parseFolderIntoNode(treeContainer->getRootNode(), project->getRootFolder()); }