929 lines
		
	
	
		
			50 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			929 lines
		
	
	
		
			50 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								[<img src="https://github.com/aiekick/ImGuiFileDialog/workflows/Win/badge.svg" width="150"/>](https://github.com/aiekick/ImGuiFileDialog/actions?query=workflow%3AWin)
							 | 
						||
| 
								 | 
							
								[<img src="https://github.com/aiekick/ImGuiFileDialog/workflows/Linux/badge.svg" width="165"/>](https://github.com/aiekick/ImGuiFileDialog/actions?query=workflow%3ALinux)
							 | 
						||
| 
								 | 
							
								[<img src="https://github.com/aiekick/ImGuiFileDialog/workflows/Osx/badge.svg" width="150"/>](https://github.com/aiekick/ImGuiFileDialog/actions?query=workflow%3AOsx)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# ImGuiFileDialog
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Purpose
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog is a file selection dialog built for (and using only) [Dear ImGui](https://github.com/ocornut/imgui).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								My primary goal was to have a custom pane with widgets according to file extension. This was not possible using other
							 | 
						||
| 
								 | 
							
								solutions.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Structure
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* The library is in [Lib_Only branch](https://github.com/aiekick/ImGuiFileDialog/tree/Lib_Only)
							 | 
						||
| 
								 | 
							
								* A demo app can be found the [master branch](https://github.com/aiekick/ImGuiFileDialog/tree/master)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This library is designed to be dropped into your source code rather than compiled separately.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								From your project directory:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								mkdir lib    <or 3rdparty, or externals, etc.>
							 | 
						||
| 
								 | 
							
								cd lib
							 | 
						||
| 
								 | 
							
								git clone https://github.com/aiekick/ImGuiFileDialog.git
							 | 
						||
| 
								 | 
							
								git checkout Lib_Only
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								These commands create a `lib` directory where you can store any third-party dependencies used in your project, downloads
							 | 
						||
| 
								 | 
							
								the ImGuiFileDialog git repository and checks out the Lib_Only branch where the actual library code is located.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Add `lib/ImGuiFileDialog/ImGuiFileDialog.cpp` to your build system and include
							 | 
						||
| 
								 | 
							
								`lib/ImGuiFileDialog/ImGuiFileDialog.h` in your source code. ImGuiFileLib will compile with and be included directly in
							 | 
						||
| 
								 | 
							
								your executable file.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If, for example, your project uses cmake, look for a line like `add_executable(my_project_name main.cpp)`
							 | 
						||
| 
								 | 
							
								and change it to `add_executable(my_project_name lib/ImGuiFileDialog/ImGuiFileDialog.cpp main.cpp)`. This tells the
							 | 
						||
| 
								 | 
							
								compiler where to find the source code declared in `ImGuiFileDialog.h` which you included in your own source code.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Requirements:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You must also, of course, have added [Dear ImGui](https://github.com/ocornut/imgui) to your project for this to work at
							 | 
						||
| 
								 | 
							
								all.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[dirent v1.23](https://github.com/tronkko/dirent/tree/v1.23) is required to use ImGuiFileDialog under Windows. It is
							 | 
						||
| 
								 | 
							
								included in the Lib_Only branch for your convenience.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Features
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- Separate system for call and display
							 | 
						||
| 
								 | 
							
								    - Can have many function calls with different parameters for one display function, for example
							 | 
						||
| 
								 | 
							
								- Can create a custom pane with any widgets via function binding
							 | 
						||
| 
								 | 
							
								    - This pane can block the validation of the dialog
							 | 
						||
| 
								 | 
							
								    - Can also display different things according to current filter and UserDatas
							 | 
						||
| 
								 | 
							
								- Advanced file style for file/dir/link coloring / icons / font
							 | 
						||
| 
								 | 
							
								- Multi-selection (ctrl/shift + click) :
							 | 
						||
| 
								 | 
							
								    - 0 => Infinite
							 | 
						||
| 
								 | 
							
								    - 1 => One file (default)
							 | 
						||
| 
								 | 
							
								    - n => n files
							 | 
						||
| 
								 | 
							
								- Compatible with MacOs, Linux, Windows
							 | 
						||
| 
								 | 
							
								    - Windows version can list drives
							 | 
						||
| 
								 | 
							
								- Supports modal or standard dialog types
							 | 
						||
| 
								 | 
							
								- Select files or directories
							 | 
						||
| 
								 | 
							
								- Filter groups and custom filter names
							 | 
						||
| 
								 | 
							
								- Keyboard navigation (arrows, backspace, enter)
							 | 
						||
| 
								 | 
							
								- Exploring by entering characters (case insensitive)
							 | 
						||
| 
								 | 
							
								- Directory bookmarks
							 | 
						||
| 
								 | 
							
								- Directory manual entry (right click on any path element)
							 | 
						||
| 
								 | 
							
								- Optional 'Confirm to Overwrite" dialog if file exists
							 | 
						||
| 
								 | 
							
								- Thumbnails Display (agnostic way for compatibility with any backend, sucessfully tested with OpenGl and Vulkan)
							 | 
						||
| 
								 | 
							
								- C Api (succesfully tested with CimGui)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Singleton Pattern vs. Multiple Instances
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Single Dialog :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If you only need to display one file dialog at a time, use ImGuiFileDialog's singleton pattern to avoid explicitly
							 | 
						||
| 
								 | 
							
								declaring an object:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->method_of_your_choice();
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Multiple Dialogs :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If you need to have multiple file dialogs open at once, declare each dialog explicity:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog instance_a;
							 | 
						||
| 
								 | 
							
								instance_a.method_of_your_choice();
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog instance_b;
							 | 
						||
| 
								 | 
							
								instance_b.method_of_your_choice();
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Simple Dialog :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								void drawGui()
							 | 
						||
| 
								 | 
							
								{ 
							 | 
						||
| 
								 | 
							
								  // open Dialog Simple
							 | 
						||
| 
								 | 
							
								  if (ImGui::Button("Open File Dialog"))
							 | 
						||
| 
								 | 
							
								    ImGuiFileDialog::Instance()->OpenDialog("ChooseFileDlgKey", "Choose File", ".cpp,.h,.hpp", ".");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // display
							 | 
						||
| 
								 | 
							
								  if (ImGuiFileDialog::Instance()->Display("ChooseFileDlgKey")) 
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    // action if OK
							 | 
						||
| 
								 | 
							
								    if (ImGuiFileDialog::Instance()->IsOk())
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      std::string filePathName = ImGuiFileDialog::Instance()->GetFilePathName();
							 | 
						||
| 
								 | 
							
								      std::string filePath = ImGuiFileDialog::Instance()->GetCurrentPath();
							 | 
						||
| 
								 | 
							
								      // action
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    // close
							 | 
						||
| 
								 | 
							
								    ImGuiFileDialog::Instance()->Close();
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Directory Chooser :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								To have a directory chooser, set the file extension filter to nullptr:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->OpenDialog("ChooseDirDlgKey", "Choose a Directory", nullptr, ".");
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								In this mode you can select any directory with one click and open a directory with a double-click.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Dialog with Custom Pane :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The signature of the custom pane callback is:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### for C++ :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								void(const char *vFilter, IGFDUserDatas vUserDatas, bool *vCantContinue)
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### for C :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```c
							 | 
						||
| 
								 | 
							
								void(const char *vFilter, void* vUserDatas, bool *vCantContinue)
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Example :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								static bool canValidateDialog = false;
							 | 
						||
| 
								 | 
							
								inline void InfosPane(cosnt char *vFilter, IGFDUserDatas vUserDatas, bool *vCantContinue) // if vCantContinue is false, the user cant validate the dialog
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    ImGui::TextColored(ImVec4(0, 1, 1, 1), "Infos Pane");
							 | 
						||
| 
								 | 
							
								    ImGui::Text("Selected Filter : %s", vFilter.c_str());
							 | 
						||
| 
								 | 
							
								    if (vUserDatas)
							 | 
						||
| 
								 | 
							
								        ImGui::Text("UserDatas : %s", vUserDatas);
							 | 
						||
| 
								 | 
							
								    ImGui::Checkbox("if not checked you cant validate the dialog", &canValidateDialog);
							 | 
						||
| 
								 | 
							
								    if (vCantContinue)
							 | 
						||
| 
								 | 
							
								        *vCantContinue = canValidateDialog;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void drawGui()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  // open Dialog with Pane
							 | 
						||
| 
								 | 
							
								  if (ImGui::Button("Open File Dialog with a custom pane"))
							 | 
						||
| 
								 | 
							
								    ImGuiFileDialog::Instance()->OpenDialog("ChooseFileDlgKey", "Choose File", ".cpp,.h,.hpp",
							 | 
						||
| 
								 | 
							
								            ".", "", std::bind(&InfosPane, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3), 350, 1, UserDatas("InfosPane"));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // display and action if ok
							 | 
						||
| 
								 | 
							
								  if (ImGuiFileDialog::Instance()->Display("ChooseFileDlgKey")) 
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    if (ImGuiFileDialog::Instance()->IsOk())
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        std::string filePathName = ImGuiFileDialog::Instance()->GetFilePathName();
							 | 
						||
| 
								 | 
							
								        std::string filePath = ImGuiFileDialog::Instance()->GetCurrentPath();
							 | 
						||
| 
								 | 
							
								        std::string filter = ImGuiFileDialog::Instance()->GetCurrentFilter();
							 | 
						||
| 
								 | 
							
								        // here convert from string because a string was passed as a userDatas, but it can be what you want
							 | 
						||
| 
								 | 
							
								        std::string userDatas;
							 | 
						||
| 
								 | 
							
								        if (ImGuiFileDialog::Instance()->GetUserDatas())
							 | 
						||
| 
								 | 
							
								            userDatas = std::string((const char*)ImGuiFileDialog::Instance()->GetUserDatas()); 
							 | 
						||
| 
								 | 
							
								        auto selection = ImGuiFileDialog::Instance()->GetSelection(); // multiselection
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // action
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    // close
							 | 
						||
| 
								 | 
							
								    ImGuiFileDialog::Instance()->Close();
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## File Style : Custom icons and colors by extension
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can define style for files/dirs/links in many ways :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								the style can be colors, icons and fonts
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								the general form is :
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(styleType, criteria, color, icon, font);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								styleType can be thoses :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								IGFD_FileStyleByTypeFile				// define style for all files
							 | 
						||
| 
								 | 
							
								IGFD_FileStyleByTypeDir					// define style for all dir
							 | 
						||
| 
								 | 
							
								IGFD_FileStyleByTypeLink				// define style for all link
							 | 
						||
| 
								 | 
							
								IGFD_FileStyleByExtention				// define style by extention, for files or links
							 | 
						||
| 
								 | 
							
								IGFD_FileStyleByFullName				// define style for particular file/dir/link full name (filename + extention)
							 | 
						||
| 
								 | 
							
								IGFD_FileStyleByContainedInFullName		// define style for file/dir/link when criteria is contained in full name
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog accepts icon font macros as well as text tags for file types.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[ImGuIFontStudio](https://github.com/aiekick/ImGuiFontStudio) is useful here. I wrote it to make it easy to create 
							 | 
						||
| 
								 | 
							
								custom icon sets for use with Dear ImGui.  
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								It is inspired by [IconFontCppHeaders](https://github.com/juliettef/IconFontCppHeaders), which can also be used with 
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								samples :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								// define style by file extention and Add an icon for .png files 
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtention, ".png", ImVec4(0.0f, 1.0f, 1.0f, 0.9f), ICON_IGFD_FILE_PIC, font1);
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtention, ".gif", ImVec4(0.0f, 1.0f, 0.5f, 0.9f), "[GIF]");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// define style for all directories
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByTypeDir, "", ImVec4(0.5f, 1.0f, 0.9f, 0.9f), ICON_IGFD_FOLDER);
							 | 
						||
| 
								 | 
							
								// can be for a specific directory
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByTypeDir, ".git", ImVec4(0.5f, 1.0f, 0.9f, 0.9f), ICON_IGFD_FOLDER);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// define style for all files
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByTypeFile, "", ImVec4(0.5f, 1.0f, 0.9f, 0.9f), ICON_IGFD_FILE);
							 | 
						||
| 
								 | 
							
								// can be for a specific file
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByTypeFile, ".git", ImVec4(0.5f, 1.0f, 0.9f, 0.9f), ICON_IGFD_FILE);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// define style for all links
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByTypeLink, "", ImVec4(0.5f, 1.0f, 0.9f, 0.9f));
							 | 
						||
| 
								 | 
							
								// can be for a specific link
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByTypeLink, "Readme.md", ImVec4(0.5f, 1.0f, 0.9f, 0.9f));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// define style for any files/dirs/links by fullname
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByFullName, "doc", ImVec4(0.9f, 0.2f, 0.0f, 0.9f), ICON_IGFD_FILE_PIC);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// define style by file who are containing this string
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByContainedInFullName, ".git", ImVec4(0.9f, 0.2f, 0.0f, 0.9f), ICON_IGFD_BOOKMARK);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								all of theses can be miwed with IGFD_FileStyleByTypeDir / IGFD_FileStyleByTypeFile / IGFD_FileStyleByTypeLink
							 | 
						||
| 
								 | 
							
								like theses by ex :
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByTypeDir | IGFD_FileStyleByContainedInFullName, ".git", ImVec4(0.9f, 0.2f, 0.0f, 0.9f), ICON_IGFD_BOOKMARK);
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByTypeFile | IGFD_FileStyleByFullName, "cmake", ImVec4(0.5f, 0.8f, 0.5f, 0.9f), ICON_IGFD_SAVE);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								this sample code of [master/main.cpp](https://github.com/aiekick/ImGuiFileDialog/blob/master/main.cpp) produce the picture above :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtention, ".cpp", ImVec4(1.0f, 1.0f, 0.0f, 0.9f));
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtention, ".h", ImVec4(0.0f, 1.0f, 0.0f, 0.9f));
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtention, ".hpp", ImVec4(0.0f, 0.0f, 1.0f, 0.9f));
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtention, ".md", ImVec4(1.0f, 0.0f, 1.0f, 0.9f));
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtention, ".png", ImVec4(0.0f, 1.0f, 1.0f, 0.9f), ICON_IGFD_FILE_PIC); // add an icon for the filter type
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtention, ".gif", ImVec4(0.0f, 1.0f, 0.5f, 0.9f), "[GIF]"); // add an text for a filter type
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByTypeDir, nullptr, ImVec4(0.5f, 1.0f, 0.9f, 0.9f), ICON_IGFD_FOLDER); // for all dirs
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByTypeFile, "CMakeLists.txt", ImVec4(0.1f, 0.5f, 0.5f, 0.9f), ICON_IGFD_ADD);
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByFullName, "doc", ImVec4(0.9f, 0.2f, 0.0f, 0.9f), ICON_IGFD_FILE_PIC);
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByTypeDir | IGFD_FileStyleByContainedInFullName, ".git", ImVec4(0.9f, 0.2f, 0.0f, 0.9f), ICON_IGFD_BOOKMARK);
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByTypeFile | IGFD_FileStyleByContainedInFullName, ".git", ImVec4(0.5f, 0.8f, 0.5f, 0.9f), ICON_IGFD_SAVE);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Filter Collections
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can define a custom filter name that corresponds to a group of filters using this syntax:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```custom_name1{filter1,filter2,filter3},custom_name2{filter1,filter2},filter1```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								When you select custom_name1, filters 1 to 3 will be applied. The characters `{` and `}` are reserved. Don't use them
							 | 
						||
| 
								 | 
							
								for filter names.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								this code :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								const char *filters = "Source files (*.cpp *.h *.hpp){.cpp,.h,.hpp},Image files (*.png *.gif *.jpg *.jpeg){.png,.gif,.jpg,.jpeg},.md";
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->OpenDialog("ChooseFileDlgKey", ICON_IMFDLG_FOLDER_OPEN " Choose a File", filters, ".");
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								will produce :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Multi Selection
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can define in OpenDialog/OpenModal call the count file you want to select :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- 0 => infinite
							 | 
						||
| 
								 | 
							
								- 1 => one file only (default)
							 | 
						||
| 
								 | 
							
								- n => n files only
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								See the define at the end of these funcs after path.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->OpenDialog("ChooseFileDlgKey", "Choose File", ".*,.cpp,.h,.hpp", ".");
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->OpenDialog("ChooseFileDlgKey", "Choose 1 File", ".*,.cpp,.h,.hpp", ".", 1);
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->OpenDialog("ChooseFileDlgKey", "Choose 5 File", ".*,.cpp,.h,.hpp", ".", 5);
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->OpenDialog("ChooseFileDlgKey", "Choose many File", ".*,.cpp,.h,.hpp", ".", 0);
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->OpenDialog("ChooseFileDlgKey", "Choose File", ".png,.jpg",
							 | 
						||
| 
								 | 
							
								   ".", "", std::bind(&InfosPane, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3), 350, 1, "SaveFile"); // 1 file
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## File Dialog Constraints
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can set the minimum and/or maximum size of the dialog:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								ImVec2 maxSize = ImVec2((float)display_w, (float)display_h);  // The full display area
							 | 
						||
| 
								 | 
							
								ImVec2 minSize = maxSize * 0.5f;  // Half the display area
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->Display("ChooseFileDlgKey", ImGuiWindowFlags_NoCollapse, minSize, maxSize);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Detail View Mode
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Dear ImGui just released an improved table API. If your downloaded version of Dear ImGui includes the beta version of
							 | 
						||
| 
								 | 
							
								table support (included for some time now) you can enable table support by uncommenting `#define USE_IMGUI_TABLES` in
							 | 
						||
| 
								 | 
							
								you custom config file (CustomImGuiFileDialogConfig.h)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If your version of Dear ImGui has finalized tables support, it will be enabled by default.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Exploring by keys
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can activate this feature by uncommenting `#define USE_EXPLORATION_BY_KEYS`
							 | 
						||
| 
								 | 
							
								in your custom config file (CustomImGuiFileDialogConfig.h)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can also uncomment the next lines to define navigation keys:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* IGFD_KEY_UP => Up key for explore to the top
							 | 
						||
| 
								 | 
							
								* IGFD_KEY_DOWN => Down key for explore to the bottom
							 | 
						||
| 
								 | 
							
								* IGFD_KEY_ENTER => Enter key for open directory
							 | 
						||
| 
								 | 
							
								* IGFD_KEY_BACKSPACE => BackSpace for comming back to the last directory
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can also jump to a point in the file list by pressing the corresponding key of the first filename character.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								As you see the current item is flashed by default for 1 second. You can define the flashing lifetime with the function
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetFlashingAttenuationInSeconds(1.0f);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Bookmarks
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can create/edit/call path bookmarks and load/save them.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Activate this feature by uncommenting: `#define USE_BOOKMARK` in your custom config file (CustomImGuiFileDialogConfig.h)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								More customization options:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								#define bookmarkPaneWith 150.0f => width of the bookmark pane
							 | 
						||
| 
								 | 
							
								#define IMGUI_TOGGLE_BUTTON ToggleButton => customize the Toggled button (button stamp must be : (const char* label, bool *toggle)
							 | 
						||
| 
								 | 
							
								#define bookmarksButtonString "Bookmark" => the text in the toggle button
							 | 
						||
| 
								 | 
							
								#define bookmarksButtonHelpString "Bookmark" => the helper text when mouse over the button
							 | 
						||
| 
								 | 
							
								#define addBookmarkButtonString "+" => the button for add a bookmark
							 | 
						||
| 
								 | 
							
								#define removeBookmarkButtonString "-" => the button for remove the selected bookmark
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* You can select each bookmark to edit the displayed name corresponding to a path
							 | 
						||
| 
								 | 
							
								* Double-click on the label to apply the bookmark
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can also serialize/deserialize bookmarks (for example to load/save from/to a file):
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								Load => ImGuiFileDialog::Instance()->DeserializeBookmarks(bookmarString);
							 | 
						||
| 
								 | 
							
								Save => std::string bookmarkString = ImGuiFileDialog::Instance()->SerializeBookmarks();
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								(please see example code for details)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Path Edition :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Right clicking on any path element button allows the user to manually edit the path from that portion of the tree.
							 | 
						||
| 
								 | 
							
								Pressing the completion key (GLFW uses `enter` by default) validates the new path. Pressing the cancel key (GLFW
							 | 
						||
| 
								 | 
							
								uses`escape` by default) cancels the manual entry and restores the original path.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Here's the manual entry operation in action:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Confirm Overwrite Dialog :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If you want avoid overwriting files after selection, ImGuiFileDialog can show a dialog to confirm or cancel the
							 | 
						||
| 
								 | 
							
								operation.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								To do so, define the flag ImGuiFileDialogFlags_ConfirmOverwrite in your call to OpenDialog/OpenModal.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								By default this flag is not set since there is no pre-defined way to define if a dialog will be for Open or Save
							 | 
						||
| 
								 | 
							
								behavior. (by design! :) )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Example code For Standard Dialog :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->OpenDialog("ChooseFileDlgKey",
							 | 
						||
| 
								 | 
							
								    ICON_IGFD_SAVE " Choose a File", filters,
							 | 
						||
| 
								 | 
							
								    ".", "", 1, nullptr, ImGuiFileDialogFlags_ConfirmOverwrite);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Example code For Modal Dialog :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->OpenModal("ChooseFileDlgKey",
							 | 
						||
| 
								 | 
							
								    ICON_IGFD_SAVE " Choose a File", filters,
							 | 
						||
| 
								 | 
							
								    ".", "", 1, nullptr, ImGuiFileDialogFlags_ConfirmOverwrite);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This dialog will only verify the file in the file field, not with `GetSelection()`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The confirmation dialog will be a non-movable modal (input blocking) dialog displayed in the middle of the current
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog window.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								As usual, you can customize the dialog in your custom config file (CustomImGuiFileDialogConfig.h in this example)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Uncomment these line for customization options:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								//#define OverWriteDialogTitleString "The file Already Exist !"
							 | 
						||
| 
								 | 
							
								//#define OverWriteDialogMessageString "Would you like to OverWrite it ?"
							 | 
						||
| 
								 | 
							
								//#define OverWriteDialogConfirmButtonString "Confirm"
							 | 
						||
| 
								 | 
							
								//#define OverWriteDialogCancelButtonString "Cancel"
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								See the result :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Open / Save dialog Behavior :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog uses the same code internally for Open and Save dialogs. To distinguish between them access the various
							 | 
						||
| 
								 | 
							
								data return functions depending on what the dialog is doing.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								When selecting an existing file (for example, a Load or Open dialog), use
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								std::map<std::string, std::string> GetSelection(); // Returns selection via a map<FileName, FilePathName>
							 | 
						||
| 
								 | 
							
								UserDatas GetUserDatas();                          // Get user data provided by the Open dialog
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								To selecting a new file (for example, a Save As... dialog), use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								std::string GetFilePathName();                     // Returns the content of the selection field with current file extension and current path
							 | 
						||
| 
								 | 
							
								std::string GetCurrentFileName();                  // Returns the content of the selection field with current file extension but no path
							 | 
						||
| 
								 | 
							
								std::string GetCurrentPath();                      // Returns current path only
							 | 
						||
| 
								 | 
							
								std::string GetCurrentFilter();                    // The file extension
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Thumbnails Display
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can now, display thumbnails of pictures.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The file resize use stb/image so the following files extentions are supported :
							 | 
						||
| 
								 | 
							
								 * .png (tested sucessfully)
							 | 
						||
| 
								 | 
							
								 * .bmp (tested sucessfully)
							 | 
						||
| 
								 | 
							
								 * .tga (tested sucessfully)
							 | 
						||
| 
								 | 
							
								 * .jpg (tested sucessfully)
							 | 
						||
| 
								 | 
							
								 * .jpeg (tested sucessfully)
							 | 
						||
| 
								 | 
							
								 * .gif (tested sucessfully_ but not animation just first frame)
							 | 
						||
| 
								 | 
							
								 * .psd (not tested)
							 | 
						||
| 
								 | 
							
								 * .pic (not tested)
							 | 
						||
| 
								 | 
							
								 * .ppm (not tested)
							 | 
						||
| 
								 | 
							
								 * .pgm (not tested)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Corresponding to your backend (ex : OpenGl) you need to define two callbacks :
							 | 
						||
| 
								 | 
							
								* the first is a callback who will be called by ImGuiFileDialog for create the backend texture
							 | 
						||
| 
								 | 
							
								* the second is a callback who will be called by ImGuiFileDialog for destroy the backend texture
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								After that you need to call the function who is responsible to create / destroy the textures.
							 | 
						||
| 
								 | 
							
								this function must be called in your GPU Rendering zone for avoid destroying of used texture.
							 | 
						||
| 
								 | 
							
								if you do that at the same place of your imgui code, some backend can crash your app, by ex with vulkan.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ex, for opengl :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								// Create thumbnails texture
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetCreateThumbnailCallback([](IGFD_Thumbnail_Info *vThumbnail_Info) -> void
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									if (vThumbnail_Info && 
							 | 
						||
| 
								 | 
							
										vThumbnail_Info->isReadyToUpload && 
							 | 
						||
| 
								 | 
							
										vThumbnail_Info->textureFileDatas)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										GLuint textureId = 0;
							 | 
						||
| 
								 | 
							
										glGenTextures(1, &textureId);
							 | 
						||
| 
								 | 
							
										vThumbnail_Info->textureID = (void*)textureId;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										glBindTexture(GL_TEXTURE_2D, textureId);
							 | 
						||
| 
								 | 
							
										glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
							 | 
						||
| 
								 | 
							
										glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
							 | 
						||
| 
								 | 
							
										glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
							 | 
						||
| 
								 | 
							
										glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
							 | 
						||
| 
								 | 
							
										glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
							 | 
						||
| 
								 | 
							
											(GLsizei)vThumbnail_Info->textureWidth, (GLsizei)vThumbnail_Info->textureHeight, 
							 | 
						||
| 
								 | 
							
											0, GL_RGBA, GL_UNSIGNED_BYTE, vThumbnail_Info->textureFileDatas);
							 | 
						||
| 
								 | 
							
										glFinish();
							 | 
						||
| 
								 | 
							
										glBindTexture(GL_TEXTURE_2D, 0);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										delete[] vThumbnail_Info->textureFileDatas;
							 | 
						||
| 
								 | 
							
										vThumbnail_Info->textureFileDatas = nullptr;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										vThumbnail_Info->isReadyToUpload = false;
							 | 
						||
| 
								 | 
							
										vThumbnail_Info->isReadyToDisplay = true;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								// Destroy thumbnails texture
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->SetDestroyThumbnailCallback([](IGFD_Thumbnail_Info* vThumbnail_Info)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									if (vThumbnail_Info)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										GLuint texID = (GLuint)vThumbnail_Info->textureID;
							 | 
						||
| 
								 | 
							
										glDeleteTextures(1, &texID);
							 | 
						||
| 
								 | 
							
										glFinish();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								// GPU Rendering Zone // To call for Create/ Destroy Textures
							 | 
						||
| 
								 | 
							
								ImGuiFileDialog::Instance()->ManageGPUThumbnails();
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## How to Integrate ImGuiFileDialog in your project
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Customize ImGuiFileDialog :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can customize many aspects of ImGuiFileDialog by overriding `ImGuiFileDialogConfig.h`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								To enable your customizations, define the preprocessor directive CUSTOM_IMGUIFILEDIALOG_CONFIG with the path of your
							 | 
						||
| 
								 | 
							
								custom config file. This path must be relative to the directory where you put the ImGuiFileDialog module.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This operation is demonstrated in `CustomImGuiFileDialog.h` in the example project to:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* Have a custom icon font instead of labels for buttons or message titles
							 | 
						||
| 
								 | 
							
								* Customize the button text (the button call signature must be the same, by the way! :)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The custom icon font used in the example code ([CustomFont.cpp](CustomFont.cpp) and [CustomFont.h](CustomFont.h)) was made
							 | 
						||
| 
								 | 
							
								with [ImGuiFontStudio](https://github.com/aiekick/ImGuiFontStudio), which I wrote. :)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ImGuiFontStudio uses ImGuiFileDialog! Check it out.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Api's C/C++ :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### C++.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								this is the base API :
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								static FileDialog* Instance()                      // Singleton for easier accces form anywhere but only one dialog at a time
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								FileDialog();                                      // ImGuiFileDialog Constructor. can be used for have many dialog at same tiem (not possible with singleton)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// standard dialog
							 | 
						||
| 
								 | 
							
								void OpenDialog(                                   // open simple dialog (path and fileName can be specified)
							 | 
						||
| 
								 | 
							
								    const std::string& vKey,                       // key dialog
							 | 
						||
| 
								 | 
							
								    const std::string& vTitle,                     // title
							 | 
						||
| 
								 | 
							
								    const char* vFilters,                          // filters
							 | 
						||
| 
								 | 
							
								    const std::string& vPath,                      // path
							 | 
						||
| 
								 | 
							
								    const std::string& vFileName,                  // defaut file name
							 | 
						||
| 
								 | 
							
								    const int& vCountSelectionMax = 1,             // count selection max
							 | 
						||
| 
								 | 
							
								    UserDatas vUserDatas = nullptr,                // user datas (can be retrieved in pane)
							 | 
						||
| 
								 | 
							
								    ImGuiFileDialogFlags vFlags = 0);              // ImGuiFileDialogFlags 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OpenDialog(                                   // open simple dialog (path and filename are obtained from filePathName)
							 | 
						||
| 
								 | 
							
								    const std::string& vKey,                       // key dialog
							 | 
						||
| 
								 | 
							
								    const std::string& vTitle,                     // title
							 | 
						||
| 
								 | 
							
								    const char* vFilters,                          // filters
							 | 
						||
| 
								 | 
							
								    const std::string& vFilePathName,              // file path name (will be decompsoed in path and fileName)
							 | 
						||
| 
								 | 
							
								    const int& vCountSelectionMax = 1,             // count selection max
							 | 
						||
| 
								 | 
							
								    UserDatas vUserDatas = nullptr,                // user datas (can be retrieved in pane)
							 | 
						||
| 
								 | 
							
								    ImGuiFileDialogFlags vFlags = 0);              // ImGuiFileDialogFlags 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// with pane
							 | 
						||
| 
								 | 
							
								void OpenDialog(                                   // open dialog with custom right pane (path and fileName can be specified)
							 | 
						||
| 
								 | 
							
								    const std::string& vKey,                       // key dialog
							 | 
						||
| 
								 | 
							
								    const std::string& vTitle,                     // title
							 | 
						||
| 
								 | 
							
								    const char* vFilters,                          // filters
							 | 
						||
| 
								 | 
							
								    const std::string& vPath,                      // path
							 | 
						||
| 
								 | 
							
								    const std::string& vFileName,                  // defaut file name
							 | 
						||
| 
								 | 
							
								    const PaneFun& vSidePane,                      // side pane
							 | 
						||
| 
								 | 
							
								    const float& vSidePaneWidth = 250.0f,          // side pane width
							 | 
						||
| 
								 | 
							
								    const int& vCountSelectionMax = 1,             // count selection max
							 | 
						||
| 
								 | 
							
								    UserDatas vUserDatas = nullptr,                // user datas (can be retrieved in pane)
							 | 
						||
| 
								 | 
							
								    ImGuiFileDialogFlags vFlags = 0);              // ImGuiFileDialogFlags 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OpenDialog(                                   // open dialog with custom right pane (path and filename are obtained from filePathName)
							 | 
						||
| 
								 | 
							
								    const std::string& vKey,                       // key dialog
							 | 
						||
| 
								 | 
							
								    const std::string& vTitle,                     // title
							 | 
						||
| 
								 | 
							
								    const char* vFilters,                          // filters
							 | 
						||
| 
								 | 
							
								    const std::string& vFilePathName,              // file path name (will be decompsoed in path and fileName)
							 | 
						||
| 
								 | 
							
								    const PaneFun& vSidePane,                      // side pane
							 | 
						||
| 
								 | 
							
								    const float& vSidePaneWidth = 250.0f,          // side pane width
							 | 
						||
| 
								 | 
							
								    const int& vCountSelectionMax = 1,             // count selection max
							 | 
						||
| 
								 | 
							
								    UserDatas vUserDatas = nullptr,                // user datas (can be retrieved in pane)
							 | 
						||
| 
								 | 
							
								    ImGuiFileDialogFlags vFlags = 0);              // ImGuiFileDialogFlags 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// modal dialog
							 | 
						||
| 
								 | 
							
								void OpenModal(                                    // open simple modal (path and fileName can be specified)
							 | 
						||
| 
								 | 
							
								    const std::string& vKey,                       // key dialog
							 | 
						||
| 
								 | 
							
								    const std::string& vTitle,                     // title
							 | 
						||
| 
								 | 
							
								    const char* vFilters,                          // filters
							 | 
						||
| 
								 | 
							
								    const std::string& vPath,                      // path
							 | 
						||
| 
								 | 
							
								    const std::string& vFileName,                  // defaut file name
							 | 
						||
| 
								 | 
							
								    const int& vCountSelectionMax = 1,             // count selection max
							 | 
						||
| 
								 | 
							
								    UserDatas vUserDatas = nullptr,                // user datas (can be retrieved in pane)
							 | 
						||
| 
								 | 
							
								    ImGuiFileDialogFlags vFlags = 0);              // ImGuiFileDialogFlags 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OpenModal(                                    // open simple modal (path and fielname are obtained from filePathName)
							 | 
						||
| 
								 | 
							
								    const std::string& vKey,                       // key dialog
							 | 
						||
| 
								 | 
							
								    const std::string& vTitle,                     // title
							 | 
						||
| 
								 | 
							
								    const char* vFilters,                          // filters
							 | 
						||
| 
								 | 
							
								    const std::string& vFilePathName,              // file path name (will be decompsoed in path and fileName)
							 | 
						||
| 
								 | 
							
								    const int& vCountSelectionMax = 1,             // count selection max
							 | 
						||
| 
								 | 
							
								    UserDatas vUserDatas = nullptr,                // user datas (can be retrieved in pane)
							 | 
						||
| 
								 | 
							
								    ImGuiFileDialogFlags vFlags = 0);              // ImGuiFileDialogFlags 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// with pane
							 | 
						||
| 
								 | 
							
								void OpenModal(                                    // open modal with custom right pane (path and filename are obtained from filePathName)
							 | 
						||
| 
								 | 
							
								    const std::string& vKey,                       // key dialog
							 | 
						||
| 
								 | 
							
								    const std::string& vTitle,                     // title
							 | 
						||
| 
								 | 
							
								    const char* vFilters,                          // filters
							 | 
						||
| 
								 | 
							
								    const std::string& vPath,                      // path
							 | 
						||
| 
								 | 
							
								    const std::string& vFileName,                  // defaut file name
							 | 
						||
| 
								 | 
							
								    const PaneFun& vSidePane,                      // side pane
							 | 
						||
| 
								 | 
							
								    const float& vSidePaneWidth = 250.0f,                               // side pane width
							 | 
						||
| 
								 | 
							
								    const int& vCountSelectionMax = 1,             // count selection max
							 | 
						||
| 
								 | 
							
								    UserDatas vUserDatas = nullptr,                // user datas (can be retrieved in pane)
							 | 
						||
| 
								 | 
							
								    ImGuiFileDialogFlags vFlags = 0);              // ImGuiFileDialogFlags 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void OpenModal(                                    // open modal with custom right pane (path and fielname are obtained from filePathName)
							 | 
						||
| 
								 | 
							
								    const std::string& vKey,                       // key dialog
							 | 
						||
| 
								 | 
							
								    const std::string& vTitle,                     // title
							 | 
						||
| 
								 | 
							
								    const char* vFilters,                          // filters
							 | 
						||
| 
								 | 
							
								    const std::string& vFilePathName,              // file path name (will be decompsoed in path and fileName)
							 | 
						||
| 
								 | 
							
								    const PaneFun& vSidePane,                      // side pane
							 | 
						||
| 
								 | 
							
								    const float& vSidePaneWidth = 250.0f,                               // side pane width
							 | 
						||
| 
								 | 
							
								    const int& vCountSelectionMax = 1,             // count selection max
							 | 
						||
| 
								 | 
							
								    UserDatas vUserDatas = nullptr,                // user datas (can be retrieved in pane)
							 | 
						||
| 
								 | 
							
								    ImGuiFileDialogFlags vFlags = 0);              // ImGuiFileDialogFlags 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Display / Close dialog form
							 | 
						||
| 
								 | 
							
								bool Display(                                      // Display the dialog. return true if a result was obtained (Ok or not)
							 | 
						||
| 
								 | 
							
								    const std::string& vKey,                       // key dialog to display (if not the same key as defined by OpenDialog/Modal => no opening)
							 | 
						||
| 
								 | 
							
								    ImGuiWindowFlags vFlags = ImGuiWindowFlags_NoCollapse, // ImGuiWindowFlags
							 | 
						||
| 
								 | 
							
								    ImVec2 vMinSize = ImVec2(0, 0),                // mininmal size contraint for the ImGuiWindow
							 | 
						||
| 
								 | 
							
								    ImVec2 vMaxSize = ImVec2(FLT_MAX, FLT_MAX));   // maximal size contraint for the ImGuiWindow
							 | 
						||
| 
								 | 
							
								void Close();                                      // close dialog
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// queries
							 | 
						||
| 
								 | 
							
								bool WasOpenedThisFrame(const std::string& vKey);  // say if the dialog key was already opened this frame
							 | 
						||
| 
								 | 
							
								bool WasOpenedThisFrame();                         // say if the dialog was already opened this frame
							 | 
						||
| 
								 | 
							
								bool IsOpened(const std::string& vKey);            // say if the key is opened
							 | 
						||
| 
								 | 
							
								bool IsOpened();                                   // say if the dialog is opened somewhere    
							 | 
						||
| 
								 | 
							
								std::string GetOpenedKey();                        // return the dialog key who is opened, return nothing if not opened
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// get result
							 | 
						||
| 
								 | 
							
								bool IsOk();                                       // true => Dialog Closed with Ok result / false : Dialog closed with cancel result
							 | 
						||
| 
								 | 
							
								std::map<std::string, std::string> GetSelection(); // Open File behavior : will return selection via a map<FileName, FilePathName>
							 | 
						||
| 
								 | 
							
								std::string GetFilePathName();                     // Save File behavior : will always return the content of the field with current filter extention and current path
							 | 
						||
| 
								 | 
							
								std::string GetCurrentFileName();                  // Save File behavior : will always return the content of the field with current filter extention
							 | 
						||
| 
								 | 
							
								std::string GetCurrentPath();                      // will return current path
							 | 
						||
| 
								 | 
							
								std::string GetCurrentFilter();                    // will return selected filter
							 | 
						||
| 
								 | 
							
								UserDatas GetUserDatas();                          // will return user datas send with Open Dialog/Modal
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								// extentions displaying
							 | 
						||
| 
								 | 
							
								void SetExtentionInfos(                            // SetExtention datas for have custom display of particular file type
							 | 
						||
| 
								 | 
							
								    const std::string& vFilter,                    // extention filter to tune
							 | 
						||
| 
								 | 
							
								    const FileExtentionInfosStruct& vInfos);       // Filter Extention Struct who contain Color and Icon/Text for the display of the file with extention filter
							 | 
						||
| 
								 | 
							
								void SetExtentionInfos(                            // SetExtention datas for have custom display of particular file type
							 | 
						||
| 
								 | 
							
								    const std::string& vFilter,                    // extention filter to tune
							 | 
						||
| 
								 | 
							
								    const ImVec4& vColor,                          // wanted color for the display of the file with extention filter
							 | 
						||
| 
								 | 
							
								    const std::string& vIcon = "");                // wanted text or icon of the file with extention filter
							 | 
						||
| 
								 | 
							
								bool GetExtentionInfos(                            // GetExtention datas. return true is extention exist
							 | 
						||
| 
								 | 
							
								    const std::string& vFilter,                    // extention filter (same as used in SetExtentionInfos)
							 | 
						||
| 
								 | 
							
								    ImVec4 *vOutColor,                             // color to retrieve
							 | 
						||
| 
								 | 
							
								    std::string* vOutIcon = 0);                    // icon or text to retrieve
							 | 
						||
| 
								 | 
							
								void ClearExtentionInfos();                        // clear extentions setttings
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								feature : USE_EXPLORATION_BY_KEYS
							 | 
						||
| 
								 | 
							
								void SetFlashingAttenuationInSeconds(              // set the flashing time of the line in file list when use exploration keys
							 | 
						||
| 
								 | 
							
								    float vAttenValue);                            // set the attenuation (from flashed to not flashed) in seconds
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								feature : USE_BOOKMARK
							 | 
						||
| 
								 | 
							
								std::string SerializeBookmarks();                  // serialize bookmarks : return bookmark buffer to save in a file
							 | 
						||
| 
								 | 
							
								void DeserializeBookmarks(                         // deserialize bookmarks : load bookmar buffer to load in the dialog (saved from previous use with SerializeBookmarks())
							 | 
						||
| 
								 | 
							
								    const std::string& vBookmarks);                // bookmark buffer to load
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								feature : USE_THUMBNAILS
							 | 
						||
| 
								 | 
							
								void SetCreateThumbnailCallback(const CreateThumbnailFun vCreateThumbnailFun);		// define the texture creation callback
							 | 
						||
| 
								 | 
							
								void SetDestroyThumbnailCallback(const DestroyThumbnailFun vCreateThumbnailFun);	// define the texture destroy callback
							 | 
						||
| 
								 | 
							
								void ManageGPUThumbnails();															// in gpu rendering zone, whill create or destroy textures
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### C Api
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								this api was sucessfully tested with CImGui
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								    struct IGFD_Selection_Pair
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        char* fileName;
							 | 
						||
| 
								 | 
							
								        char* filePathName;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API IGFD_Selection_Pair IGFD_Selection_Pair_Get();  // return an initialized IGFD_Selection_Pair            
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API void IGFD_Selection_Pair_DestroyContent(
							 | 
						||
| 
								 | 
							
									    IGFD_Selection_Pair *vSelection_Pair);                          // destroy the content of a IGFD_Selection_Pair
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    struct IGFD_Selection
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        IGFD_Selection_Pair* table;
							 | 
						||
| 
								 | 
							
								        size_t count;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API IGFD_Selection IGFD_Selection_Get();            // return an initialized IGFD_Selection
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API void IGFD_Selection_DestroyContent(
							 | 
						||
| 
								 | 
							
									    IGFD_Selection* vSelection);                                    // destroy the content of a IGFD_Selection
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // constructor / destructor
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API ImGuiFileDialog* IGFD_Create(void);             // create the filedialog context
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API void IGFD_Destroy(ImGuiFileDialog *vContext);   // destroy the filedialog context
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    typedef void (*IGFD_PaneFun)(const char*, void*, bool*);            // callback fucntion for display the pane
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API void IGFD_OpenDialog(                           // open a standard dialog
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext,                                      // ImGuiFileDialog context
							 | 
						||
| 
								 | 
							
								        const char* vKey,                                               // key dialog
							 | 
						||
| 
								 | 
							
								        const char* vTitle,                                             // title
							 | 
						||
| 
								 | 
							
								        const char* vFilters,                                           // filters/filter collections. set it to null for directory mode 
							 | 
						||
| 
								 | 
							
								        const char* vPath,                                              // path
							 | 
						||
| 
								 | 
							
								        const char* vFileName,                                          // defaut file name
							 | 
						||
| 
								 | 
							
								        const int vCountSelectionMax,                                   // count selection max
							 | 
						||
| 
								 | 
							
								        void* vUserDatas,                                               // user datas (can be retrieved in pane)
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialogFlags vFlags);                                   // ImGuiFileDialogFlags 
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API void IGFD_OpenDialog2(                          // open a standard dialog
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext,                                      // ImGuiFileDialog context
							 | 
						||
| 
								 | 
							
								        const char* vKey,                                               // key dialog
							 | 
						||
| 
								 | 
							
								        const char* vTitle,                                             // title
							 | 
						||
| 
								 | 
							
								        const char* vFilters,                                           // filters/filter collections. set it to null for directory mode 
							 | 
						||
| 
								 | 
							
								        const char* vFilePathName,                                      // defaut file path name (path and filename witl be extracted from it)
							 | 
						||
| 
								 | 
							
								        const int vCountSelectionMax,                                   // count selection max
							 | 
						||
| 
								 | 
							
								        void* vUserDatas,                                               // user datas (can be retrieved in pane)
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialogFlags vFlags);                                   // ImGuiFileDialogFlags 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API void IGFD_OpenPaneDialog(                       // open a standard dialog with pane
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext,                                      // ImGuiFileDialog context
							 | 
						||
| 
								 | 
							
								        const char* vKey,                                               // key dialog
							 | 
						||
| 
								 | 
							
								        const char* vTitle,                                             // title
							 | 
						||
| 
								 | 
							
								        const char* vFilters,                                           // filters/filter collections. set it to null for directory mode 
							 | 
						||
| 
								 | 
							
								        const char* vPath,                                              // path
							 | 
						||
| 
								 | 
							
								        const char* vFileName,                                          // defaut file name
							 | 
						||
| 
								 | 
							
								        const IGFD_PaneFun vSidePane,                                   // side pane
							 | 
						||
| 
								 | 
							
								        const float vSidePaneWidth,                                     // side pane base width
							 | 
						||
| 
								 | 
							
								        const int vCountSelectionMax,                                   // count selection max
							 | 
						||
| 
								 | 
							
								        void* vUserDatas,                                               // user datas (can be retrieved in pane)
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialogFlags vFlags);                                   // ImGuiFileDialogFlags 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API void IGFD_OpenPaneDialog2(                      // open a standard dialog with pane
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext,                                      // ImGuiFileDialog context
							 | 
						||
| 
								 | 
							
								        const char* vKey,                                               // key dialog
							 | 
						||
| 
								 | 
							
								        const char* vTitle,                                             // title
							 | 
						||
| 
								 | 
							
								        const char* vFilters,                                           // filters/filter collections. set it to null for directory mode 
							 | 
						||
| 
								 | 
							
								        const char* vFilePathName,                                      // defaut file name (path and filename witl be extracted from it)
							 | 
						||
| 
								 | 
							
								        const IGFD_PaneFun vSidePane,                                   // side pane
							 | 
						||
| 
								 | 
							
								        const float vSidePaneWidth,                                     // side pane base width
							 | 
						||
| 
								 | 
							
								        const int vCountSelectionMax,                                   // count selection max
							 | 
						||
| 
								 | 
							
								        void* vUserDatas,                                               // user datas (can be retrieved in pane)
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialogFlags vFlags);                                   // ImGuiFileDialogFlags 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API void IGFD_OpenModal(                            // open a modal dialog
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext,                                      // ImGuiFileDialog context
							 | 
						||
| 
								 | 
							
								        const char* vKey,                                               // key dialog
							 | 
						||
| 
								 | 
							
								        const char* vTitle,                                             // title
							 | 
						||
| 
								 | 
							
								        const char* vFilters,                                           // filters/filter collections. set it to null for directory mode 
							 | 
						||
| 
								 | 
							
								        const char* vPath,                                              // path
							 | 
						||
| 
								 | 
							
								        const char* vFileName,                                          // defaut file name
							 | 
						||
| 
								 | 
							
								        const int vCountSelectionMax,                                   // count selection max
							 | 
						||
| 
								 | 
							
								        void* vUserDatas,                                               // user datas (can be retrieved in pane)
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialogFlags vFlags);                                   // ImGuiFileDialogFlags 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API void IGFD_OpenModal2(                           // open a modal dialog
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext,                                      // ImGuiFileDialog context
							 | 
						||
| 
								 | 
							
								        const char* vKey,                                               // key dialog
							 | 
						||
| 
								 | 
							
								        const char* vTitle,                                             // title
							 | 
						||
| 
								 | 
							
								        const char* vFilters,                                           // filters/filter collections. set it to null for directory mode 
							 | 
						||
| 
								 | 
							
								        const char* vFilePathName,                                      // defaut file name (path and filename witl be extracted from it)
							 | 
						||
| 
								 | 
							
								        const int vCountSelectionMax,                                   // count selection max
							 | 
						||
| 
								 | 
							
								        void* vUserDatas,                                               // user datas (can be retrieved in pane)
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialogFlags vFlags);                                   // ImGuiFileDialogFlags 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API void IGFD_OpenPaneModal(                        // open a modal dialog with pane
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext,                                      // ImGuiFileDialog context
							 | 
						||
| 
								 | 
							
								        const char* vKey,                                               // key dialog
							 | 
						||
| 
								 | 
							
								        const char* vTitle,                                             // title
							 | 
						||
| 
								 | 
							
								        const char* vFilters,                                           // filters/filter collections. set it to null for directory mode 
							 | 
						||
| 
								 | 
							
								        const char* vPath,                                              // path
							 | 
						||
| 
								 | 
							
								        const char* vFileName,                                          // defaut file name
							 | 
						||
| 
								 | 
							
								        const IGFD_PaneFun vSidePane,                                   // side pane
							 | 
						||
| 
								 | 
							
								        const float vSidePaneWidth,                                     // side pane base width
							 | 
						||
| 
								 | 
							
								        const int vCountSelectionMax,                                   // count selection max
							 | 
						||
| 
								 | 
							
								        void* vUserDatas,                                               // user datas (can be retrieved in pane)
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialogFlags vFlags);                                   // ImGuiFileDialogFlags 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API void IGFD_OpenPaneModal2(                       // open a modal dialog with pane
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext,                                      // ImGuiFileDialog context
							 | 
						||
| 
								 | 
							
								        const char* vKey,                                               // key dialog
							 | 
						||
| 
								 | 
							
								        const char* vTitle,                                             // title
							 | 
						||
| 
								 | 
							
								        const char* vFilters,                                           // filters/filter collections. set it to null for directory mode 
							 | 
						||
| 
								 | 
							
								        const char* vFilePathName,                                      // defaut file name (path and filename witl be extracted from it)
							 | 
						||
| 
								 | 
							
								        const IGFD_PaneFun vSidePane,                                   // side pane
							 | 
						||
| 
								 | 
							
								        const float vSidePaneWidth,                                     // side pane base width
							 | 
						||
| 
								 | 
							
								        const int vCountSelectionMax,                                   // count selection max
							 | 
						||
| 
								 | 
							
								        void* vUserDatas,                                               // user datas (can be retrieved in pane)
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialogFlags vFlags);                                   // ImGuiFileDialogFlags 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API bool IGFD_DisplayDialog(                        // Display the dialog
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext,                                      // ImGuiFileDialog context
							 | 
						||
| 
								 | 
							
								        const char* vKey,                                               // key dialog to display (if not the same key as defined by OpenDialog/Modal => no opening)
							 | 
						||
| 
								 | 
							
								        ImGuiWindowFlags vFlags,                                        // ImGuiWindowFlags
							 | 
						||
| 
								 | 
							
								        ImVec2 vMinSize,                                                // mininmal size contraint for the ImGuiWindow
							 | 
						||
| 
								 | 
							
								        ImVec2 vMaxSize);                                               // maximal size contraint for the ImGuiWindow
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API void IGFD_CloseDialog(                          // Close the dialog
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext);                                     // ImGuiFileDialog context            
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API bool IGFD_IsOk(                                 // true => Dialog Closed with Ok result / false : Dialog closed with cancel result
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext);                                     // ImGuiFileDialog context        
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API bool IGFD_WasKeyOpenedThisFrame(                // say if the dialog key was already opened this frame
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext,                                      // ImGuiFileDialog context        
							 | 
						||
| 
								 | 
							
								        const char* vKey);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API bool IGFD_WasOpenedThisFrame(                   // say if the dialog was already opened this frame
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext);                                     // ImGuiFileDialog context    
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API bool IGFD_IsKeyOpened(                          // say if the dialog key is opened
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext,                                      // ImGuiFileDialog context        
							 | 
						||
| 
								 | 
							
								        const char* vCurrentOpenedKey);                                 // the dialog key
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API bool IGFD_IsOpened(                             // say if the dialog is opened somewhere    
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext);                                     // ImGuiFileDialog context        
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API IGFD_Selection IGFD_GetSelection(               // Open File behavior : will return selection via a map<FileName, FilePathName>
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext);                                     // ImGuiFileDialog context        
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API char* IGFD_GetFilePathName(                     // Save File behavior : will always return the content of the field with current filter extention and current path
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext);                                     // ImGuiFileDialog context                
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API char* IGFD_GetCurrentFileName(                  // Save File behavior : will always return the content of the field with current filter extention
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext);                                     // ImGuiFileDialog context                
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API char* IGFD_GetCurrentPath(                      // will return current path
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext);                                     // ImGuiFileDialog context                    
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API char* IGFD_GetCurrentFilter(                    // will return selected filter
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext);                                     // ImGuiFileDialog context                        
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API void* IGFD_GetUserDatas(                        // will return user datas send with Open Dialog/Modal
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext);                                     // ImGuiFileDialog context                                            
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API void IGFD_SetExtentionInfos(                    // SetExtention datas for have custom display of particular file type
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext,                                      // ImGuiFileDialog context 
							 | 
						||
| 
								 | 
							
								        const char* vFilter,                                            // extention filter to tune
							 | 
						||
| 
								 | 
							
								        ImVec4 vColor,                                                  // wanted color for the display of the file with extention filter
							 | 
						||
| 
								 | 
							
								        const char* vIconText);                                         // wanted text or icon of the file with extention filter (can be sued with font icon)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API void IGFD_SetExtentionInfos2(                   // SetExtention datas for have custom display of particular file type
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext,                                      // ImGuiFileDialog context 
							 | 
						||
| 
								 | 
							
								        const char* vFilter,                                            // extention filter to tune
							 | 
						||
| 
								 | 
							
								        float vR, float vG, float vB, float vA,                         // wanted color channels RGBA for the display of the file with extention filter
							 | 
						||
| 
								 | 
							
								        const char* vIconText);                                         // wanted text or icon of the file with extention filter (can be sued with font icon)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API bool IGFD_GetExtentionInfos(
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext,                                      // ImGuiFileDialog context 
							 | 
						||
| 
								 | 
							
								        const char* vFilter,                                            // extention filter (same as used in SetExtentionInfos)
							 | 
						||
| 
								 | 
							
								        ImVec4* vOutColor,                                              // color to retrieve
							 | 
						||
| 
								 | 
							
								        char** vOutIconText);                                           // icon or text to retrieve
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API void IGFD_ClearExtentionInfos(                  // clear extentions setttings
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext);                                     // ImGuiFileDialog context
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								feature : USE_EXPLORATION_BY_KEYS
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API void IGFD_SetFlashingAttenuationInSeconds(      // set the flashing time of the line in file list when use exploration keys
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext,                                      // ImGuiFileDialog context 
							 | 
						||
| 
								 | 
							
								        float vAttenValue);                                             // set the attenuation (from flashed to not flashed) in seconds
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								feature : USE_BOOKMARK
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API char* IGFD_SerializeBookmarks(                  // serialize bookmarks : return bookmark buffer to save in a file
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext);                                     // ImGuiFileDialog context
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IMGUIFILEDIALOG_API void IGFD_DeserializeBookmarks(                 // deserialize bookmarks : load bookmar buffer to load in the dialog (saved from previous use with SerializeBookmarks())
							 | 
						||
| 
								 | 
							
								        ImGuiFileDialog* vContext,                                      // ImGuiFileDialog context 
							 | 
						||
| 
								 | 
							
								        const char* vBookmarks);                                        // bookmark buffer to load 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								feature : USE_THUMBNAILS
							 | 
						||
| 
								 | 
							
									IMGUIFILEDIALOG_API void SetCreateThumbnailCallback(				// define the callback for create the thumbnails texture
							 | 
						||
| 
								 | 
							
										ImGuiFileDialog* vContext,										// ImGuiFileDialog context 
							 | 
						||
| 
								 | 
							
										const IGFD_CreateThumbnailFun vCreateThumbnailFun);				// the callback for create the thumbnails texture
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									IMGUIFILEDIALOG_API void SetDestroyThumbnailCallback(				// define the callback for destroy the thumbnails texture
							 | 
						||
| 
								 | 
							
										ImGuiFileDialog* vContext,										// ImGuiFileDialog context 
							 | 
						||
| 
								 | 
							
										const IGFD_DestroyThumbnailFun vDestroyThumbnailFun);			// the callback for destroy the thumbnails texture
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									IMGUIFILEDIALOG_API void ManageGPUThumbnails(						// must be call in gpu zone, possibly a thread, will call the callback for create / destroy the textures
							 | 
						||
| 
								 | 
							
										ImGuiFileDialog* vContext);										// ImGuiFileDialog context 
							 | 
						||
| 
								 | 
							
								```
							 |