NOT WORKING Volumes, recursive
This commit is contained in:
parent
0bccc31b37
commit
08a50eaad4
1 changed files with 101 additions and 7 deletions
108
main.cpp
108
main.cpp
|
|
@ -11,7 +11,6 @@
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#define DEBUG true
|
|
||||||
|
|
||||||
// [Win32] Our example includes a copy of glfw3.lib pre-compiled with VS2010 to maximize ease of testing and compatibility with old VS compilers.
|
// [Win32] Our example includes a copy of glfw3.lib pre-compiled with VS2010 to maximize ease of testing and compatibility with old VS compilers.
|
||||||
// To link with VS2010-era libraries, VS2015+ requires linking with legacy_stdio_definitions.lib, which we do using this pragma.
|
// To link with VS2010-era libraries, VS2015+ requires linking with legacy_stdio_definitions.lib, which we do using this pragma.
|
||||||
|
|
@ -24,8 +23,19 @@ static void glfw_error_callback(int error, const char* description)
|
||||||
fprintf(stderr, "Glfw Error %d: %s\n", error, description);
|
fprintf(stderr, "Glfw Error %d: %s\n", error, description);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool debug = true;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
std::vector<uint64_t> size;
|
||||||
|
std::vector<char*> name;
|
||||||
|
} directoriesInfo, volumesInfo;
|
||||||
|
|
||||||
|
//TODO UNICORDEO
|
||||||
/* FILE PICKER MOMENTO */
|
/* FILE PICKER MOMENTO */
|
||||||
|
|
||||||
|
/* DIRECTORIES */
|
||||||
|
|
||||||
|
|
||||||
bool retrieveCurrentDirectory(char** currentPath){
|
bool retrieveCurrentDirectory(char** currentPath){
|
||||||
if(GetCurrentDirectory(MAX_PATH, *currentPath)) return true;
|
if(GetCurrentDirectory(MAX_PATH, *currentPath)) return true;
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -76,6 +86,82 @@ int listDirectory(std::string path, std::vector<char*> *directoryContents){
|
||||||
return numFiles;
|
return numFiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* VOLUMES */
|
||||||
|
|
||||||
|
|
||||||
|
//new char*[CharCount * sizeof(WCHAR)
|
||||||
|
/*idea, si quisiera que empezase en punto X del string
|
||||||
|
coger el param opcional y crear un puntero a la posicion X del array para empezar desde ahi
|
||||||
|
int explodePaths(TCHAR* volumePaths, int volumePathLength, int volumePathBufferSize,
|
||||||
|
char separator, std::vector<char*> *dest, , int startingFrom = 0);
|
||||||
|
if (nextOcurrence == NULL) return 0;
|
||||||
|
*/
|
||||||
|
|
||||||
|
int explodePaths(TCHAR* volumePaths, int volumePathsBufferSize, char separator, std::vector<char*> *dest){
|
||||||
|
char* nextOcurrence = strchr(volumePaths, separator);
|
||||||
|
if (nextOcurrence[0] == nextOcurrence[sizeof(TCHAR)]) return 0;
|
||||||
|
|
||||||
|
char* itemPath;
|
||||||
|
itemPath = (char*)calloc(1, volumePathsBufferSize);
|
||||||
|
for (int i = 0; &volumePaths[i] == nextOcurrence; i++) {
|
||||||
|
itemPath[i] = volumePaths[i];
|
||||||
|
}
|
||||||
|
dest->push_back(itemPath);
|
||||||
|
|
||||||
|
|
||||||
|
return explodePaths(nextOcurrence, volumePathsBufferSize, separator, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int listVolumes(std::vector<char*> *onPresentPaths){
|
||||||
|
//int listVolumes(){
|
||||||
|
HANDLE hFind = INVALID_HANDLE_VALUE;
|
||||||
|
char separator = '\0';
|
||||||
|
|
||||||
|
int numVolumes = 0;
|
||||||
|
//Volume name
|
||||||
|
TCHAR volumeName[MAX_PATH];
|
||||||
|
int volumeNameSize = sizeof volumeName / sizeof volumeName[0];
|
||||||
|
//Paths
|
||||||
|
int volumePathsBufferSize = (MAX_PATH + 1) * sizeof(TCHAR);
|
||||||
|
unsigned long volumePathLength;
|
||||||
|
TCHAR volumePaths[volumePathsBufferSize];
|
||||||
|
|
||||||
|
|
||||||
|
hFind = FindFirstVolume(volumeName, volumeNameSize);
|
||||||
|
//if (debug) std::cout << volumeNameSize << std::endl;
|
||||||
|
if (INVALID_HANDLE_VALUE == hFind) return -2;
|
||||||
|
do {
|
||||||
|
//if (debug) std::cout << volumeName << std::endl;
|
||||||
|
|
||||||
|
if(GetVolumePathNamesForVolumeName(volumeName, volumePaths, volumePathsBufferSize, &volumePathLength)){
|
||||||
|
|
||||||
|
if (volumePathLength == 1) { if (debug) std::cout << "Skill Issue" << std::endl; continue; }
|
||||||
|
if (debug) std::cout << volumeName;
|
||||||
|
if (debug) {
|
||||||
|
if(explodePaths(volumePaths, volumePathsBufferSize, separator, onPresentPaths)){
|
||||||
|
if (debug) std::cout << volumePaths << std::endl;
|
||||||
|
for (int i = 0; i < onPresentPaths->size(); i++){
|
||||||
|
std::cout << onPresentPaths->at(i) << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//std::cout << volumePaths << std::endl;
|
||||||
|
}
|
||||||
|
if (debug) std::cout << std::to_string(volumePathLength) + " " ;
|
||||||
|
if (debug) std::cout << "THE END" << std::endl;
|
||||||
|
|
||||||
|
}else{
|
||||||
|
if (debug) std::cout << "cagaste" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
numVolumes++;
|
||||||
|
|
||||||
|
} while (FindNextVolume(hFind, volumeName, volumeNameSize) != 0);
|
||||||
|
|
||||||
|
FindVolumeClose(hFind);
|
||||||
|
return numVolumes;
|
||||||
|
}
|
||||||
|
|
||||||
/* FIN FILE PICKER MOMENTO */
|
/* FIN FILE PICKER MOMENTO */
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -196,6 +282,15 @@ int main(int, char**)
|
||||||
|
|
||||||
{
|
{
|
||||||
ImGui::Begin("File Picker in 4K");
|
ImGui::Begin("File Picker in 4K");
|
||||||
|
//TODO test listar volumenes
|
||||||
|
static bool isListVolumesAdequate = true;
|
||||||
|
if (debug && isListVolumesAdequate) {
|
||||||
|
isListVolumesAdequate = false;
|
||||||
|
std::cout << isListVolumesAdequate << std::endl;
|
||||||
|
std::vector<char*> onPresentPaths;
|
||||||
|
listVolumes(&onPresentPaths);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
|
||||||
static bool renderListbox = true;
|
static bool renderListbox = true;
|
||||||
//cursed C momento: necesario ptr en otra var para mandar a char** de firma
|
//cursed C momento: necesario ptr en otra var para mandar a char** de firma
|
||||||
|
|
@ -207,20 +302,20 @@ int main(int, char**)
|
||||||
std::vector<char*> directoryContents;
|
std::vector<char*> directoryContents;
|
||||||
static int numFiles = 0;
|
static int numFiles = 0;
|
||||||
|
|
||||||
if (DEBUG) ImGui::Text("%s primir", currentPath);
|
if (debug) ImGui::Text("%s primir", currentPath);
|
||||||
|
|
||||||
if(renderListbox) {
|
if(renderListbox) {
|
||||||
if (DEBUG) std::cout << "renderiso";
|
if (debug) std::cout << "renderiso" << std::endl;
|
||||||
renderListbox = false;
|
renderListbox = false;
|
||||||
if(!retrieveCurrentDirectory(&ptr)) {
|
if(!retrieveCurrentDirectory(&ptr)) {
|
||||||
if (DEBUG) std::cout << "pencaste";
|
if (debug) std::cout << "pencaste";
|
||||||
goto filepickerFailure;
|
goto filepickerFailure;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
numFiles = (listDirectory(std::string(currentPath), &directoryContents));
|
numFiles = (listDirectory(std::string(currentPath), &directoryContents));
|
||||||
//std::cout << numFiles;
|
//std::cout << numFiles;
|
||||||
if (numFiles < 0) {
|
if (numFiles < 0) {
|
||||||
if (DEBUG) std::cout << "pencaste 2 el repencazo";
|
if (debug) std::cout << "pencaste 2 el repencazo";
|
||||||
goto filepickerFailure;
|
goto filepickerFailure;
|
||||||
}
|
}
|
||||||
displayContents = std::move(directoryContents);
|
displayContents = std::move(directoryContents);
|
||||||
|
|
@ -228,10 +323,9 @@ int main(int, char**)
|
||||||
|
|
||||||
if(numFiles > 0){
|
if(numFiles > 0){
|
||||||
ImGui::Text("Select a file:");
|
ImGui::Text("Select a file:");
|
||||||
if (DEBUG) ImGui::Text("%s %d", currentPath, currentItemIdx);
|
if (debug) ImGui::Text("%s %d", currentPath, currentItemIdx);
|
||||||
if (ImGui::BeginListBox("fpLb", ImVec2(-FLT_MIN, 25 * ImGui::GetTextLineHeightWithSpacing()))){
|
if (ImGui::BeginListBox("fpLb", ImVec2(-FLT_MIN, 25 * ImGui::GetTextLineHeightWithSpacing()))){
|
||||||
for (int i = 0; i < numFiles; i++) {
|
for (int i = 0; i < numFiles; i++) {
|
||||||
// ImGui::Selectable(directoryContents.at(i), false);
|
|
||||||
|
|
||||||
const bool isSelected = (currentItemIdx == i);
|
const bool isSelected = (currentItemIdx == i);
|
||||||
if (ImGui::Selectable(displayContents.at(i), isSelected))
|
if (ImGui::Selectable(displayContents.at(i), isSelected))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue