Show file count in each directory, and moved "Too many files" message (#1376)

* Added file_count() function
* Show file count in each directory; moved "Too many files!" warning
This commit is contained in:
Mark Thompson 2023-08-16 03:00:46 -05:00 committed by GitHub
parent f079d57fc6
commit e1cc0b1ad0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 18 deletions

View File

@ -185,7 +185,6 @@ FileManBaseView::FileManBaseView(
extension_filter{filter} { extension_filter{filter} {
add_children({&labels, add_children({&labels,
&text_current, &text_current,
&text_info,
&button_exit}); &button_exit});
button_exit.on_select = [this, &nav](Button&) { button_exit.on_select = [this, &nav](Button&) {
@ -250,8 +249,10 @@ void FileManBaseView::refresh_list() {
auto entry_name = truncate(entry.path, 20); auto entry_name = truncate(entry.path, 20);
if (entry.is_directory) { if (entry.is_directory) {
auto size_str = (entry.path == parent_dir_path) ? "" : to_string_dec_uint(file_count(entry.path));
menu_view.add_item( menu_view.add_item(
{entry_name, {entry_name + std::string(21 - entry_name.length(), ' ') + size_str,
ui::Color::yellow(), ui::Color::yellow(),
&bitmap_icon_dir, &bitmap_icon_dir,
[this](KeyEvent key) { [this](KeyEvent key) {
@ -278,7 +279,6 @@ void FileManBaseView::refresh_list() {
break; break;
} }
text_info.set(menu_view.item_count() >= max_items_shown ? "Too many files!" : "");
menu_view.set_highlighted(prev_highlight); menu_view.set_highlighted(prev_highlight);
} }
@ -342,7 +342,6 @@ FileSaveView::FileSaveView(
file_{ file } file_{ file }
{ {
add_children({ add_children({
&labels,
&text_path, &text_path,
&button_edit_path, &button_edit_path,
&text_name, &text_name,
@ -546,7 +545,6 @@ FileManagerView::FileManagerView(
add_children({ add_children({
&menu_view, &menu_view,
&labels,
&text_date, &text_date,
&button_rename, &button_rename,
&button_delete, &button_delete,
@ -560,10 +558,16 @@ FileManagerView::FileManagerView(
}); });
menu_view.on_highlight = [this]() { menu_view.on_highlight = [this]() {
if (menu_view.highlighted_index() >= max_items_shown - 1) {
text_date.set_style(&Styles::red);
text_date.set("Too many files!");
} else {
text_date.set_style(&Styles::grey);
if (selected_is_valid()) if (selected_is_valid())
text_date.set(to_string_FAT_timestamp(file_created_date(get_selected_full_path()))); text_date.set((is_directory(get_selected_full_path()) ? "Created " : "Modified ") + to_string_FAT_timestamp(file_created_date(get_selected_full_path())));
else else
text_date.set(""); text_date.set("");
}
}; };
refresh_list(); refresh_list();

View File

@ -115,11 +115,6 @@ class FileManBaseView : public View {
{0, 2 * 8, 240, 26 * 8}, {0, 2 * 8, 240, 26 * 8},
true}; true};
// HACK: for item count limit.
Text text_info{
{1 * 8, 35 * 8, 15 * 8, 16},
""};
Button button_exit{ Button button_exit{
{22 * 8, 34 * 8, 8 * 8, 32}, {22 * 8, 34 * 8, 8 * 8, 32},
"Exit"}; "Exit"};
@ -218,11 +213,8 @@ class FileManagerView : public FileManBaseView {
// True if the selected entry is a real file item. // True if the selected entry is a real file item.
bool selected_is_valid() const; bool selected_is_valid() const;
Labels labels{
{{0, 26 * 8}, "Created ", Color::light_grey()}};
Text text_date{ Text text_date{
{8 * 8, 26 * 8, 19 * 8, 16}, {0 * 8, 26 * 8, 28 * 8, 16},
""}; ""};
NewButton button_rename{ NewButton button_rename{

View File

@ -579,6 +579,17 @@ bool is_empty_directory(const path& file_path) {
return !((result == FR_OK) && (filinfo.fname[0] != (TCHAR)'\0')); return !((result == FR_OK) && (filinfo.fname[0] != (TCHAR)'\0'));
} }
int file_count(const path& directory) {
int count{0};
for (auto& entry : std::filesystem::directory_iterator(directory, (const TCHAR*)u"*")) {
(void)entry; // avoid unused warning
++count;
}
return count;
}
space_info space(const path& p) { space_info space(const path& p) {
DWORD free_clusters{0}; DWORD free_clusters{0};
FATFS* fs; FATFS* fs;

View File

@ -250,6 +250,8 @@ bool file_exists(const path& file_path);
bool is_directory(const path& file_path); bool is_directory(const path& file_path);
bool is_empty_directory(const path& file_path); bool is_empty_directory(const path& file_path);
int file_count(const path& dir_path);
space_info space(const path& p); space_info space(const path& p);
} /* namespace filesystem */ } /* namespace filesystem */