vector<OSFileEntry> OSBasics::parsePhysFSFolder(String pathString, bool showHidden) { vector<OSFileEntry> returnVector; char **rc = PHYSFS_enumerateFiles(pathString.c_str()); char **i; String fullPath; String fname; for (i = rc; *i != NULL; i++) { fname = string(*i); fullPath = pathString + "/" + fname; if((fname.c_str()[0] != '.' || (fname.c_str()[0] == '.' && showHidden)) && fname != "..") { if(PHYSFS_isDirectory(fullPath.c_str())) { returnVector.push_back(OSFileEntry(pathString, fname, OSFileEntry::TYPE_FOLDER)); } else { returnVector.push_back(OSFileEntry(pathString, fname, OSFileEntry::TYPE_FILE)); } } } PHYSFS_freeList(rc); return returnVector; }
ProjectFontEntry::ProjectFontEntry(String fontPath, String fontName) : UIElement() { this->fontPath = fontPath; removeButton = new UIImageButton("Images/remove_icon.png"); removeButton->setPosition(0, 5); removeButton->addEventListener(this, UIEvent::CLICK_EVENT); addChild(removeButton); fontNameInput = new UITextInput(false, 100, 23); fontNameInput->setText(fontName); fontNameInput->setPosition(20, 0); fontNameInput->addEventListener(this, UIEvent::CHANGE_EVENT); addChild(fontNameInput); OSFileEntry entry = OSFileEntry(fontPath, OSFileEntry::TYPE_FILE); fontFileLabel = new ScreenLabel(entry.name, 12); fontFileLabel->color.a = 0.6; addChild(fontFileLabel); fontFileLabel->setPosition(130, 6); CoreServices::getInstance()->getFontManager()->registerFont(fontName, fontPath); }
vector<OSFileEntry> OSBasics::parseFolder(String pathString, bool showHidden) { vector<OSFileEntry> returnVector; if(pathString.size() < 128) { if(PHYSFS_exists(pathString.c_str())) { if(PHYSFS_isDirectory(pathString.c_str())) { return parsePhysFSFolder(pathString, showHidden); } } } #ifdef _WINDOWS WIN32_FIND_DATA findFileData; WCHAR curDir[4096]; GetCurrentDirectory(4096, curDir); WCHAR tmp[4096]; memset(tmp, 0, sizeof(WCHAR)*4096); ctow(tmp, pathString.c_str()); SetCurrentDirectory(tmp); HANDLE hFind = FindFirstFile((LPCWSTR)"*", &findFileData); if(hFind == INVALID_HANDLE_VALUE) { SetCurrentDirectory(curDir); return returnVector; } char fileName[260]; do { memset(fileName, 0, 260); wtoc(fileName, findFileData.cFileName); String fname = string(fileName); if((fname.c_str()[0] != '.' || (fname.c_str()[0] == '.' && showHidden)) && fname != "..") { if( findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) { returnVector.push_back(OSFileEntry(pathString, fname, OSFileEntry::TYPE_FOLDER)); } else { returnVector.push_back(OSFileEntry(pathString, fname, OSFileEntry::TYPE_FILE)); } } } while(FindNextFile(hFind, &findFileData)); FindClose(hFind); SetCurrentDirectory(curDir); #else DIR *d; struct dirent *dir; d = opendir(pathString.c_str()); if(d) { while ((dir = readdir(d)) != NULL) { if(dir->d_name[0] != '.' || (dir->d_name[0] == '.' && showHidden)) { if(dir->d_type == DT_DIR) { returnVector.push_back(OSFileEntry(pathString, dir->d_name, OSFileEntry::TYPE_FOLDER)); } else { returnVector.push_back(OSFileEntry(pathString, dir->d_name, OSFileEntry::TYPE_FILE)); } } } closedir(d); } #endif return returnVector; }