Move sort_field member out from panel_sort_info_t structure.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
Andrew Borodin 2013-08-15 10:09:43 +04:00
parent d8d1f90082
commit 72ad268a9c
7 changed files with 35 additions and 33 deletions

View File

@ -703,17 +703,17 @@ panel_listing_box (WPanel * panel, char **userp, char **minip, int *use_msformat
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
const panel_field_t * const panel_field_t *
sort_box (panel_sort_info_t * info) sort_box (panel_sort_info_t * info, const panel_field_t * sort_field)
{ {
const char **sort_orders_names; const char **sort_orders_names;
gsize sort_names_num, i; gsize sort_names_num, i;
int sort_idx = 0; int sort_idx = 0;
const panel_field_t *result = info->sort_field; const panel_field_t *result = NULL;
sort_orders_names = panel_get_sortable_fields (&sort_names_num); sort_orders_names = panel_get_sortable_fields (&sort_names_num);
for (i = 0; i < sort_names_num; i++) for (i = 0; i < sort_names_num; i++)
if (strcmp (sort_orders_names[i], _(info->sort_field->title_hotkey)) == 0) if (strcmp (sort_orders_names[i], _(sort_field->title_hotkey)) == 0)
{ {
sort_idx = i; sort_idx = i;
break; break;
@ -744,7 +744,7 @@ sort_box (panel_sort_info_t * info)
result = panel_get_field_by_title_hotkey (sort_orders_names[sort_idx]); result = panel_get_field_by_title_hotkey (sort_orders_names[sort_idx]);
if (result == NULL) if (result == NULL)
result = info->sort_field; result = sort_field;
} }
g_strfreev ((gchar **) sort_orders_names); g_strfreev ((gchar **) sort_orders_names);

View File

@ -21,7 +21,7 @@
void configure_box (void); void configure_box (void);
void panel_options_box (void); void panel_options_box (void);
int panel_listing_box (WPanel * p, char **user, char **mini, int *use_msformat, int num); 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_box (panel_sort_info_t * info, const panel_field_t * sort_field);
void confirm_box (void); void confirm_box (void);
void display_bits_box (void); void display_bits_box (void);
void configure_vfs (void); void configure_vfs (void);

View File

@ -1648,7 +1648,7 @@ single_dirsize_cmd (void)
recalculate_panel_summary (panel); recalculate_panel_summary (panel);
if (current_panel->sort_info.sort_field->sort_routine == (GCompareFunc) sort_size) if (current_panel->sort_field->sort_routine == (GCompareFunc) sort_size)
panel_re_sort (panel); panel_re_sort (panel);
panel->dirty = 1; panel->dirty = 1;
@ -1691,7 +1691,7 @@ dirsizes_cmd (void)
recalculate_panel_summary (panel); recalculate_panel_summary (panel);
if (current_panel->sort_info.sort_field->sort_routine == (GCompareFunc) sort_size) if (current_panel->sort_field->sort_routine == (GCompareFunc) sort_size)
panel_re_sort (panel); panel_re_sort (panel);
panel->dirty = 1; panel->dirty = 1;

View File

@ -403,7 +403,7 @@ sort_cmd (void)
return; return;
p = MENU_PANEL; p = MENU_PANEL;
sort_order = sort_box (&p->sort_info); sort_order = sort_box (&p->sort_info, p->sort_field);
panel_set_sort_order (p, sort_order); panel_set_sort_order (p, sort_order);
} }

View File

@ -1505,13 +1505,13 @@ panel_format_modified (WPanel * panel)
static void static void
panel_paint_sort_info (WPanel * panel) panel_paint_sort_info (WPanel * panel)
{ {
if (*panel->sort_info.sort_field->hotkey != '\0') if (*panel->sort_field->hotkey != '\0')
{ {
const char *sort_sign = const char *sort_sign =
panel->sort_info.reverse ? panel_sort_down_sign : panel_sort_up_sign; panel->sort_info.reverse ? panel_sort_down_sign : panel_sort_up_sign;
char *str; char *str;
str = g_strdup_printf ("%s%s", sort_sign, Q_ (panel->sort_info.sort_field->hotkey)); str = g_strdup_printf ("%s%s", sort_sign, Q_ (panel->sort_field->hotkey));
widget_move (panel, 1, 1); widget_move (panel, 1, 1);
tty_print_string (str); tty_print_string (str);
g_free (str); g_free (str);
@ -1580,7 +1580,7 @@ paint_frame (WPanel * panel)
g_string_set_size (format_txt, 0); g_string_set_size (format_txt, 0);
if (panel->list_type == list_long if (panel->list_type == list_long
&& strcmp (format->id, panel->sort_info.sort_field->id) == 0) && strcmp (format->id, panel->sort_field->id) == 0)
g_string_append (format_txt, g_string_append (format_txt,
panel->sort_info.reverse panel->sort_info.reverse
? panel_sort_down_sign : panel_sort_up_sign); ? panel_sort_down_sign : panel_sort_up_sign);
@ -2817,7 +2817,7 @@ panel_toggle_sort_order_prev (WPanel * panel)
const panel_field_t *pfield = NULL; const panel_field_t *pfield = NULL;
title = panel_get_title_without_hotkey (panel->sort_info.sort_field->title_hotkey); title = panel_get_title_without_hotkey (panel->sort_field->title_hotkey);
lc_index = panel_get_format_field_index_by_name (panel, title); lc_index = panel_get_format_field_index_by_name (panel, title);
g_free (title); g_free (title);
@ -2837,7 +2837,7 @@ panel_toggle_sort_order_prev (WPanel * panel)
if (pfield != NULL) if (pfield != NULL)
{ {
panel->sort_info.sort_field = pfield; panel->sort_field = pfield;
panel_set_sort_order (panel, pfield); panel_set_sort_order (panel, pfield);
} }
} }
@ -2853,7 +2853,7 @@ panel_toggle_sort_order_next (WPanel * panel)
gchar *title; gchar *title;
format_field_count = panel_get_format_field_count (panel); format_field_count = panel_get_format_field_count (panel);
title = panel_get_title_without_hotkey (panel->sort_info.sort_field->title_hotkey); title = panel_get_title_without_hotkey (panel->sort_field->title_hotkey);
lc_index = panel_get_format_field_index_by_name (panel, title); lc_index = panel_get_format_field_index_by_name (panel, title);
g_free (title); g_free (title);
@ -2875,7 +2875,7 @@ panel_toggle_sort_order_next (WPanel * panel)
if (pfield != NULL) if (pfield != NULL)
{ {
panel->sort_info.sort_field = pfield; panel->sort_field = pfield;
panel_set_sort_order (panel, pfield); panel_set_sort_order (panel, pfield);
} }
} }
@ -2887,10 +2887,10 @@ panel_select_sort_order (WPanel * panel)
{ {
const panel_field_t *sort_order; const panel_field_t *sort_order;
sort_order = sort_box (&panel->sort_info); sort_order = sort_box (&panel->sort_info, panel->sort_field);
if (sort_order != NULL) if (sort_order != NULL)
{ {
panel->sort_info.sort_field = sort_order; panel->sort_field = sort_order;
panel_set_sort_order (panel, sort_order); panel_set_sort_order (panel, sort_order);
} }
} }
@ -2946,19 +2946,19 @@ panel_content_scroll_right (WPanel * panel)
static void static void
panel_set_sort_type_by_id (WPanel * panel, const char *name) panel_set_sort_type_by_id (WPanel * panel, const char *name)
{ {
if (strcmp (panel->sort_info.sort_field->id, name) != 0) if (strcmp (panel->sort_field->id, name) != 0)
{ {
const panel_field_t *sort_order; const panel_field_t *sort_order;
sort_order = panel_get_field_by_id (name); sort_order = panel_get_field_by_id (name);
if (sort_order == NULL) if (sort_order == NULL)
return; return;
panel->sort_info.sort_field = sort_order; panel->sort_field = sort_order;
} }
else else
panel->sort_info.reverse = !panel->sort_info.reverse; panel->sort_info.reverse = !panel->sort_info.reverse;
panel_set_sort_order (panel, panel->sort_info.sort_field); panel_set_sort_order (panel, panel->sort_field);
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
@ -3064,7 +3064,7 @@ _do_panel_cd (WPanel * panel, const vfs_path_t * new_dir_vpath, enum cd_enum cd_
panel_clean_dir (panel); panel_clean_dir (panel);
panel->count = panel->count =
do_load_dir (panel->cwd_vpath, &panel->dir, panel->sort_info.sort_field->sort_routine, 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.reverse, panel->sort_info.case_sensitive,
panel->sort_info.exec_first, panel->filter); panel->sort_info.exec_first, panel->filter);
try_to_select (panel, get_parent_dir_name (panel->cwd_vpath, olddir_vpath)); try_to_select (panel, get_parent_dir_name (panel->cwd_vpath, olddir_vpath));
@ -3336,7 +3336,7 @@ panel_execute_cmd (WPanel * panel, unsigned long command)
break; break;
case CK_SortReverse: case CK_SortReverse:
panel->sort_info.reverse = !panel->sort_info.reverse; panel->sort_info.reverse = !panel->sort_info.reverse;
panel_set_sort_order (panel, panel->sort_info.sort_field); panel_set_sort_order (panel, panel->sort_field);
break; break;
case CK_SortByName: case CK_SortByName:
panel_set_sort_type_by_id (panel, "name"); panel_set_sort_type_by_id (panel, "name");
@ -3562,7 +3562,7 @@ mouse_sort_col (WPanel * panel, int x)
if (col_sort_format == NULL) if (col_sort_format == NULL)
return; return;
if (panel->sort_info.sort_field == col_sort_format) if (panel->sort_field == col_sort_format)
{ {
/* reverse the sort if clicked column is already the sorted column */ /* reverse the sort if clicked column is already the sorted column */
panel->sort_info.reverse = !panel->sort_info.reverse; panel->sort_info.reverse = !panel->sort_info.reverse;
@ -4143,7 +4143,7 @@ panel_new_with_dir (const char *panel_name, const vfs_path_t * vpath)
/* Load the default format */ /* Load the default format */
panel->count = panel->count =
do_load_dir (panel->cwd_vpath, &panel->dir, panel->sort_info.sort_field->sort_routine, 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.reverse, panel->sort_info.case_sensitive,
panel->sort_info.exec_first, panel->filter); panel->sort_info.exec_first, panel->filter);
@ -4190,7 +4190,7 @@ panel_reload (WPanel * panel)
show_dir (panel); show_dir (panel);
panel->count = panel->count =
do_reload_dir (panel->cwd_vpath, &panel->dir, panel->sort_info.sort_field->sort_routine, 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->count, panel->sort_info.reverse, panel->sort_info.case_sensitive,
panel->sort_info.exec_first, panel->filter); panel->sort_info.exec_first, panel->filter);
@ -4447,7 +4447,7 @@ panel_re_sort (WPanel * panel)
filename = g_strdup (selection (panel)->fname); filename = g_strdup (selection (panel)->fname);
unselect_item (panel); unselect_item (panel);
do_sort (&panel->dir, panel->sort_info.sort_field->sort_routine, panel->count - 1, do_sort (&panel->dir, panel->sort_field->sort_routine, panel->count - 1,
panel->sort_info.reverse, panel->sort_info.case_sensitive, panel->sort_info.reverse, panel->sort_info.case_sensitive,
panel->sort_info.exec_first); panel->sort_info.exec_first);
panel->selected = -1; panel->selected = -1;
@ -4473,7 +4473,7 @@ panel_set_sort_order (WPanel * panel, const panel_field_t * sort_order)
if (sort_order == NULL) if (sort_order == NULL)
return; return;
panel->sort_info.sort_field = sort_order; panel->sort_field = sort_order;
/* The directory is already sorted, we have to load the unsorted stuff */ /* The directory is already sorted, we have to load the unsorted stuff */
if (sort_order->sort_routine == (GCompareFunc) unsorted) if (sort_order->sort_routine == (GCompareFunc) unsorted)

View File

@ -85,7 +85,6 @@ typedef struct panel_sort_info_struct
gboolean reverse; /* Show listing in reverse? */ gboolean reverse; /* Show listing in reverse? */
gboolean case_sensitive; /* Listing is case sensitive? */ gboolean case_sensitive; /* Listing is case sensitive? */
gboolean exec_first; /* Show executable top in list? */ gboolean exec_first; /* Show executable top in list? */
const panel_field_t *sort_field;
} panel_sort_info_t; } panel_sort_info_t;
typedef struct WPanel typedef struct WPanel
@ -110,7 +109,10 @@ typedef struct WPanel
gboolean is_panelized; /* Flag: special filelisting, can't reload */ gboolean is_panelized; /* Flag: special filelisting, can't reload */
panel_display_t frame_size; /* half or full frame */ panel_display_t frame_size; /* half or full frame */
char *filter; /* File name filter */ char *filter; /* File name filter */
panel_sort_info_t sort_info; /* Sort descriptor */
/* sort */
panel_sort_info_t sort_info;
const panel_field_t *sort_field;
int dirty; /* Should we redisplay the panel? */ int dirty; /* Should we redisplay the panel? */

View File

@ -1385,9 +1385,9 @@ panel_load_setup (WPanel * panel, const char *section)
/* Load sort order */ /* Load sort order */
buffer = mc_config_get_string (mc_panels_config, section, "sort_order", "name"); buffer = mc_config_get_string (mc_panels_config, section, "sort_order", "name");
panel->sort_info.sort_field = panel_get_field_by_id (buffer); panel->sort_field = panel_get_field_by_id (buffer);
if (panel->sort_info.sort_field == NULL) if (panel->sort_field == NULL)
panel->sort_info.sort_field = panel_get_field_by_id ("name"); panel->sort_field = panel_get_field_by_id ("name");
g_free (buffer); g_free (buffer);
@ -1431,7 +1431,7 @@ panel_save_setup (struct WPanel *panel, const char *section)
panel->sort_info.case_sensitive); panel->sort_info.case_sensitive);
mc_config_set_int (mc_panels_config, section, "exec_first", panel->sort_info.exec_first); mc_config_set_int (mc_panels_config, section, "exec_first", panel->sort_info.exec_first);
mc_config_set_string (mc_panels_config, section, "sort_order", panel->sort_info.sort_field->id); mc_config_set_string (mc_panels_config, section, "sort_order", panel->sort_field->id);
for (i = 0; list_types[i].key != NULL; i++) for (i = 0; list_types[i].key != NULL; i++)
if (list_types[i].list_type == panel->list_type) if (list_types[i].list_type == panel->list_type)