From ebecfb19927e4f5fe5d4f784d919924058602de3 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 25 Sep 2025 20:49:40 -0500 Subject: [PATCH] more work on the file picker after this, file types --- src/gui/newFilePicker.cpp | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/src/gui/newFilePicker.cpp b/src/gui/newFilePicker.cpp index 5351380c9..27818440c 100644 --- a/src/gui/newFilePicker.cpp +++ b/src/gui/newFilePicker.cpp @@ -30,6 +30,8 @@ #include #include +static const char* sizeSuffixes=".KMGTPEZ"; + static void _fileThread(void* item) { ((FurnaceFilePicker*)item)->readDirectorySub(); } @@ -270,6 +272,19 @@ bool FurnaceFilePicker::draw() { } } else { if (ImGui::BeginTable("FileList",3,ImGuiTableFlags_Borders|ImGuiTableFlags_ScrollY,tableSize)) { + ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthStretch); + ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthFixed,ImGui::CalcTextSize(" 999.99G").x); + ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthFixed,ImGui::CalcTextSize(" 6969/69/69 04:20").x); + ImGui::TableSetupScrollFreeze(0,1); + + ImGui::TableNextRow(ImGuiTableRowFlags_Headers); + ImGui::TableNextColumn(); + ImGui::Text("Name"); + ImGui::TableNextColumn(); + ImGui::Text("Size"); + ImGui::TableNextColumn(); + ImGui::Text("Date"); + entryLock.lock(); int index=0; listClipper.Begin(filteredEntries.size()); @@ -303,8 +318,28 @@ bool FurnaceFilePicker::draw() { ImGui::TextUnformatted(i->name.c_str()); ImGui::TableNextColumn(); - if (i->hasSize && !i->isDir) { - ImGui::Text("%" PRIu64,i->size); + if (i->hasSize && i->type==FP_TYPE_NORMAL) { + int sizeShift=0; + uint64_t sizeShifted=i->size; + + while (sizeShifted && sizeShift<7) { + sizeShifted>>=10; + sizeShift++; + } + + sizeShift--; + + uint64_t intPart=i->size>>(sizeShift*10); + uint64_t fracPart=i->size&((1U<<(sizeShift*10))-1); + // shift so we have sufficient digits for 100 + // (precision loss is negligible) + if (sizeShift>0) { + fracPart=(100*(fracPart>>3))>>((sizeShift*10)-3); + if (fracPart>99) fracPart=99; + ImGui::Text("%" PRIu64 ".%02" PRIu64 "%c",intPart,fracPart,sizeSuffixes[sizeShift&7]); + } else { + ImGui::Text("%" PRIu64,i->size); + } } ImGui::TableNextColumn();