Codepage messages related translated & other stuff...
[midnight-commander.git] / src / panel.h
blob130d72977c61084ab4fb724253f6159956e9389f
1 #ifndef __PANEL_H
2 #define __PANEL_H
4 #include "fs.h"
5 #include "dir.h" /* file_entry */
6 #include "dlg.h"
7 #include "util.h"
8 #include "widget.h" /* for history loading and saving */
10 #define LIST_TYPES 5
12 #ifdef HAVE_GNOME
13 /* Keep the following in sync with setup.c */
15 /* Number of columns that each mode requires */
16 #define GMC_COLUMNS_BRIEF 2 /* brief view */
17 #define GMC_COLUMNS_DETAILED 4 /* detailed view */
18 #define GMC_COLUMNS_CUSTOM 15 /* custom view */
19 #define GMC_COLUMNS (GMC_COLUMNS_BRIEF + GMC_COLUMNS_DETAILED + GMC_COLUMNS_CUSTOM)
21 /* Default column widths */
22 extern int default_column_width[GMC_COLUMNS];
24 /* custom listing format */
25 extern char *default_user_format;
26 #endif
28 enum list_types {
29 list_full, /* Name, size, perm/date */
30 list_brief, /* Name */
31 list_long, /* Like ls -l */
32 list_user, /* User defined */
33 list_icons /* iconic display */
36 enum view_modes {
37 view_listing, /* Directory listing */
38 view_info, /* Information panel */
39 view_tree, /* Tree view */
40 view_quick, /* Quick view */
41 view_nothing /* Undefined */
44 enum panel_display_enum {
45 frame_full, /* full screen frame */
46 frame_half /* half screen frame */
49 #define is_view_special(x) (((x) == view_info) || ((x) == view_quick))
51 #define J_LEFT 1
52 #define J_RIGHT 2
53 #define J_CENTER 3
55 #define IS_FIT(x) ((x) & 0x0004)
56 #define MAKE_FIT(x) ((x) | 0x0004)
57 #define HIDE_FIT(x) ((x) & 0x0003)
59 #define J_LEFT_FIT 5
60 #define J_RIGHT_FIT 6
61 #define J_CENTER_FIT 7
63 #define NORMAL 0
64 #define SELECTED 1
65 #define MARKED 2
66 #define MARKED_SELECTED 3
67 #define STATUS 5
70 * This describes a format item. The parse_display_format routine parses
71 * the user specified format and creates a linked list of format_e structures.
73 * parse_display_format computes the actual field allocations if
74 * the COMPUTE_FORMAT_ALLOCATIONs define is set. MC frontends that are
75 * just interested in the parsed display format should not set this define.
77 typedef struct format_e {
78 struct format_e *next;
79 int requested_field_len;
80 int field_len;
81 int just_mode;
82 int expand;
83 char *(*string_fn)(file_entry *, int len);
84 char *title;
85 char *id;
87 /* first format_e has the number of items */
88 int items;
89 int use_in_gui;
90 } format_e;
92 typedef struct {
93 Widget widget;
94 dir_list dir; /* Directory contents */
96 int list_type; /* listing type (was view_type) */
97 int active; /* If panel is currently selected */
98 char cwd [MC_MAXPATHLEN];/* Current Working Directory */
99 char lwd [MC_MAXPATHLEN];/* Last Working Directory */
100 Hist *dir_history; /* directory history */
101 char *hist_name; /* directory history name for history file */
102 int count; /* Number of files in dir structure */
103 int marked; /* Count of marked files */
104 int dirs_marked; /* Count of marked directories */
105 double total; /* Bytes in marked files */
106 int top_file; /* The file showed on the top of the panel */
107 int selected; /* Index to the selected file */
108 int reverse; /* Show listing in reverse? */
109 int case_sensitive; /* Listing is case sensitive? */
110 int split; /* Split panel to allow two columns */
111 int is_panelized; /* Flag: special filelisting, can't reload */
112 int frame_size; /* half or full frame */
113 int icons_per_row; /* Icon view; how many icons displayed per row */
114 sortfn *sort_type; /* Sort type */
115 char *filter; /* File name filter */
117 int dirty; /* Should we redisplay the panel? */
119 int user_mini_status; /* Is user_status_format used */
120 char *user_format; /* User format */
121 char *user_status_format[LIST_TYPES];/* User format for status line */
123 format_e *format; /* Display format */
124 format_e *status_format; /* Mini status format */
126 int format_modified; /* If the format was changed this is set */
128 char *panel_name; /* The panel name */
129 struct stat dir_stat; /* Stat of current dir: used by execute () */
131 char *gc;
132 void *font;
133 int item_height;
134 int total_width;
135 int ascent;
136 int descent;
138 int searching;
139 char search_buffer [256];
141 void *port_ui; /* UI stuff specific to each GUI port */
143 #ifdef HAVE_GNOME
144 /* These are standard GtkWidgets */
146 void *xwindow; /* The toplevel window */
148 void *table;
149 void *view_table;
150 void *pane;
151 void *list;
152 void *tree;
153 void *icons;
154 void *notebook;
155 void *status;
156 void *ministatus;
157 void *tree_scrolled_window;
159 void *filter_w; /* A WInput* */
160 void *current_dir; /* A WInput* */
161 int estimated_total;
163 /* default column layout */
164 int column_width[GMC_COLUMNS];
166 /* navigation buttons */
167 void *back_b;
168 void *fwd_b;
169 void *up_b;
171 /* Used during drag and drop */
172 int maybe_start_drag;
173 int click_x, click_y;
175 /* View menu and toolbar items */
176 void **view_menu_items;
177 void **view_toolbar_items;
179 int dragging;
181 /* Unique numerical ID for session management */
182 int id;
184 /* Used for scrolling nicely during drags */
185 int timer_id;
186 int drag_motion_x;
187 int drag_motion_y;
189 /* The highlighted row in the tree for drag and drop */
190 int drag_tree_row;
191 int drag_tree_timeout_id;
192 file_entry *drag_tree_fe;
194 /* Whether the user is dragging something over the tree */
195 int drag_tree_dragging_over;
197 void *panel_listbox; /* container for the list */
198 int is_a_desktop_panel;
200 /* CORBA servant */
201 void *servant;
202 #endif
203 } WPanel;
205 WPanel *panel_new (const char *panel_name);
206 void panel_set_size (WPanel *panel, int x1, int y1, int x2, int y2);
207 void paint_paint (WPanel *panel);
208 void panel_refresh (WPanel *panel);
209 void Xtry_to_select (WPanel *panel, char *name);
210 void panel_clean_dir (WPanel *panel);
211 int is_a_panel (Widget *);
213 extern int torben_fj_mode;
214 extern int permission_mode;
215 extern int filetype_mode;
216 extern int show_mini_info;
217 extern int panel_scroll_pages;
219 #define selection(p) (&(p->dir.list [p->selected]))
220 #ifdef HAVE_GNOME
221 #define is_a_desktop_panel(p) ((p->is_a_desktop_panel))
222 /* Evil empty trash_hack */
223 extern int is_trash_panel;
225 #else
226 #define is_a_desktop_panel(p) FALSE
227 #endif
228 extern int fast_reload;
230 extern int extra_info;
232 /*#define ITEMS(p) ((p)->view_type == view_brief ? (p)->lines *2 : (p)->lines)
234 /* The return value of panel_reload */
235 #define CHANGED 1
237 #define PANEL_ISVIEW(p) (p->view_type == view_brief || \
238 p->view_type == view_full || \
239 p->view_type == view_long || \
240 p->view_type == view_user || \
241 p->view_type == view_tree)
243 #define RP_ONLY_PAINT 0
244 #define RP_SETPOS 1
246 void set_colors (WPanel *panel);
247 void paint_panel (WPanel *panel);
248 void format_file (char *dest, WPanel *panel, int file_index, int panel_width, int attr, int isstatus);
249 void repaint_file (WPanel *panel, int file_index, int move, int attr, int isstatus);
250 void display_mini_info (WPanel *panel);
251 void panel_reload (WPanel *panel);
252 void paint_dir (WPanel *panel);
253 void show_dir (WPanel *panel);
255 void panel_set_sort_order (WPanel *panel, sortfn *sort_order);
256 void panel_re_sort (WPanel *panel);
258 /* NOTE: Have to be ifdefed for HAVE_X */
259 void x_panel_set_size (int index);
260 void x_create_panel (Dlg_head *h, widget_data parent, WPanel *panel);
261 void x_fill_panel (WPanel *panel);
262 void x_adjust_top_file (WPanel *panel);
263 void x_filter_changed (WPanel *panel);
264 void x_add_sort_label (WPanel *panel, int index, char *text, char *tag, void *sr);
265 void x_sort_label_start (WPanel *panel);
266 void x_reset_sort_labels (WPanel *panel);
267 void x_panel_destroy (WPanel *panel);
268 void change_view (WPanel *panel, int view_type);
269 void x_panel_update_marks (WPanel *panel);
271 extern void paint_info_panel (WPanel *);
272 extern void paint_quick_view_panel (WPanel *);
273 void info_frame (WPanel *panel);
274 extern WPanel *the_info_panel;
275 void paint_frame (WPanel *panel);
276 void panel_update_contents (WPanel *panel);
277 void panel_update_cols (Widget *widget, int frame_size);
278 format_e *use_display_format (WPanel *panel, char *format, char **error, int isstatus);
279 char *panel_format (WPanel *panel);
280 char *mini_status_format (WPanel *panel);
281 int set_panel_formats (WPanel *p);
282 void start_search (WPanel *panel);
284 WPanel *get_current_panel (void);
285 WPanel *get_other_panel (void);
287 #define other_panel get_other_panel()
289 extern WPanel *left_panel;
290 extern WPanel *right_panel;
291 extern WPanel *current_panel;
293 void try_to_select (WPanel *panel, char *name);
295 #define DEFAULT_USER_FORMAT "half type,name,|,size,|,perm"
297 /* This were in main: */
298 void unmark_files (WPanel *panel);
299 void select_item (WPanel *panel);
300 int ITEMS (WPanel *p);
301 void unselect_item (WPanel *panel);
303 extern Hook *select_file_hook;
305 char *string_file_type (file_entry *fe, int len);
306 char *string_file_size_brief (file_entry *fe, int len);
307 char *string_file_permission (file_entry *fe, int len);
308 char *string_file_nlinks (file_entry *fe, int len);
309 char *string_file_owner (file_entry *fe, int len);
310 char *string_file_group (file_entry *fe, int len);
311 char *string_file_size (file_entry *fe, int len);
312 char *string_file_mtime (file_entry *fe, int len);
313 char *string_file_atime (file_entry *fe, int len);
314 char *string_file_ctime (file_entry *fe, int len);
315 char *string_file_name (file_entry *fe, int len);
316 char *string_space (file_entry *fe, int len);
317 char *string_dot (file_entry *fe, int len);
318 char *string_marked (file_entry *fe, int len);
319 char *string_file_perm_octal (file_entry *fe, int len);
320 char *string_inode (file_entry *fe, int len);
321 char *string_file_ngid (file_entry *fe, int len);
322 char *string_file_nuid (file_entry *fe, int len);
324 void recalculate_panel_summary (WPanel *panel);
325 void file_mark (WPanel *panel, int index, int val);
326 void do_file_mark (WPanel *panel, int index, int val);
327 int file_compute_color (int attr, file_entry *fe);
328 int file_entry_color (file_entry *fe);
329 void do_file_mark_range (WPanel *panel, int r1, int r2);
330 int do_enter_on_file_entry (file_entry *fe);
331 int do_enter (WPanel *panel);
333 /* NOTE: Have to be ifdefed for HAVE_X */
334 void x_panel_select_item (WPanel *panel, int index, int val);
335 void x_select_item (WPanel *panel);
336 void x_unselect_item (WPanel *panel);
337 sortfn *get_sort_fn (char *name);
338 void update_one_panel_widget (WPanel *panel, int force_update, char *current_file);
339 void panel_update_marks (WPanel *panel);
341 void directory_history_next (WPanel * panel);
342 void directory_history_prev (WPanel * panel);
343 void directory_history_list (WPanel * panel);
345 #endif /* __PANEL_H */