| 4232 | } |
| 4233 | |
| 4234 | void IGFD::FileDialog::m_SelectableItem(int vRowIdx, std::shared_ptr<FileInfos> vInfos, bool vSelected, const char* vFmt, ...) { |
| 4235 | if (!vInfos.use_count()) return; |
| 4236 | |
| 4237 | auto& fdi = m_FileDialogInternal.fileManager; |
| 4238 | |
| 4239 | static ImGuiSelectableFlags selectableFlags = ImGuiSelectableFlags_AllowDoubleClick | ImGuiSelectableFlags_SpanAllColumns | ImGuiSelectableFlags_SpanAvailWidth; |
| 4240 | |
| 4241 | va_list args; |
| 4242 | va_start(args, vFmt); |
| 4243 | vsnprintf(fdi.variadicBuffer, MAX_FILE_DIALOG_NAME_BUFFER, vFmt, args); |
| 4244 | va_end(args); |
| 4245 | |
| 4246 | float h = 0.0f; |
| 4247 | #ifdef USE_THUMBNAILS |
| 4248 | if (m_DisplayMode == DisplayModeEnum::THUMBNAILS_LIST && !(m_FileDialogInternal.getDialogConfig().flags & ImGuiFileDialogFlags_DisableThumbnailMode)) { |
| 4249 | h = DisplayMode_ThumbailsList_ImageHeight; |
| 4250 | } |
| 4251 | #endif // USE_THUMBNAILS |
| 4252 | if (m_Selectable(vRowIdx, fdi.variadicBuffer, vSelected, selectableFlags, ImVec2(-1.0f, h))) { |
| 4253 | if (vInfos->fileType.isDir()) { |
| 4254 | // nav system, selectable cause open directory or select directory |
| 4255 | if (ImGui::GetIO().ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) { |
| 4256 | // little fix for get back the mouse behavior in nav system |
| 4257 | if (ImGui::IsMouseDoubleClicked(0)) { // 0 -> left mouse button double click |
| 4258 | fdi.pathClicked = fdi.SelectDirectory(vInfos); |
| 4259 | } else if (fdi.dLGDirectoryMode) { // directory chooser |
| 4260 | fdi.SelectOrDeselectFileName(m_FileDialogInternal, vInfos); |
| 4261 | } else { |
| 4262 | fdi.pathClicked = fdi.SelectDirectory(vInfos); |
| 4263 | } |
| 4264 | } else { // no nav system => classic behavior |
| 4265 | if (ImGui::IsMouseDoubleClicked(0)) { // 0 -> left mouse button double click |
| 4266 | fdi.pathClicked = fdi.SelectDirectory(vInfos); |
| 4267 | } else if (fdi.dLGDirectoryMode) { // directory chooser |
| 4268 | fdi.SelectOrDeselectFileName(m_FileDialogInternal, vInfos); |
| 4269 | } |
| 4270 | } |
| 4271 | } else { |
| 4272 | fdi.SelectOrDeselectFileName(m_FileDialogInternal, vInfos); |
| 4273 | if (ImGui::IsMouseDoubleClicked(0)) { |
| 4274 | m_FileDialogInternal.isOk = true; |
| 4275 | } |
| 4276 | } |
| 4277 | } |
| 4278 | } |
| 4279 | |
| 4280 | void IGFD::FileDialog::m_DisplayFileInfosTooltip(const int32_t& vRowIdx, const int32_t& vColumnIdx, std::shared_ptr<FileInfos> vFileInfos) { |
| 4281 | // IsItemHovered is not sufficient since file size have two calls to Text |
nothing calls this directly
no test coverage detected