![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /proc/thread-self/root/usr/share/emscripten/tests/bullet/Extras/glui/ |
Upload File : |
/**************************************************************************** GLUI User Interface Toolkit --------------------------- glui_filebrowser.cpp - GLUI_FileBrowser control class -------------------------------------------------- Copyright (c) 1998 Paul Rademacher This program is freely distributable without licensing fees and is provided without guarantee or warrantee expressed or implied. This program is -not- in the public domain. *****************************************************************************/ #include "GL/glui.h" #include "glui_internal.h" #include <sys/types.h> #ifdef __GNUC__ #include <dirent.h> #include <unistd.h> #endif #ifdef _WIN32 #include <windows.h> #endif #include <sys/stat.h> GLUI_FileBrowser::GLUI_FileBrowser( GLUI_Node *parent, const char *name, int type, int id, GLUI_CB cb) { common_init(); set_name( name ); user_id = id; int_val = type; callback = cb; parent->add_control( this ); list = new GLUI_List(this, true, 1); list->set_object_callback( GLUI_FileBrowser::dir_list_callback, this ); list->set_click_type(GLUI_DOUBLE_CLICK); this->fbreaddir(this->current_dir.c_str()); } /****************************** GLUI_FileBrowser::draw() **********/ void GLUI_FileBrowser::dir_list_callback(GLUI_Control *glui_object) { GLUI_List *list = glui_object->dynamicCastGLUI_List(); if (!list) return; GLUI_FileBrowser* me = list->associated_object->dynamicCastGLUI_FileBrowser(); if (!me) return; int this_item; const char *selected; this_item = list->get_current_item(); if (this_item > 0) { /* file or directory selected */ selected = list->get_item_ptr( this_item )->text.c_str(); if (selected[0] == '/' || selected[0] == '\\') { if (me->allow_change_dir) { #ifdef __GNUC__ chdir(selected+1); #endif #ifdef _WIN32 SetCurrentDirectory(selected+1); #endif me->fbreaddir("."); } } else { me->file = selected; me->execute_callback(); } } } void GLUI_FileBrowser::fbreaddir(const char *d) { GLUI_String item; int i = 0; if (!d) return; #ifdef _WIN32 WIN32_FIND_DATA FN; HANDLE hFind; //char search_arg[MAX_PATH], new_file_path[MAX_PATH]; //sprintf(search_arg, "%s\\*.*", path_name); hFind = FindFirstFile("*.*", &FN); if (list) { list->delete_all(); if (hFind != INVALID_HANDLE_VALUE) { do { int len = int(strlen(FN.cFileName)); if (FN.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { item = '\\'; item += FN.cFileName; } else { item = FN.cFileName; } list->add_item(i,item.c_str()); i++; } while (FindNextFile(hFind, &FN) != 0); if (GetLastError() == ERROR_NO_MORE_FILES) FindClose(&FN); else perror("fbreaddir"); } } #elif defined(__GNUC__) DIR *dir; struct dirent *dirp; struct stat dr; if (list) { list->delete_all(); if ((dir = opendir(d)) == NULL) perror("fbreaddir:"); else { while ((dirp = readdir(dir)) != NULL) /* open directory */ { if (!lstat(dirp->d_name,&dr) && S_ISDIR(dr.st_mode)) /* dir is directory */ item = dirp->d_name + GLUI_String("/"); else item = dirp->d_name; list->add_item(i,item.c_str()); i++; } closedir(dir); } } #endif } void ProcessFiles(const char *path_name) { } void GLUI_FileBrowser::set_w(int w) { if (list) list->set_w(w); } void GLUI_FileBrowser::set_h(int h) { if (list) list->set_h(h); }