root/src/filemanager/panel.h

/* [previous][next][first][last][top][bottom][index][help]  */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. panel_empty_new
  2. panel_with_dir_new
  3. panel_new
  4. panel_sized_new

   1 /** \file panel.h
   2  *  \brief Header: defines WPanel structure
   3  */
   4 
   5 #ifndef MC__PANEL_H
   6 #define MC__PANEL_H
   7 
   8 #include <inttypes.h>  // uintmax_t
   9 #include <limits.h>    // MB_LEN_MAX
  10 
  11 #include "lib/global.h"  // gboolean
  12 #include "lib/fs.h"      // MC_MAXPATHLEN
  13 #include "lib/strutil.h"
  14 #include "lib/widget.h"  // Widget
  15 #include "lib/filehighlight.h"
  16 #include "lib/file-entry.h"
  17 
  18 #include "dir.h"  // dir_list
  19 
  20 /*** typedefs(not structures) and defined constants **********************************************/
  21 
  22 #define PANEL(x)     ((WPanel *) (x))
  23 
  24 #define LIST_FORMATS 4
  25 
  26 #define UP_KEEPSEL   ((char *) -1)
  27 
  28 /*** enums ***************************************************************************************/
  29 
  30 typedef enum
  31 {
  32     list_full,   // Name, size, perm/date
  33     list_brief,  // Name
  34     list_long,   // Like ls -l
  35     list_user    // User defined
  36 } list_format_t;
  37 
  38 typedef enum
  39 {
  40     frame_full,  // full screen frame
  41     frame_half   // half screen frame
  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 /* run mode and params */
  52 enum cd_enum
  53 {
  54     cd_parse_command,
  55     cd_exact
  56 };
  57 
  58 /*** structures declarations (and typedefs of structures)*****************************************/
  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;  // used by mouse_sort_col()
  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;  // The panel name
  85 
  86     panel_display_t frame_size;  // half or full frame
  87 
  88     gboolean active;  // If panel is currently selected
  89     gboolean dirty;   // Should we redisplay the panel?
  90 
  91     gboolean is_panelized;               // Panelization: special mode, can't reload the file list
  92     panelized_descr_t *panelized_descr;  // Panelization descriptor
  93 
  94 #ifdef HAVE_CHARSET
  95     int codepage;  // Panel codepage
  96 #endif
  97 
  98     dir_list dir;          // Directory contents
  99     struct stat dir_stat;  // Stat of current dir: used by execute ()
 100 
 101     vfs_path_t *cwd_vpath;  // Current Working Directory
 102     vfs_path_t *lwd_vpath;  // Last Working Directory
 103 
 104     list_format_t list_format;  // Listing type
 105     GSList *format;             // Display format
 106     char *user_format;          // User format
 107     int list_cols;              // Number of file list columns
 108     int brief_cols;             // Number of columns in case of list_brief format
 109     // sort
 110     dir_sort_options_t sort_info;
 111     const panel_field_t *sort_field;
 112 
 113     int marked;       // Count of marked files
 114     int dirs_marked;  // Count of marked directories
 115     uintmax_t total;  // Bytes in marked files
 116 
 117     int top;      // The file shown on the top of the panel
 118     int current;  // Index to the currently selected file
 119 
 120     GSList *status_format;                   // Mini status format
 121     gboolean user_mini_status;               // Is user_status_format used
 122     char *user_status_format[LIST_FORMATS];  // User format for status line
 123 
 124     file_filter_t filter;  // File name filter
 125 
 126     struct
 127     {
 128         char *name;      // Directory history name for history file
 129         GList *list;     // Directory history
 130         GList *current;  // Pointer to the current history item
 131     } dir_history;
 132 
 133     struct
 134     {
 135         gboolean active;
 136         GString *buffer;
 137         GString *prev_buffer;
 138         char ch[MB_LEN_MAX];  // Buffer for multi-byte character
 139         int chpoint;          // Point after last characters in @ch
 140     } quick_search;
 141 
 142     int content_shift;  // Number of characters of filename need to skip from left side.
 143     int max_shift;      // Max shift for visible part of current panel
 144 } WPanel;
 145 
 146 /*** global variables defined in .c file *********************************************************/
 147 
 148 extern hook_t *select_file_hook;
 149 
 150 extern mc_fhl_t *mc_filehighlight;
 151 
 152 /*** declarations of public functions ************************************************************/
 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 /*** inline functions ****************************************************************************/
 209 /* --------------------------------------------------------------------------------------------- */
 210 /**
 211  * Empty panel creation.
 212  *
 213  * @param panel_name name of panel for setup retrieving
 214  *
 215  * @return new instance of WPanel
 216  */
 217 
 218 static inline WPanel *
 219 panel_empty_new (const char *panel_name)
     /* [previous][next][first][last][top][bottom][index][help]  */
 220 {
 221     // Unknown sizes of the panel at startup
 222     WRect r = { 0, 0, 1, 1 };
 223 
 224     return panel_sized_empty_new (panel_name, &r);
 225 }
 226 
 227 /* --------------------------------------------------------------------------------------------- */
 228 /**
 229  * Panel creation for specified directory.
 230  *
 231  * @param panel_name name of panel for setup retrieving
 232  * @param vpath working panel directory. If NULL then current directory is used
 233  *
 234  * @return new instance of WPanel
 235  */
 236 
 237 static inline WPanel *
 238 panel_with_dir_new (const char *panel_name, const vfs_path_t *vpath)
     /* [previous][next][first][last][top][bottom][index][help]  */
 239 {
 240     // Unknown sizes of the panel at startup
 241     WRect r = { 0, 0, 1, 1 };
 242 
 243     return panel_sized_with_dir_new (panel_name, &r, vpath);
 244 }
 245 
 246 /* --------------------------------------------------------------------------------------------- */
 247 /**
 248  * Panel creation.
 249  *
 250  * @param panel_name name of panel for setup retrieving
 251  *
 252  * @return new instance of WPanel
 253  */
 254 
 255 static inline WPanel *
 256 panel_new (const char *panel_name)
     /* [previous][next][first][last][top][bottom][index][help]  */
 257 {
 258     return panel_with_dir_new (panel_name, NULL);
 259 }
 260 
 261 /* --------------------------------------------------------------------------------------------- */
 262 /**
 263  * Panel creation with specified size.
 264  *
 265  * @param panel_name name of panel for setup retrieving
 266  * @param r panel area
 267  *
 268  * @return new instance of WPanel
 269  */
 270 
 271 static inline WPanel *
 272 panel_sized_new (const char *panel_name, const WRect *r)
     /* [previous][next][first][last][top][bottom][index][help]  */
 273 {
 274     return panel_sized_with_dir_new (panel_name, r, NULL);
 275 }
 276 
 277 /* --------------------------------------------------------------------------------------------- */
 278 
 279 #endif

/* [previous][next][first][last][top][bottom][index][help]  */