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 <stdio.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.
|
||||
// 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);
|
||||
}
|
||||
|
||||
bool debug = true;
|
||||
|
||||
typedef struct {
|
||||
std::vector<uint64_t> size;
|
||||
std::vector<char*> name;
|
||||
} directoriesInfo, volumesInfo;
|
||||
|
||||
//TODO UNICORDEO
|
||||
/* FILE PICKER MOMENTO */
|
||||
|
||||
/* DIRECTORIES */
|
||||
|
||||
|
||||
bool retrieveCurrentDirectory(char** currentPath){
|
||||
if(GetCurrentDirectory(MAX_PATH, *currentPath)) return true;
|
||||
return false;
|
||||
|
|
@ -75,6 +85,82 @@ int listDirectory(std::string path, std::vector<char*> *directoryContents){
|
|||
FindClose(hFind);
|
||||
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 */
|
||||
|
||||
|
|
@ -196,6 +282,15 @@ int main(int, char**)
|
|||
|
||||
{
|
||||
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;
|
||||
//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;
|
||||
static int numFiles = 0;
|
||||
|
||||
if (DEBUG) ImGui::Text("%s primir", currentPath);
|
||||
if (debug) ImGui::Text("%s primir", currentPath);
|
||||
|
||||
if(renderListbox) {
|
||||
if (DEBUG) std::cout << "renderiso";
|
||||
if (debug) std::cout << "renderiso" << std::endl;
|
||||
renderListbox = false;
|
||||
if(!retrieveCurrentDirectory(&ptr)) {
|
||||
if (DEBUG) std::cout << "pencaste";
|
||||
if (debug) std::cout << "pencaste";
|
||||
goto filepickerFailure;
|
||||
}
|
||||
//
|
||||
numFiles = (listDirectory(std::string(currentPath), &directoryContents));
|
||||
//std::cout << numFiles;
|
||||
if (numFiles < 0) {
|
||||
if (DEBUG) std::cout << "pencaste 2 el repencazo";
|
||||
if (debug) std::cout << "pencaste 2 el repencazo";
|
||||
goto filepickerFailure;
|
||||
}
|
||||
displayContents = std::move(directoryContents);
|
||||
|
|
@ -228,10 +323,9 @@ int main(int, char**)
|
|||
|
||||
if(numFiles > 0){
|
||||
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()))){
|
||||
for (int i = 0; i < numFiles; i++) {
|
||||
// ImGui::Selectable(directoryContents.at(i), false);
|
||||
|
||||
const bool isSelected = (currentItemIdx == i);
|
||||
if (ImGui::Selectable(displayContents.at(i), isSelected))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue