Sync to Wine-0_9_5:
[reactos.git] / rosapps / mc / src / panel.h
1 #ifndef __PANEL_H
2 #define __PANEL_H
3
4 #include "dir.h" /* file_entry */
5 #include "dlg.h"
6 #include "widget.h" /* for history loading and saving */
7
8 #define LIST_TYPES 5
9
10 enum list_types {
11 list_full, /* Name, size, perm/date */
12 list_brief, /* Name */
13 list_long, /* Like ls -l */
14 list_user, /* User defined */
15 list_icons /* iconic display */
16 };
17
18 enum view_modes {
19 view_listing, /* Directory listing */
20 view_info, /* Information panel */
21 view_tree, /* Tree view */
22 view_quick, /* Quick view */
23 view_nothing /* Undefined */
24 };
25
26 enum panel_display_enum {
27 frame_full, /* full screen frame */
28 frame_half /* half screen frame */
29 };
30
31 #define is_view_special(x) ((x == view_info) || (x == view_quick))
32
33 #define J_LEFT 0
34 #define J_RIGHT 1
35
36 #define NORMAL 0
37 #define SELECTED 1
38 #define MARKED 2
39 #define MARKED_SELECTED 3
40 #define STATUS 5
41
42 /*
43 * This describes a format item. The parse_display_format routine parses
44 * the user specified format and creates a linked list of format_e structures.
45 *
46 * parse_display_format computes the actual field allocations if
47 * the COMPUTE_FORMAT_ALLOCATIONs define is set. MC frontends that are
48 * just interested in the parsed display format should not set this define.
49 */
50 typedef struct format_e {
51 struct format_e *next;
52 int requested_field_len;
53 int field_len;
54 int just_mode;
55 int expand;
56 char *(*string_fn)(file_entry *, int len);
57 char *title;
58 char *id;
59
60 /* first format_e has the number of items */
61 int items;
62 int use_in_gui;
63 } format_e;
64
65 typedef struct {
66 Widget widget;
67 dir_list dir; /* Directory contents */
68
69 int list_type; /* listing type (was view_type) */
70 int active; /* If panel is currently selected */
71 char cwd [MC_MAXPATHLEN];/* Current Working Directory */
72 char lwd [MC_MAXPATHLEN];/* Last Working Directory */
73 Hist *dir_history; /* directory history */
74 char *hist_name; /* directory history name for history file */
75 int count; /* Number of files in dir structure */
76 int marked; /* Count of marked files */
77 int dirs_marked; /* Count of marked directories */
78 long int total; /* Bytes in marked files */
79 int top_file; /* The file showed on the top of the panel */
80 int selected; /* Index to the selected file */
81 int reverse; /* Show listing in reverse? */
82 int case_sensitive; /* Listing is case sensitive? */
83 int split; /* Split panel to allow two columns */
84 int is_panelized; /* Flag: special filelisting, can't reload */
85 int frame_size; /* half or full frame */
86 int icons_per_row; /* Icon view; how many icons displayed per row */
87 sortfn *sort_type; /* Sort type */
88 char *filter; /* File name filter */
89
90 int dirty; /* Should we redisplay the panel? */
91
92 int user_mini_status; /* Is user_status_format used */
93 char *user_format; /* User format */
94 char *user_status_format[LIST_TYPES];/* User format for status line */
95
96 format_e *format; /* Display format */
97 format_e *status_format; /* Mini status format */
98
99 int format_modified; /* If the format was changed this is set */
100
101 char *panel_name; /* The panel name */
102 struct stat dir_stat; /* Stat of current dir: used by execute () */
103
104 char *gc;
105 void *font;
106 int item_height;
107 int total_width;
108 int ascent;
109 int descent;
110
111 int searching;
112 char search_buffer [256];
113
114 int has_dir_sizes; /* Set if directories have sizes = to du -s */
115
116 #ifdef HAVE_GNOME
117 /* These are standard GtkWidgets */
118
119 void *xwindow; /* The toplevel window */
120
121 void *table;
122 void *list;
123 void *icons;
124 void *status;
125 void *ministatus;
126
127 void *filter_w; /* A WInput* */
128 void *current_dir; /* A WInput* */
129 int estimated_total;
130
131 /* navigation buttons */
132 void *back_b;
133 void *fwd_b;
134 void *up_b;
135 #endif
136 } WPanel;
137
138 WPanel *panel_new (char *panel_name);
139 void panel_set_size (WPanel *panel, int x1, int y1, int x2, int y2);
140 void paint_paint (WPanel *panel);
141 void panel_refresh (WPanel *panel);
142 void Xtry_to_select (WPanel *panel, char *name);
143
144 int is_a_panel (Widget *);
145
146 extern int torben_fj_mode;
147 extern int permission_mode;
148 extern int filetype_mode;
149 extern int show_mini_info;
150 extern int panel_scroll_pages;
151
152 #define selection(p) (&(p->dir.list [p->selected]))
153
154 extern int fast_reload;
155
156 extern int extra_info;
157
158 /*#define ITEMS(p) ((p)->view_type == view_brief ? (p)->lines *2 : (p)->lines)
159 */
160 /* The return value of panel_reload */
161 #define CHANGED 1
162
163 #define PANEL_ISVIEW(p) (p->view_type == view_brief || \
164 p->view_type == view_full || \
165 p->view_type == view_long || \
166 p->view_type == view_user || \
167 p->view_type == view_tree)
168
169 #define RP_ONLY_PAINT 0
170 #define RP_SETPOS 1
171
172 void set_colors (WPanel *panel);
173 void paint_panel (WPanel *panel);
174 void format_file (char *dest, WPanel *panel, int file_index, int panel_width, int attr, int isstatus);
175 void repaint_file (WPanel *panel, int file_index, int move, int attr, int isstatus);
176 void display_mini_info (WPanel *panel);
177 void panel_reload (WPanel *panel);
178 void paint_dir (WPanel *panel);
179 void show_dir (WPanel *panel);
180
181 /* NOTE: Have to be ifdefed for HAVE_X */
182 void x_panel_set_size (int index);
183 void x_create_panel (Dlg_head *h, widget_data parent, WPanel *panel);
184 void x_fill_panel (WPanel *panel);
185 void x_adjust_top_file (WPanel *panel);
186 void x_filter_changed (WPanel *panel);
187 void x_add_sort_label (WPanel *panel, int index, char *text, char *tag, void *sr);
188 void x_sort_label_start (WPanel *panel);
189 void x_reset_sort_labels (WPanel *panel);
190 void x_panel_destroy (WPanel *panel);
191 void change_view (WPanel *panel, int view_type);
192 void x_panel_update_marks (WPanel *panel);
193
194 extern void paint_info_panel (WPanel *);
195 extern void paint_quick_view_panel (WPanel *);
196 void info_frame (WPanel *panel);
197 extern WPanel *the_info_panel;
198 void paint_frame (WPanel *panel);
199 void panel_update_contents (WPanel *panel);
200 void panel_update_cols (Widget *widget, int frame_size);
201 format_e *use_display_format (WPanel *panel, char *format, char **error, int isstatus);
202 char *panel_format (WPanel *panel);
203 char *mini_status_format (WPanel *panel);
204 int set_panel_formats (WPanel *p);
205
206 WPanel *get_current_panel (void);
207 WPanel *get_other_panel (void);
208
209 #define other_panel get_other_panel()
210
211 extern WPanel *left_panel;
212 extern WPanel *right_panel;
213 extern WPanel *current_panel;
214
215 void try_to_select (WPanel *panel, char *name);
216
217 #define DEFAULT_USER_FORMAT "half type,name,|,size,|,perm"
218
219 /* This were in main: */
220 void unmark_files (WPanel *panel);
221 void select_item (WPanel *panel);
222 int ITEMS (WPanel *p);
223 void unselect_item (WPanel *panel);
224
225 extern Hook *select_file_hook;
226
227 char *string_file_type (file_entry *fe, int len);
228 char *string_file_size_brief (file_entry *fe, int len);
229 char *string_file_permission (file_entry *fe, int len);
230 char *string_file_nlinks (file_entry *fe, int len);
231 char *string_file_owner (file_entry *fe, int len);
232 char *string_file_group (file_entry *fe, int len);
233 char *string_file_size (file_entry *fe, int len);
234 char *string_file_mtime (file_entry *fe, int len);
235 char *string_file_atime (file_entry *fe, int len);
236 char *string_file_ctime (file_entry *fe, int len);
237 char *string_file_name (file_entry *fe, int len);
238 char *string_space (file_entry *fe, int len);
239 char *string_dot (file_entry *fe, int len);
240 char *string_marked (file_entry *fe, int len);
241 char *string_file_perm_octal (file_entry *fe, int len);
242 char *string_inode (file_entry *fe, int len);
243 char *string_file_ngid (file_entry *fe, int len);
244 char *string_file_nuid (file_entry *fe, int len);
245
246 void file_mark (WPanel *panel, int index, int val);
247 void do_file_mark (WPanel *panel, int index, int val);
248 int file_compute_color (int attr, file_entry *fe);
249 int file_entry_color (file_entry *fe);
250 void do_file_mark_range (WPanel *panel, int r1, int r2);
251 void do_enter (WPanel *panel);
252
253 /* NOTE: Have to be ifdefed for HAVE_X */
254 void x_panel_select_item (WPanel *panel, int index, int val);
255 void x_select_item (WPanel *panel);
256 void x_unselect_item (WPanel *panel);
257 sortfn *get_sort_fn (char *name);
258 void update_one_panel_widget (WPanel *panel, int force_update, char *current_file);
259 void panel_update_marks (WPanel *panel);
260
261 void directory_history_next (WPanel * panel);
262 void directory_history_prev (WPanel * panel);
263 void directory_history_list (WPanel * panel);
264
265 #endif /* __PANEL_H */