| 4167 | } |
| 4168 | |
| 4169 | void IGFD::FileDialog::m_SelectableItem(int vRowIdx, std::shared_ptr<FileInfos> vInfos, bool vSelected, const char* vFmt, ...) { |
| 4170 | if (!vInfos.use_count()) return; |
| 4171 | |
| 4172 | auto& fdi = m_FileDialogInternal.fileManager; |
| 4173 | |
| 4174 | static ImGuiSelectableFlags selectableFlags = ImGuiSelectableFlags_AllowDoubleClick | ImGuiSelectableFlags_SpanAllColumns | ImGuiSelectableFlags_SpanAvailWidth; |
| 4175 | |
| 4176 | va_list args; |
| 4177 | va_start(args, vFmt); |
| 4178 | vsnprintf(fdi.variadicBuffer, MAX_FILE_DIALOG_NAME_BUFFER, vFmt, args); |
| 4179 | va_end(args); |
| 4180 | |
| 4181 | float h = 0.0f; |
| 4182 | #ifdef USE_THUMBNAILS |
| 4183 | if (m_DisplayMode == DisplayModeEnum::THUMBNAILS_LIST && !(m_FileDialogInternal.getDialogConfig().flags & ImGuiFileDialogFlags_DisableThumbnailMode)) { |
| 4184 | h = DisplayMode_ThumbailsList_ImageHeight; |
| 4185 | } |
| 4186 | #endif // USE_THUMBNAILS |
| 4187 | if (m_Selectable(vRowIdx, fdi.variadicBuffer, vSelected, selectableFlags, ImVec2(-1.0f, h))) { |
| 4188 | if (vInfos->fileType.isDir()) { |
| 4189 | // nav system, selectable cause open directory or select directory |
| 4190 | if (ImGui::GetIO().ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) { |
| 4191 | // little fix for get back the mouse behavior in nav system |
| 4192 | if (ImGui::IsMouseDoubleClicked(0)) { // 0 -> left mouse button double click |
| 4193 | fdi.pathClicked = fdi.SelectDirectory(vInfos); |
| 4194 | } else if (fdi.dLGDirectoryMode) { // directory chooser |
| 4195 | fdi.SelectOrDeselectFileName(m_FileDialogInternal, vInfos); |
| 4196 | } else { |
| 4197 | fdi.pathClicked = fdi.SelectDirectory(vInfos); |
| 4198 | } |
| 4199 | } else { // no nav system => classic behavior |
| 4200 | if (ImGui::IsMouseDoubleClicked(0)) { // 0 -> left mouse button double click |
| 4201 | fdi.pathClicked = fdi.SelectDirectory(vInfos); |
| 4202 | } else if (fdi.dLGDirectoryMode) { // directory chooser |
| 4203 | fdi.SelectOrDeselectFileName(m_FileDialogInternal, vInfos); |
| 4204 | } |
| 4205 | } |
| 4206 | } else { |
| 4207 | fdi.SelectOrDeselectFileName(m_FileDialogInternal, vInfos); |
| 4208 | if (ImGui::IsMouseDoubleClicked(0)) { |
| 4209 | m_FileDialogInternal.isOk = true; |
| 4210 | } |
| 4211 | } |
| 4212 | } |
| 4213 | } |
| 4214 | |
| 4215 | void IGFD::FileDialog::m_DisplayFileInfosTooltip(const int32_t& vRowIdx, const int32_t& vColumnIdx, std::shared_ptr<FileInfos> vFileInfos) { |
| 4216 | // IsItemHovered is not sufficient since file size have two calls to Text |
nothing calls this directly
no test coverage detected