This source file includes following definitions.
- panel_empty_new
- panel_with_dir_new
- panel_new
- panel_sized_new
1
2
3
4
5 #ifndef MC__PANEL_H
6 #define MC__PANEL_H
7
8 #include <inttypes.h>
9 #include <limits.h>
10
11 #include "lib/global.h"
12 #include "lib/fs.h"
13 #include "lib/strutil.h"
14 #include "lib/widget.h"
15 #include "lib/filehighlight.h"
16 #include "lib/file-entry.h"
17
18 #include "dir.h"
19
20
21
22 #define PANEL(x) ((WPanel *) (x))
23
24 #define LIST_FORMATS 4
25
26 #define UP_KEEPSEL ((char *) -1)
27
28
29
30 typedef enum
31 {
32 list_full,
33 list_brief,
34 list_long,
35 list_user
36 } list_format_t;
37
38 typedef enum
39 {
40 frame_full,
41 frame_half
42 } panel_display_t;
43
44 typedef enum
45 {
46 UP_OPTIMIZE = 0,
47 UP_RELOAD = 1,
48 UP_ONLY_CURRENT = 2
49 } panel_update_flags_t;
50
51
52 enum cd_enum
53 {
54 cd_parse_command,
55 cd_exact
56 };
57
58
59
60 typedef struct panel_field_struct
61 {
62 const char *id;
63 int min_size;
64 gboolean expands;
65 align_crt_t default_just;
66 const char *hotkey;
67 const char *title_hotkey;
68 gboolean is_user_choice;
69 gboolean use_in_user_format;
70 const char *(*string_fn) (const file_entry_t *fe, int len);
71 GCompareFunc sort_routine;
72 } panel_field_t;
73
74 typedef struct
75 {
76 dir_list list;
77 vfs_path_t *root_vpath;
78 } panelized_descr_t;
79
80 typedef struct
81 {
82 Widget widget;
83
84 char *name;
85
86 panel_display_t frame_size;
87
88 gboolean active;
89 gboolean dirty;
90
91 gboolean is_panelized;
92 panelized_descr_t *panelized_descr;
93
94 #ifdef HAVE_CHARSET
95 int codepage;
96 #endif
97
98 dir_list dir;
99 struct stat dir_stat;
100
101 vfs_path_t *cwd_vpath;
102 vfs_path_t *lwd_vpath;
103
104 list_format_t list_format;
105 GSList *format;
106 char *user_format;
107 int list_cols;
108 int brief_cols;
109
110 dir_sort_options_t sort_info;
111 const panel_field_t *sort_field;
112
113 int marked;
114 int dirs_marked;
115 uintmax_t total;
116
117 int top;
118 int current;
119
120 GSList *status_format;
121 gboolean user_mini_status;
122 char *user_status_format[LIST_FORMATS];
123
124 file_filter_t filter;
125
126 struct
127 {
128 char *name;
129 GList *list;
130 GList *current;
131 } dir_history;
132
133 struct
134 {
135 gboolean active;
136 GString *buffer;
137 GString *prev_buffer;
138 char ch[MB_LEN_MAX];
139 int chpoint;
140 } quick_search;
141
142 int content_shift;
143 int max_shift;
144 } WPanel;
145
146
147
148 extern hook_t *select_file_hook;
149
150 extern mc_fhl_t *mc_filehighlight;
151
152
153
154 WPanel *panel_sized_empty_new (const char *panel_name, const WRect *r);
155 WPanel *panel_sized_with_dir_new (const char *panel_name, const WRect *r, const vfs_path_t *vpath);
156
157 void panel_clean_dir (WPanel *panel);
158
159 void panel_reload (WPanel *panel);
160 void panel_set_sort_order (WPanel *panel, const panel_field_t *sort_order);
161 void panel_re_sort (WPanel *panel);
162
163 #ifdef HAVE_CHARSET
164 void panel_change_encoding (WPanel *panel);
165 vfs_path_t *remove_encoding_from_path (const vfs_path_t *vpath);
166 #endif
167
168 void update_panels (panel_update_flags_t flags, const char *current_file);
169 int set_panel_formats (WPanel *p);
170
171 void panel_set_filter (WPanel *panel, const file_filter_t *filter);
172
173 file_entry_t *panel_current_entry (const WPanel *panel);
174 void panel_set_current_by_name (WPanel *panel, const char *name);
175
176 void unmark_files (WPanel *panel);
177 void select_item (WPanel *panel);
178
179 void recalculate_panel_summary (WPanel *panel);
180 void file_mark (WPanel *panel, int idx, int val);
181 void do_file_mark (WPanel *panel, int idx, int val);
182 const GString *panel_find_marked_file (const WPanel *panel, int *current_file);
183 const GString *panel_get_marked_file (const WPanel *panel, int *current_file);
184
185 gboolean panel_do_cd (WPanel *panel, const vfs_path_t *new_dir_vpath, enum cd_enum cd_type);
186 MC_MOCKABLE gboolean panel_cd (WPanel *panel, const vfs_path_t *new_dir_vpath,
187 enum cd_enum cd_type);
188
189 gsize panel_get_num_of_sortable_fields (void);
190 char **panel_get_sortable_fields (gsize *array_size);
191 const panel_field_t *panel_get_field_by_id (const char *name);
192 const panel_field_t *panel_get_field_by_title (const char *name);
193 const panel_field_t *panel_get_field_by_title_hotkey (const char *name);
194 gsize panel_get_num_of_user_possible_fields (void);
195 char **panel_get_user_possible_fields (gsize *array_size);
196 void panel_set_cwd (WPanel *panel, const vfs_path_t *vpath);
197 void panel_set_lwd (WPanel *panel, const vfs_path_t *vpath);
198
199 void panel_panelize_cd (void);
200 void panel_panelize_change_root (WPanel *panel, const vfs_path_t *new_root);
201 void panel_panelize_absolutize_if_needed (WPanel *panel);
202 void panel_panelize_save (WPanel *panel);
203
204 void panel_init (void);
205 void panel_deinit (void);
206
207
208
209
210
211
212
213
214
215
216
217
218 static inline WPanel *
219 panel_empty_new (const char *panel_name)
220 {
221
222 WRect r = { 0, 0, 1, 1 };
223
224 return panel_sized_empty_new (panel_name, &r);
225 }
226
227
228
229
230
231
232
233
234
235
236
237 static inline WPanel *
238 panel_with_dir_new (const char *panel_name, const vfs_path_t *vpath)
239 {
240
241 WRect r = { 0, 0, 1, 1 };
242
243 return panel_sized_with_dir_new (panel_name, &r, vpath);
244 }
245
246
247
248
249
250
251
252
253
254
255 static inline WPanel *
256 panel_new (const char *panel_name)
257 {
258 return panel_with_dir_new (panel_name, NULL);
259 }
260
261
262
263
264
265
266
267
268
269
270
271 static inline WPanel *
272 panel_sized_new (const char *panel_name, const WRect *r)
273 {
274 return panel_sized_with_dir_new (panel_name, r, NULL);
275 }
276
277
278
279 #endif