@@ -909,6 +909,33 @@ std::string IGFD::Utils::GetPathSeparator() {
909909 return std::string (1U , PATH_SEP);
910910}
911911
912+ std::string IGFD::Utils::RoundNumber (double vvalue, int n) {
913+ std::stringstream tmp;
914+ tmp << std::setprecision (n) << std::fixed << vvalue;
915+ return tmp.str ();
916+ }
917+
918+ std::string IGFD::Utils::FormatFileSize (size_t vByteSize) {
919+ if (vByteSize != 0 ) {
920+ static double lo = 1024.0 ;
921+ static double ko = 1024.0 * 1024.0 ;
922+ static double mo = 1024.0 * 1024.0 * 1024.0 ;
923+
924+ auto v = (double )vByteSize;
925+
926+ if (v < lo)
927+ return RoundNumber (v, 0 ) + " " + fileSizeBytes; // octet
928+ else if (v < ko)
929+ return RoundNumber (v / lo, 2 ) + " " + fileSizeKiloBytes; // ko
930+ else if (v < mo)
931+ return RoundNumber (v / ko, 2 ) + " " + fileSizeMegaBytes; // Mo
932+ else
933+ return RoundNumber (v / mo, 2 ) + " " + fileSizeGigaBytes; // Go
934+ }
935+
936+ return " 0 " fileSizeBytes;
937+ }
938+
912939#pragma endregion
913940
914941#pragma region FileStyle
@@ -1806,7 +1833,7 @@ bool IGFD::FileManager::m_CompleteFileInfosWithUserFileAttirbutes(const FileDial
18061833 return false ; // the file will be ignored, so not added to the file list, so not displayed
18071834 } else {
18081835 if (!vInfos->fileType .isDir ()) {
1809- vInfos->formatedFileSize = m_FormatFileSize (vInfos->fileSize );
1836+ vInfos->formatedFileSize = IGFD::Utils::FormatFileSize (vInfos->fileSize );
18101837 }
18111838 }
18121839 }
@@ -2046,33 +2073,6 @@ void IGFD::FileManager::m_ApplyFilteringOnFileList(const FileDialogInternal& vFi
20462073 }
20472074}
20482075
2049- std::string IGFD::FileManager::m_RoundNumber (double vvalue, int n) {
2050- std::stringstream tmp;
2051- tmp << std::setprecision (n) << std::fixed << vvalue;
2052- return tmp.str ();
2053- }
2054-
2055- std::string IGFD::FileManager::m_FormatFileSize (size_t vByteSize) {
2056- if (vByteSize != 0 ) {
2057- static double lo = 1024.0 ;
2058- static double ko = 1024.0 * 1024.0 ;
2059- static double mo = 1024.0 * 1024.0 * 1024.0 ;
2060-
2061- auto v = (double )vByteSize;
2062-
2063- if (v < lo)
2064- return m_RoundNumber (v, 0 ) + " " + fileSizeBytes; // octet
2065- else if (v < ko)
2066- return m_RoundNumber (v / lo, 2 ) + " " + fileSizeKiloBytes; // ko
2067- else if (v < mo)
2068- return m_RoundNumber (v / ko, 2 ) + " " + fileSizeMegaBytes; // Mo
2069- else
2070- return m_RoundNumber (v / mo, 2 ) + " " + fileSizeGigaBytes; // Go
2071- }
2072-
2073- return " 0 " fileSizeBytes;
2074- }
2075-
20762076void IGFD::FileManager::m_CompleteFileInfos (const std::shared_ptr<FileInfos>& vInfos) {
20772077 if (!vInfos.use_count ()) return ;
20782078
@@ -2105,7 +2105,7 @@ void IGFD::FileManager::m_CompleteFileInfos(const std::shared_ptr<FileInfos>& vI
21052105 if (!result) {
21062106 if (!vInfos->fileType .isDir ()) {
21072107 vInfos->fileSize = (size_t )statInfos.st_size ;
2108- vInfos->formatedFileSize = m_FormatFileSize (vInfos->fileSize );
2108+ vInfos->formatedFileSize = IGFD::Utils::FormatFileSize (vInfos->fileSize );
21092109 }
21102110
21112111 size_t len = 0 ;
@@ -3911,6 +3911,16 @@ void IGFD::FileDialog::m_SelectableItem(int vidx, std::shared_ptr<FileInfos> vIn
39113911 }
39123912}
39133913
3914+ void IGFD::FileDialog::m_DisplayFileInfosTooltip (const int32_t & vRowIdx, const int32_t & vColumnIdx, std::shared_ptr<FileInfos> vFileInfos) {
3915+ if (ImGui::IsItemHovered ()) {
3916+ if (vFileInfos != nullptr && vFileInfos->tooltipColumn == vColumnIdx) {
3917+ if (!vFileInfos->tooltipMessage .empty ()) {
3918+ ImGui::SetTooltip (" %s" , vFileInfos->tooltipMessage .c_str ());
3919+ }
3920+ }
3921+ }
3922+ }
3923+
39143924void IGFD::FileDialog::m_BeginFileColorIconStyle (std::shared_ptr<FileInfos> vFileInfos, bool & vOutShowColor, std::string& vOutStr, ImFont** vOutFont) {
39153925 vOutStr.clear ();
39163926 vOutShowColor = false ;
@@ -4049,6 +4059,7 @@ void IGFD::FileDialog::m_DrawFileListView(ImVec2 vSize) {
40494059 ImFont* _font = nullptr ;
40504060 bool _showColor = false ;
40514061
4062+ int column_id = 0 ;
40524063 m_FileListClipper.Begin ((int )fdi.GetFilteredListSize (), ImGui::GetTextLineHeightWithSpacing ());
40534064 while (m_FileListClipper.Step ()) {
40544065 for (int i = m_FileListClipper.DisplayStart ; i < m_FileListClipper.DisplayEnd ; i++) {
@@ -4063,13 +4074,16 @@ void IGFD::FileDialog::m_DrawFileListView(ImVec2 vSize) {
40634074
40644075 ImGui::TableNextRow ();
40654076
4077+ column_id = 0 ;
40664078 if (ImGui::TableNextColumn ()) // file name
40674079 {
40684080 m_SelectableItem (i, infos, selected, _str.c_str ());
4081+ m_DisplayFileInfosTooltip (i, column_id++, infos);
40694082 }
40704083 if (ImGui::TableNextColumn ()) // file type
40714084 {
40724085 ImGui::Text (" %s" , infos->fileExtLevels [0 ].c_str ());
4086+ m_DisplayFileInfosTooltip (i, column_id++, infos);
40734087 }
40744088 if (ImGui::TableNextColumn ()) // file size
40754089 {
@@ -4078,10 +4092,12 @@ void IGFD::FileDialog::m_DrawFileListView(ImVec2 vSize) {
40784092 } else {
40794093 ImGui::TextUnformatted (" " );
40804094 }
4095+ m_DisplayFileInfosTooltip (i, column_id++, infos);
40814096 }
40824097 if (ImGui::TableNextColumn ()) // file date + time
40834098 {
40844099 ImGui::Text (" %s" , infos->fileModifDate .c_str ());
4100+ m_DisplayFileInfosTooltip (i, column_id++, infos);
40854101 }
40864102
40874103 m_EndFileColorIconStyle (_showColor, _font);
@@ -4231,6 +4247,7 @@ void IGFD::FileDialog::m_DrawThumbnailsListView(ImVec2 vSize) {
42314247 ImGuiContext& g = *GImGui;
42324248 const float itemHeight = ImMax (g.FontSize , DisplayMode_ThumbailsList_ImageHeight) + g.Style .ItemSpacing .y ;
42334249
4250+ int column_id = 0 ;
42344251 m_FileListClipper.Begin ((int )fdi.GetFilteredListSize (), itemHeight);
42354252 while (m_FileListClipper.Step ()) {
42364253 for (int i = m_FileListClipper.DisplayStart ; i < m_FileListClipper.DisplayEnd ; i++) {
@@ -4245,13 +4262,16 @@ void IGFD::FileDialog::m_DrawThumbnailsListView(ImVec2 vSize) {
42454262
42464263 ImGui::TableNextRow ();
42474264
4265+ column_id = 0 ;
42484266 if (ImGui::TableNextColumn ()) // file name
42494267 {
42504268 m_SelectableItem (i, infos, selected, _str.c_str ());
4269+ m_DisplayFileInfosTooltip (i, column_id++, infos);
42514270 }
42524271 if (ImGui::TableNextColumn ()) // file type
42534272 {
42544273 ImGui::Text (" %s" , infos->fileExtLevels [0 ].c_str ());
4274+ m_DisplayFileInfosTooltip (i, column_id++, infos);
42554275 }
42564276 if (ImGui::TableNextColumn ()) // file size
42574277 {
@@ -4260,10 +4280,12 @@ void IGFD::FileDialog::m_DrawThumbnailsListView(ImVec2 vSize) {
42604280 } else {
42614281 ImGui::TextUnformatted (" " );
42624282 }
4283+ m_DisplayFileInfosTooltip (i, column_id++, infos);
42634284 }
42644285 if (ImGui::TableNextColumn ()) // file date + time
42654286 {
42664287 ImGui::Text (" %s" , infos->fileModifDate .c_str ());
4288+ m_DisplayFileInfosTooltip (i, column_id++, infos);
42674289 }
42684290 if (ImGui::TableNextColumn ()) // file thumbnails
42694291 {
@@ -4275,6 +4297,7 @@ void IGFD::FileDialog::m_DrawThumbnailsListView(ImVec2 vSize) {
42754297 if (th->isReadyToDisplay && th->textureID ) {
42764298 ImGui::Image ((ImTextureID)th->textureID , ImVec2 ((float )th->textureWidth , (float )th->textureHeight ));
42774299 }
4300+ m_DisplayFileInfosTooltip (i, column_id++, infos);
42784301 }
42794302
42804303 m_EndFileColorIconStyle (_showColor, _font);
0 commit comments