(ftpfs_file_store): type accuracy and simplify conditions.
[midnight-commander.git] / src / filemanager / panel.h
blob62b929824e0865a85e0fd80d32f53c314f920a86
1 /** \file panel.h
2 * \brief Header: defines WPanel structure
3 */
5 #ifndef MC__PANEL_H
6 #define MC__PANEL_H
8 #include <inttypes.h> /* uintmax_t */
10 #include "lib/global.h" /* gboolean */
11 #include "lib/fs.h" /* MC_MAXPATHLEN */
12 #include "lib/strutil.h"
13 #include "lib/widget.h" /* Widget */
15 #include "dir.h" /* dir_list */
17 /*** typedefs(not structures) and defined constants **********************************************/
19 #define selection(p) (&(p->dir.list[p->selected]))
20 #define DEFAULT_USER_FORMAT "half type name | size | perm"
22 #define LIST_TYPES 4
24 #define UP_KEEPSEL ((char *) -1)
26 /*** enums ***************************************************************************************/
28 enum list_types
30 list_full, /* Name, size, perm/date */
31 list_brief, /* Name */
32 list_long, /* Like ls -l */
33 list_user /* User defined */
36 typedef enum
38 frame_full, /* full screen frame */
39 frame_half /* half screen frame */
40 } panel_display_t;
42 typedef enum
44 UP_OPTIMIZE = 0,
45 UP_RELOAD = 1,
46 UP_ONLY_CURRENT = 2
47 } panel_update_flags_t;
49 /* run mode and params */
51 enum cd_enum
53 cd_parse_command,
54 cd_exact
57 /*** structures declarations (and typedefs of structures)*****************************************/
59 struct format_e;
61 typedef struct panel_field_struct
63 const char *id;
64 int min_size;
65 int expands;
66 align_crt_t default_just;
67 const char *hotkey;
68 const char *title_hotkey;
69 gboolean is_user_choice;
70 gboolean use_in_user_format;
71 const char *(*string_fn) (file_entry *, int);
72 sortfn *sort_routine; /* used by mouse_sort_col() */
73 } panel_field_t;
75 typedef struct
77 dir_list list;
78 int count;
79 vfs_path_t *root_vpath;
80 } panelized_panel_t;
82 typedef struct panel_sort_info_struct
84 gboolean reverse; /* Show listing in reverse? */
85 gboolean case_sensitive; /* Listing is case sensitive? */
86 gboolean exec_first; /* Show executable top in list? */
87 const panel_field_t *sort_field;
88 } panel_sort_info_t;
90 typedef struct WPanel
92 Widget widget;
93 dir_list dir; /* Directory contents */
95 int list_type; /* listing type (was view_type) */
96 int active; /* If panel is currently selected */
97 vfs_path_t *cwd_vpath; /* Current Working Directory */
98 vfs_path_t *lwd_vpath; /* Last Working Directory */
99 GList *dir_history; /* directory history */
100 GList *dir_history_current; /* pointer to the current history item */
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 uintmax_t 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 split; /* Split panel to allow two columns */
109 gboolean is_panelized; /* Flag: special filelisting, can't reload */
110 panel_display_t frame_size; /* half or full frame */
111 char *filter; /* File name filter */
112 panel_sort_info_t sort_info; /* Sort descriptor */
114 int dirty; /* Should we redisplay the panel? */
116 int user_mini_status; /* Is user_status_format used */
117 char *user_format; /* User format */
118 char *user_status_format[LIST_TYPES]; /* User format for status line */
120 struct format_e *format; /* Display format */
121 struct format_e *status_format; /* Mini status format */
123 int format_modified; /* If the format was changed this is set */
125 char *panel_name; /* The panel name */
126 struct stat dir_stat; /* Stat of current dir: used by execute () */
128 #ifdef HAVE_CHARSET
129 int codepage; /* panel codepage */
130 #endif
132 gboolean searching;
133 char search_buffer[MC_MAXFILENAMELEN];
134 char prev_search_buffer[MC_MAXFILENAMELEN];
135 char search_char[MB_LEN_MAX]; /*buffer for multibytes characters */
136 int search_chpoint; /*point after last characters in search_char */
137 int content_shift; /* Number of characters of filename need to skip from left side. */
138 int max_shift; /* Max shift for visible part of current panel */
139 } WPanel;
141 /*** global variables defined in .c file *********************************************************/
143 extern panelized_panel_t panelized_panel;
145 extern panel_field_t panel_fields[];
147 extern hook_t *select_file_hook;
149 /*** declarations of public functions ************************************************************/
151 WPanel *panel_new (const char *panel_name);
152 WPanel *panel_new_with_dir (const char *panel_name, const char *dr);
153 void panel_clean_dir (WPanel * panel);
155 void panel_reload (WPanel * panel);
156 void panel_set_sort_order (WPanel * panel, const panel_field_t * sort_order);
157 void panel_re_sort (WPanel * panel);
159 #ifdef HAVE_CHARSET
160 void panel_change_encoding (WPanel * panel);
161 vfs_path_t *remove_encoding_from_path (const vfs_path_t * vpath);
162 #endif
164 void update_panels (panel_update_flags_t flags, const char *current_file);
165 int set_panel_formats (WPanel * p);
166 void panel_update_cols (Widget * widget, panel_display_t frame_size);
168 void try_to_select (WPanel * panel, const char *name);
170 void unmark_files (WPanel * panel);
171 void select_item (WPanel * panel);
173 void recalculate_panel_summary (WPanel * panel);
174 void file_mark (WPanel * panel, int idx, int val);
175 void do_file_mark (WPanel * panel, int idx, int val);
177 gboolean do_panel_cd (struct WPanel *panel, const vfs_path_t * new_dir_vpath, enum cd_enum cd_type);
179 gsize panel_get_num_of_sortable_fields (void);
180 const char **panel_get_sortable_fields (gsize *);
181 const panel_field_t *panel_get_field_by_id (const char *);
182 const panel_field_t *panel_get_field_by_title (const char *);
183 const panel_field_t *panel_get_field_by_title_hotkey (const char *);
184 gsize panel_get_num_of_user_possible_fields (void);
185 const char **panel_get_user_possible_fields (gsize *);
186 void panel_set_cwd (WPanel * panel, const char *path_str);
187 void panel_set_lwd (WPanel * panel, const char *path_str);
189 void panel_init (void);
190 void panel_deinit (void);
191 gboolean do_cd (const vfs_path_t * new_dir_vpath, enum cd_enum cd_type);
193 /*** inline functions ****************************************************************************/
194 #endif /* MC__PANEL_H */