#include "window_browser_items.h" char *column_names[] = {"NAME", "TYPE", "SIZE", "MODIFIED"}; bool browser_window_list_render_item(void *state, uint32_t index, renderer_t *renderer, int16_t beg_x, int16_t beg_y, display_pixel_t color) { browser_window_state_t *bstate = (browser_window_state_t *)state; logger_t *logger = bstate->gui->logger; if (index >= bstate->current_directory->files_count) { logger_error(logger, __FILE__, __FUNCTION__, __LINE__, "Tried to reach item out of index"); return false; } file_t file = bstate->current_directory->files[index]; return table_render_item(&bstate->table, &file, renderer, bstate->font, beg_x, beg_y, color); } bool browser_window_list_render_header(void *state, uint32_t index, renderer_t *renderer, int16_t beg_x, int16_t beg_y, display_pixel_t color) { browser_window_state_t *bstate = (browser_window_state_t *)state; renderer_render_rectangle(renderer, beg_x - 3, beg_y + bstate->font->size, 10000, 1, color); uint16_t offset = beg_x; for (int i = 0; i < COLUMNS_COUNT; i++) { renderer_write_string(renderer, offset, beg_y, 0, bstate->font, column_names[i], color); offset += bstate->column_widths[i]; } return true; } #define KiB 1024ULL #define MiB KiB *KiB #define GiB KiB *KiB *KiB #define TiB KiB *KiB *KiB *KiB char *browser_get_column_data(void *state, uint16_t column, char *out) { file_t *file = (file_t*)state; switch (column) { case 0: return file->name; case 1: switch (file->type) { case FT_FILE: return "FILE"; case FT_FOLDER: return "DIR"; case FT_OTHER: return "OTHER"; case FT_UNKNOWN: return "UNKNOWN"; } break; case 2: // get size { uint64_t size = file->size; double transformed = size; char *append = "B"; if (size > TiB) { transformed /= TiB; append = "TiB"; } else if (size > GiB) { transformed /= GiB; append = "GiB"; } else if (size > MiB) { transformed /= MiB; append = "MiB"; } else if (size > KiB) { transformed /= KiB; append = "KiB"; } sprintf(out, "%.2f %s", transformed, append); return out; } case 3: // date modified strftime(out, MAX_COLUMN_CHARS, "%c", localtime(&file->modify_time)); return out; } return NULL; }