feat: add Files app selection marquee, Properties dialog for multiple files
This commit is contained in:
@@ -70,11 +70,22 @@ struct FileManagerState {
|
||||
int drive_indices[64]; // drive number or special-folder index for Computer view entries
|
||||
int drive_kinds[64]; // kernel BlockDeviceKind for FM_ENTRY_DRIVE entries (4 = USB MSC)
|
||||
|
||||
// Clipboard
|
||||
char clipboard_path[256];
|
||||
bool clipboard_has_data;
|
||||
// Clipboard (supports multiple paths from a marquee selection)
|
||||
char clipboard_paths[64][256];
|
||||
int clipboard_count;
|
||||
bool clipboard_is_cut;
|
||||
|
||||
// Multi-selection (grid view marquee selection)
|
||||
bool multi_selected[64];
|
||||
int multi_count;
|
||||
|
||||
// Marquee drag state. Coordinates are stored in content space:
|
||||
// x is local_x (window content relative)
|
||||
// y is rel_y (local_y - list_y + scroll_offset), so anchor follows scroll
|
||||
bool marquee_active;
|
||||
int marquee_start_x, marquee_start_y;
|
||||
int marquee_cur_x, marquee_cur_y;
|
||||
|
||||
// Context menu
|
||||
bool ctx_open;
|
||||
int ctx_x, ctx_y;
|
||||
@@ -217,7 +228,11 @@ void filemanager_delete_selected(FileManagerState* fm);
|
||||
void filemanager_open_ctx_menu(FileManagerState* fm, int local_x, int local_y, int target_idx);
|
||||
void filemanager_close_ctx_menu(FileManagerState* fm);
|
||||
void filemanager_show_properties(FileManagerState* fm, int target_idx);
|
||||
void filemanager_show_multi_properties(FileManagerState* fm,
|
||||
const int* indices, int count);
|
||||
void filemanager_show_directory_delete_confirmation(FileManagerState* fm, int target_idx);
|
||||
void filemanager_show_bulk_delete_confirmation(FileManagerState* fm,
|
||||
const int* indices, int count);
|
||||
|
||||
void filemanager_push_history(FileManagerState* fm);
|
||||
void filemanager_navigate(FileManagerState* fm, const char* name);
|
||||
@@ -239,6 +254,12 @@ int filemanager_grid_row_y(FileManagerState* fm, int row, int cols);
|
||||
int filemanager_grid_content_height(FileManagerState* fm, int cols);
|
||||
int filemanager_grid_index_at(FileManagerState* fm, int cols, int x, int rel_y);
|
||||
|
||||
// Selection helpers
|
||||
void filemanager_clear_multi_selection(FileManagerState* fm);
|
||||
// Fill out with selected entry indices. Returns count. Uses multi_selected if
|
||||
// non-empty, otherwise falls back to fm->selected (0 or 1 results).
|
||||
int filemanager_collect_selection(const FileManagerState* fm, int* out, int max);
|
||||
|
||||
void filemanager_draw_header(Canvas& c, FileManagerState* fm, Color toolbar_color, Color btn_bg);
|
||||
void filemanager_on_draw(Window* win, Framebuffer& fb);
|
||||
void filemanager_on_mouse(Window* win, MouseEvent& ev);
|
||||
|
||||
Reference in New Issue
Block a user