source: mainline/uspace/lib/ui/private/filelist.h@ d7f7a4a

Last change on this file since d7f7a4a was d7f7a4a, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 4 years ago

Replace some license headers with SPDX identifier

Headers are replaced using tools/transorm-copyright.sh only
when it can be matched verbatim with the license header used
throughout most of the codebase.

  • Property mode set to 100644
File size: 4.4 KB
Line 
1/*
2 * SPDX-FileCopyrightText: 2022 Jiri Svoboda
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7/** @addtogroup libui
8 * @{
9 */
10/**
11 * @file File list
12 */
13
14#ifndef _UI_PRIVATE_FILELIST_H
15#define _UI_PRIVATE_FILELIST_H
16
17#include <adt/list.h>
18#include <gfx/color.h>
19#include <gfx/coord.h>
20#include <ipc/loc.h>
21#include <ui/window.h>
22#include <stdint.h>
23#include <types/ui/filelist.h>
24
25/** File list entry attributes */
26struct ui_file_list_entry_attr {
27 /** File name */
28 const char *name;
29 /** File size */
30 uint64_t size;
31 /** @c true iff entry is a directory */
32 bool isdir;
33 /** Service number for service special entries */
34 service_id_t svc;
35};
36
37/** File list entry */
38struct ui_file_list_entry {
39 /** Containing file list */
40 struct ui_file_list *flist;
41 /** Link to @c flist->entries */
42 link_t lentries;
43 /** File name */
44 char *name;
45 /** File size */
46 uint64_t size;
47 /** @c true iff entry is a directory */
48 bool isdir;
49 /** Service number for service special entries */
50 service_id_t svc;
51};
52
53/** File list.
54 *
55 * Allows browsing files and directories.
56 */
57typedef struct ui_file_list {
58 /** Base control object */
59 struct ui_control *control;
60
61 /** Containing window */
62 ui_window_t *window;
63
64 /** Callbacks */
65 struct ui_file_list_cb *cb;
66
67 /** Callback argument */
68 void *cb_arg;
69
70 /** File list rectangle */
71 gfx_rect_t rect;
72
73 /** Scrollbar */
74 struct ui_scrollbar *scrollbar;
75
76 /** Directory-type entry color */
77 gfx_color_t *dir_color;
78
79 /** Service-type entry color */
80 gfx_color_t *svc_color;
81
82 /** File list entries (list of ui_file_list_entry_t) */
83 list_t entries;
84
85 /** Number of entries */
86 size_t entries_cnt;
87
88 /** First entry of current page */
89 ui_file_list_entry_t *page;
90
91 /** Index of first entry of current page */
92 size_t page_idx;
93
94 /** Cursor position */
95 ui_file_list_entry_t *cursor;
96
97 /** Index of entry under cursor */
98 size_t cursor_idx;
99
100 /** @c true iff the file list is active */
101 bool active;
102
103 /** Directory */
104 char *dir;
105} ui_file_list_t;
106
107extern gfx_coord_t ui_file_list_entry_height(ui_file_list_t *);
108extern errno_t ui_file_list_entry_paint(ui_file_list_entry_t *, size_t);
109extern errno_t ui_file_list_paint(ui_file_list_t *);
110extern ui_evclaim_t ui_file_list_kbd_event(ui_file_list_t *, kbd_event_t *);
111extern ui_evclaim_t ui_file_list_pos_event(ui_file_list_t *, pos_event_t *);
112extern unsigned ui_file_list_page_size(ui_file_list_t *);
113extern void ui_file_list_inside_rect(ui_file_list_t *, gfx_rect_t *);
114extern void ui_file_list_scrollbar_rect(ui_file_list_t *, gfx_rect_t *);
115extern gfx_coord_t ui_file_list_scrollbar_pos(ui_file_list_t *);
116extern void ui_file_list_scrollbar_update(ui_file_list_t *);
117extern bool ui_file_list_is_active(ui_file_list_t *);
118extern void ui_file_list_entry_delete(ui_file_list_entry_t *);
119extern void ui_file_list_clear_entries(ui_file_list_t *);
120extern errno_t ui_file_list_sort(ui_file_list_t *);
121extern int ui_file_list_entry_ptr_cmp(const void *, const void *);
122extern ui_file_list_entry_t *ui_file_list_first(ui_file_list_t *);
123extern ui_file_list_entry_t *ui_file_list_last(ui_file_list_t *);
124extern ui_file_list_entry_t *ui_file_list_next(ui_file_list_entry_t *);
125extern ui_file_list_entry_t *ui_file_list_prev(ui_file_list_entry_t *);
126extern ui_file_list_entry_t *ui_file_list_page_nth_entry(ui_file_list_t *,
127 size_t, size_t *);
128extern void ui_file_list_entry_attr_init(ui_file_list_entry_attr_t *);
129extern errno_t ui_file_list_entry_append(ui_file_list_t *,
130 ui_file_list_entry_attr_t *);
131extern void ui_file_list_cursor_move(ui_file_list_t *, ui_file_list_entry_t *,
132 size_t);
133extern void ui_file_list_cursor_up(ui_file_list_t *);
134extern void ui_file_list_cursor_down(ui_file_list_t *);
135extern void ui_file_list_cursor_top(ui_file_list_t *);
136extern void ui_file_list_cursor_bottom(ui_file_list_t *);
137extern void ui_file_list_page_up(ui_file_list_t *);
138extern void ui_file_list_page_down(ui_file_list_t *);
139extern void ui_file_list_scroll_up(ui_file_list_t *);
140extern void ui_file_list_scroll_down(ui_file_list_t *);
141extern void ui_file_list_scroll_page_up(ui_file_list_t *);
142extern void ui_file_list_scroll_page_down(ui_file_list_t *);
143extern void ui_file_list_scroll_pos(ui_file_list_t *, size_t);
144extern errno_t ui_file_list_open_dir(ui_file_list_t *, ui_file_list_entry_t *);
145extern errno_t ui_file_list_open_file(ui_file_list_t *, ui_file_list_entry_t *);
146extern void ui_file_list_activate_req(ui_file_list_t *);
147extern void ui_file_list_selected(ui_file_list_t *, const char *);
148
149#endif
150
151/** @}
152 */
Note: See TracBrowser for help on using the repository browser.