mirror of https://github.com/MidnightCommander/mc
Rename panel_sort_info_t to dir_sort_options_t
...and use it in routines of load and sort directory. Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
parent
72ad268a9c
commit
e6bb69a0d9
|
@ -703,7 +703,7 @@ panel_listing_box (WPanel * panel, char **userp, char **minip, int *use_msformat
|
|||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
const panel_field_t *
|
||||
sort_box (panel_sort_info_t * info, const panel_field_t * sort_field)
|
||||
sort_box (dir_sort_options_t * op, const panel_field_t * sort_field)
|
||||
{
|
||||
const char **sort_orders_names;
|
||||
gsize sort_names_num, i;
|
||||
|
@ -725,9 +725,9 @@ sort_box (panel_sort_info_t * info, const panel_field_t * sort_field)
|
|||
QUICK_START_COLUMNS,
|
||||
QUICK_RADIO (sort_names_num, sort_orders_names, &sort_idx, NULL),
|
||||
QUICK_NEXT_COLUMN,
|
||||
QUICK_CHECKBOX (N_("Executable &first"), &info->exec_first, NULL),
|
||||
QUICK_CHECKBOX (N_("Cas&e sensitive"), &info->case_sensitive, NULL),
|
||||
QUICK_CHECKBOX (N_("&Reverse"), &info->reverse, NULL),
|
||||
QUICK_CHECKBOX (N_("Executable &first"), &op->exec_first, NULL),
|
||||
QUICK_CHECKBOX (N_("Cas&e sensitive"), &op->case_sensitive, NULL),
|
||||
QUICK_CHECKBOX (N_("&Reverse"), &op->reverse, NULL),
|
||||
QUICK_STOP_COLUMNS,
|
||||
QUICK_BUTTONS_OK_CANCEL,
|
||||
QUICK_END
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
void configure_box (void);
|
||||
void panel_options_box (void);
|
||||
int panel_listing_box (WPanel * p, char **user, char **mini, int *use_msformat, int num);
|
||||
const panel_field_t *sort_box (panel_sort_info_t * info, const panel_field_t * sort_field);
|
||||
const panel_field_t *sort_box (dir_sort_options_t * op, const panel_field_t * sort_field);
|
||||
void confirm_box (void);
|
||||
void display_bits_box (void);
|
||||
void configure_vfs (void);
|
||||
|
|
|
@ -438,8 +438,7 @@ sort_size (file_entry * a, file_entry * b)
|
|||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
void
|
||||
do_sort (dir_list * list, GCompareFunc sort, int top, gboolean reverse_f, gboolean case_sensitive_f,
|
||||
gboolean exec_first_f)
|
||||
do_sort (dir_list * list, GCompareFunc sort, int top, const dir_sort_options_t * sort_op)
|
||||
{
|
||||
int dot_dot_found = 0;
|
||||
|
||||
|
@ -451,9 +450,9 @@ do_sort (dir_list * list, GCompareFunc sort, int top, gboolean reverse_f, gboole
|
|||
if (DIR_IS_DOTDOT (list->list[0].fname))
|
||||
dot_dot_found = 1;
|
||||
|
||||
reverse = reverse_f ? -1 : 1;
|
||||
case_sensitive = case_sensitive_f ? 1 : 0;
|
||||
exec_first = exec_first_f;
|
||||
reverse = sort_op->reverse ? -1 : 1;
|
||||
case_sensitive = sort_op->case_sensitive ? 1 : 0;
|
||||
exec_first = sort_op->exec_first;
|
||||
qsort (&(list->list)[dot_dot_found], top + 1 - dot_dot_found, sizeof (file_entry), sort);
|
||||
|
||||
clean_sort_keys (list, dot_dot_found, top + 1 - dot_dot_found);
|
||||
|
@ -546,8 +545,8 @@ handle_path (dir_list * list, const char *path,
|
|||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
int
|
||||
do_load_dir (const vfs_path_t * vpath, dir_list * list, GCompareFunc sort, gboolean lc_reverse,
|
||||
gboolean lc_case_sensitive, gboolean exec_ff, const char *fltr)
|
||||
do_load_dir (const vfs_path_t * vpath, dir_list * list, GCompareFunc sort,
|
||||
const dir_sort_options_t * sort_op, const char *fltr)
|
||||
{
|
||||
DIR *dirp;
|
||||
struct dirent *dp;
|
||||
|
@ -605,7 +604,7 @@ do_load_dir (const vfs_path_t * vpath, dir_list * list, GCompareFunc sort, gbool
|
|||
}
|
||||
|
||||
if (next_free != 0)
|
||||
do_sort (list, sort, next_free - 1, lc_reverse, lc_case_sensitive, exec_ff);
|
||||
do_sort (list, sort, next_free - 1, sort_op);
|
||||
|
||||
ret:
|
||||
mc_closedir (dirp);
|
||||
|
@ -632,7 +631,7 @@ if_link_is_exe (const vfs_path_t * full_name_vpath, const file_entry * file)
|
|||
|
||||
int
|
||||
do_reload_dir (const vfs_path_t * vpath, dir_list * list, GCompareFunc sort, int count,
|
||||
gboolean lc_reverse, gboolean lc_case_sensitive, gboolean exec_ff, const char *fltr)
|
||||
const dir_sort_options_t * sort_op, const char *fltr)
|
||||
{
|
||||
DIR *dirp;
|
||||
struct dirent *dp;
|
||||
|
@ -746,10 +745,10 @@ do_reload_dir (const vfs_path_t * vpath, dir_list * list, GCompareFunc sort, int
|
|||
mc_closedir (dirp);
|
||||
tree_store_end_check ();
|
||||
g_hash_table_destroy (marked_files);
|
||||
if (next_free)
|
||||
{
|
||||
do_sort (list, sort, next_free - 1, lc_reverse, lc_case_sensitive, exec_ff);
|
||||
}
|
||||
|
||||
if (next_free != 0)
|
||||
do_sort (list, sort, next_free - 1, sort_op);
|
||||
|
||||
clean_dir (&dir_copy, count);
|
||||
rotate_dash (FALSE);
|
||||
|
||||
|
|
|
@ -26,16 +26,25 @@ typedef struct
|
|||
int size;
|
||||
} dir_list;
|
||||
|
||||
/**
|
||||
* A structure to represent sort options for directory content
|
||||
*/
|
||||
typedef struct dir_sort_options_struct
|
||||
{
|
||||
gboolean reverse; /**< sort is reverse */
|
||||
gboolean case_sensitive; /**< sort is case sensitive */
|
||||
gboolean exec_first; /**< executables are at top of list */
|
||||
} dir_sort_options_t;
|
||||
|
||||
/*** global variables defined in .c file *********************************************************/
|
||||
|
||||
/*** declarations of public functions ************************************************************/
|
||||
|
||||
int do_load_dir (const vfs_path_t * vpath, dir_list * list, GCompareFunc sort, gboolean reverse,
|
||||
gboolean case_sensitive, gboolean exec_ff, const char *fltr);
|
||||
void do_sort (dir_list * list, GCompareFunc sort, int top, gboolean reverse,
|
||||
gboolean case_sensitive, gboolean exec_ff);
|
||||
int do_load_dir (const vfs_path_t * vpath, dir_list * list, GCompareFunc sort,
|
||||
const dir_sort_options_t * sort_op, const char *fltr);
|
||||
void do_sort (dir_list * list, GCompareFunc sort, int top, const dir_sort_options_t * sort_op);
|
||||
int do_reload_dir (const vfs_path_t * vpath, dir_list * list, GCompareFunc sort, int count,
|
||||
gboolean reverse, gboolean case_sensitive, gboolean exec_ff, const char *fltr);
|
||||
const dir_sort_options_t * sort_op, const char *fltr);
|
||||
void clean_dir (dir_list * list, int count);
|
||||
gboolean set_zero_dir (dir_list * list);
|
||||
int handle_path (dir_list * list, const char *path, struct stat *buf1,
|
||||
|
|
|
@ -1132,7 +1132,7 @@ swap_panels (void)
|
|||
current_panel = panel1;
|
||||
|
||||
/* if sort options are different -> resort panels */
|
||||
if (memcmp (&panel1->sort_info, &panel2->sort_info, sizeof (panel_sort_info_t)) != 0)
|
||||
if (memcmp (&panel1->sort_info, &panel2->sort_info, sizeof (dir_sort_options_t)) != 0)
|
||||
{
|
||||
panel_re_sort (other_panel);
|
||||
panel_re_sort (current_panel);
|
||||
|
|
|
@ -3065,8 +3065,7 @@ _do_panel_cd (WPanel * panel, const vfs_path_t * new_dir_vpath, enum cd_enum cd_
|
|||
|
||||
panel->count =
|
||||
do_load_dir (panel->cwd_vpath, &panel->dir, panel->sort_field->sort_routine,
|
||||
panel->sort_info.reverse, panel->sort_info.case_sensitive,
|
||||
panel->sort_info.exec_first, panel->filter);
|
||||
&panel->sort_info, panel->filter);
|
||||
try_to_select (panel, get_parent_dir_name (panel->cwd_vpath, olddir_vpath));
|
||||
|
||||
load_hint (0);
|
||||
|
@ -4144,8 +4143,7 @@ panel_new_with_dir (const char *panel_name, const vfs_path_t * vpath)
|
|||
/* Load the default format */
|
||||
panel->count =
|
||||
do_load_dir (panel->cwd_vpath, &panel->dir, panel->sort_field->sort_routine,
|
||||
panel->sort_info.reverse, panel->sort_info.case_sensitive,
|
||||
panel->sort_info.exec_first, panel->filter);
|
||||
&panel->sort_info, panel->filter);
|
||||
|
||||
/* Restore old right path */
|
||||
if (curdir != NULL)
|
||||
|
@ -4191,8 +4189,7 @@ panel_reload (WPanel * panel)
|
|||
|
||||
panel->count =
|
||||
do_reload_dir (panel->cwd_vpath, &panel->dir, panel->sort_field->sort_routine,
|
||||
panel->count, panel->sort_info.reverse, panel->sort_info.case_sensitive,
|
||||
panel->sort_info.exec_first, panel->filter);
|
||||
panel->count, &panel->sort_info, panel->filter);
|
||||
|
||||
panel->dirty = 1;
|
||||
if (panel->selected >= panel->count)
|
||||
|
@ -4447,9 +4444,7 @@ panel_re_sort (WPanel * panel)
|
|||
|
||||
filename = g_strdup (selection (panel)->fname);
|
||||
unselect_item (panel);
|
||||
do_sort (&panel->dir, panel->sort_field->sort_routine, panel->count - 1,
|
||||
panel->sort_info.reverse, panel->sort_info.case_sensitive,
|
||||
panel->sort_info.exec_first);
|
||||
do_sort (&panel->dir, panel->sort_field->sort_routine, panel->count - 1, &panel->sort_info);
|
||||
panel->selected = -1;
|
||||
for (i = panel->count; i; i--)
|
||||
{
|
||||
|
|
|
@ -80,13 +80,6 @@ typedef struct
|
|||
vfs_path_t *root_vpath;
|
||||
} panelized_panel_t;
|
||||
|
||||
typedef struct panel_sort_info_struct
|
||||
{
|
||||
gboolean reverse; /* Show listing in reverse? */
|
||||
gboolean case_sensitive; /* Listing is case sensitive? */
|
||||
gboolean exec_first; /* Show executable top in list? */
|
||||
} panel_sort_info_t;
|
||||
|
||||
typedef struct WPanel
|
||||
{
|
||||
Widget widget;
|
||||
|
@ -111,7 +104,7 @@ typedef struct WPanel
|
|||
char *filter; /* File name filter */
|
||||
|
||||
/* sort */
|
||||
panel_sort_info_t sort_info;
|
||||
dir_sort_options_t sort_info;
|
||||
const panel_field_t *sort_field;
|
||||
|
||||
int dirty; /* Should we redisplay the panel? */
|
||||
|
|
|
@ -299,6 +299,7 @@ mcview_load_next_prev_init (mcview_t * view)
|
|||
const char *fname;
|
||||
size_t fname_len;
|
||||
int i;
|
||||
dir_sort_options_t sort_op = { FALSE, TRUE, FALSE };
|
||||
|
||||
/* load directory where requested file is */
|
||||
view->dir = g_new0 (dir_list, 1);
|
||||
|
@ -306,7 +307,7 @@ mcview_load_next_prev_init (mcview_t * view)
|
|||
view->dir_idx = g_new (int, 1);
|
||||
|
||||
*view->dir_count = do_load_dir (view->workdir_vpath, view->dir, (GCompareFunc) sort_name,
|
||||
FALSE, TRUE, FALSE, NULL);
|
||||
&sort_op, NULL);
|
||||
|
||||
fname = x_basename (vfs_path_as_str (view->filename_vpath));
|
||||
fname_len = strlen (fname);
|
||||
|
|
Loading…
Reference in New Issue