const panel_field_t * sort_box (dir_sort_options_t * op, const panel_field_t * sort_field) { const char **sort_orders_names; gsize i; gsize sort_names_num = 0; int sort_idx = 0; const panel_field_t *result = NULL; sort_orders_names = panel_get_sortable_fields (&sort_names_num); for (i = 0; i < sort_names_num; i++) if (strcmp (sort_orders_names[i], _(sort_field->title_hotkey)) == 0) { sort_idx = i; break; } { quick_widget_t quick_widgets[] = { /* *INDENT-OFF* */ QUICK_START_COLUMNS, QUICK_RADIO (sort_names_num, sort_orders_names, &sort_idx, NULL), QUICK_NEXT_COLUMN, 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 /* *INDENT-ON* */ }; quick_dialog_t qdlg = { -1, -1, 40, N_("Sort order"), "[Sort Order...]", quick_widgets, NULL, NULL }; if (quick_dialog (&qdlg) != B_CANCEL) result = panel_get_field_by_title_hotkey (sort_orders_names[sort_idx]); if (result == NULL) result = sort_field; } g_strfreev ((gchar **) sort_orders_names); return result; }
const panel_field_t * sort_box (panel_sort_info_t *info) { int dlg_width = 40, dlg_height = 7; const char **sort_orders_names; gsize sort_names_num; int sort_idx = 0; const panel_field_t *result = info->sort_field; sort_orders_names = panel_get_sortable_fields (&sort_names_num); dlg_height += sort_names_num; { int max_radio = 0, max_check = 0; int ok_len, cancel_len; gsize i; QuickWidget quick_widgets[] = { /* 0 */ QUICK_BUTTON (0, dlg_width, dlg_height - 3, dlg_height, N_("&Cancel"), B_CANCEL, NULL), /* 1 */ QUICK_BUTTON (0, dlg_width, dlg_height - 3, dlg_height, N_("&OK"), B_ENTER, NULL), /* 2 */ QUICK_CHECKBOX (0, dlg_width, 5, dlg_height, N_("&Reverse"), &info->reverse), /* 3 */ QUICK_CHECKBOX (0, dlg_width, 4, dlg_height, N_("Case sensi&tive"), &info->case_sensitive), /* 4 */ QUICK_CHECKBOX (0, dlg_width, 3, dlg_height, N_("Executable &first"), &info->exec_first), /* 5 */ QUICK_RADIO (4, dlg_width, 3, dlg_height, 0, NULL, &sort_idx), QUICK_END }; QuickDialog quick_dlg = { dlg_width, dlg_height, -1, -1, N_("Sort order"), "[Sort Order...]", quick_widgets, NULL, TRUE }; quick_widgets[5].u.radio.items = sort_orders_names; quick_widgets[5].u.radio.count = sort_names_num; for (i = 0; i < sort_names_num; i++) if (strcmp (sort_orders_names[i], _(info->sort_field->title_hotkey)) == 0) { sort_idx = i; break; } #ifdef ENABLE_NLS quick_dlg.title = _(quick_dlg.title); /* buttons */ for (i = 0; i < 2; i++) quick_widgets[i].u.button.text = _(quick_widgets[i].u.button.text); /* checkboxes */ for (i = 2; i < 5; i++) quick_widgets[i].u.checkbox.text = _(quick_widgets[i].u.checkbox.text); #endif /* ENABLE_NlS */ /* buttons */ cancel_len = str_term_width1 (quick_widgets[0].u.button.text) + 4; ok_len = str_term_width1 (quick_widgets[1].u.button.text) + 6; /* checkboxes */ for (i = 2; i < 5; i++) max_check = max (max_check, str_term_width1 (quick_widgets[i].u.checkbox.text) + 4); /* radiobuttons */ for (i = 0; i < sort_names_num; i++) max_radio = max (max_radio, str_term_width1 (sort_orders_names[i]) + 4); /* dialog width */ dlg_width = max (dlg_width, str_term_width1 (quick_dlg.title) + 8); dlg_width = max (dlg_width, ok_len + cancel_len + 8); dlg_width = max (dlg_width, 2 * max (max_radio, max_check) + 8); /* fix widget and dialog parameters */ /* dialog */ quick_dlg.xlen = dlg_width; /* widgets */ for (i = 0; (size_t) i < sizeof (quick_widgets) / sizeof (quick_widgets[0]) - 1; i++) quick_widgets[i].x_divisions = dlg_width; /* buttons */ quick_widgets[0].relative_x = dlg_width * 2 / 3 - cancel_len / 2; quick_widgets[1].relative_x = dlg_width / 3 - ok_len / 2; /* checkboxes */ for (i = 2; i < 5; i++) quick_widgets[i].relative_x = dlg_width / 2 + 2; if (quick_dialog (&quick_dlg) != B_CANCEL) result = panel_get_field_by_title_hotkey (sort_orders_names[sort_idx]); if (result == NULL) result = info->sort_field; } g_strfreev ((gchar **) sort_orders_names); return result; }