static void mcview_continue_search_cmd (mcview_t * view) { if (view->last_search_string != NULL) mcview_search (view, FALSE); else { /* find last search string in history */ GList *history; history = history_get (MC_HISTORY_SHARED_SEARCH); if (history != NULL && history->data != NULL) { view->last_search_string = (gchar *) g_strdup (history->data); history = g_list_first (history); g_list_free_full (history, g_free); #ifdef HAVE_CHARSET view->search = mc_search_new (view->last_search_string, -1, cp_source); #else view->search = mc_search_new (view->last_search_string, -1, NULL); #endif view->search_nroff_seq = mcview_nroff_seq_new (view); if (view->search == NULL) { /* if not... then ask for an expression */ MC_PTR_FREE (view->last_search_string); mcview_search (view, TRUE); } else { view->search->search_type = mcview_search_options.type; #ifdef HAVE_CHARSET view->search->is_all_charsets = mcview_search_options.all_codepages; #endif view->search->is_case_sensitive = mcview_search_options.case_sens; view->search->whole_words = mcview_search_options.whole_words; view->search->search_fn = mcview_search_cmd_callback; view->search->update_fn = mcview_search_update_cmd_callback; mcview_search (view, FALSE); } } else { /* if not... then ask for an expression */ MC_PTR_FREE (view->last_search_string); mcview_search (view, TRUE); } } }
gboolean mcview_dialog_search (WView * view) { char *exp = NULL; int qd_result; size_t num_of_types = 0; gchar **list_of_types; list_of_types = mc_search_get_types_strings_array (&num_of_types); { quick_widget_t quick_widgets[] = { /* *INDENT-OFF* */ QUICK_LABELED_INPUT (N_("Enter search string:"), input_label_above, INPUT_LAST_TEXT, MC_HISTORY_SHARED_SEARCH, &exp, NULL, FALSE, FALSE, INPUT_COMPLETE_NONE), QUICK_SEPARATOR (TRUE), QUICK_START_COLUMNS, QUICK_RADIO (num_of_types, (const char **) list_of_types, (int *) &mcview_search_options.type, NULL), QUICK_NEXT_COLUMN, QUICK_CHECKBOX (N_("Cas&e sensitive"), &mcview_search_options.case_sens, NULL), QUICK_CHECKBOX (N_("&Backwards"), &mcview_search_options.backwards, NULL), QUICK_CHECKBOX (N_("&Whole words"), &mcview_search_options.whole_words, NULL), #ifdef HAVE_CHARSET QUICK_CHECKBOX (N_("&All charsets"), &mcview_search_options.all_codepages, NULL), #endif QUICK_STOP_COLUMNS, QUICK_BUTTONS_OK_CANCEL, QUICK_END /* *INDENT-ON* */ }; quick_dialog_t qdlg = { -1, -1, 58, N_("Search"), "[Input Line Keys]", quick_widgets, NULL, NULL }; qd_result = quick_dialog (&qdlg); } g_strfreev (list_of_types); if ((qd_result == B_CANCEL) || (exp == NULL) || (exp[0] == '\0')) { g_free (exp); return FALSE; } #ifdef HAVE_CHARSET { GString *tmp; tmp = str_convert_to_input (exp); g_free (exp); exp = g_string_free (tmp, FALSE); } #endif g_free (view->last_search_string); view->last_search_string = exp; mcview_nroff_seq_free (&view->search_nroff_seq); mc_search_free (view->search); #ifdef HAVE_CHARSET view->search = mc_search_new (view->last_search_string, cp_source); #else view->search = mc_search_new (view->last_search_string, NULL); #endif view->search_nroff_seq = mcview_nroff_seq_new (view); if (view->search != NULL) { view->search->search_type = mcview_search_options.type; #ifdef HAVE_CHARSET view->search->is_all_charsets = mcview_search_options.all_codepages; #endif view->search->is_case_sensitive = mcview_search_options.case_sens; view->search->whole_words = mcview_search_options.whole_words; view->search->search_fn = mcview_search_cmd_callback; view->search->update_fn = mcview_search_update_cmd_callback; } return (view->search != NULL); }
gboolean mcview_dialog_search (mcview_t * view) { int SEARCH_DLG_MIN_HEIGHT = 12; int SEARCH_DLG_HEIGHT_SUPPLY = 3; int SEARCH_DLG_WIDTH = 58; char *exp = NULL; int qd_result; size_t num_of_types; gchar **list_of_types = mc_search_get_types_strings_array (&num_of_types); int SEARCH_DLG_HEIGHT = SEARCH_DLG_MIN_HEIGHT + num_of_types - SEARCH_DLG_HEIGHT_SUPPLY; QuickWidget quick_widgets[] = { QUICK_BUTTON (6, 10, SEARCH_DLG_HEIGHT - 3, SEARCH_DLG_HEIGHT, N_("&Cancel"), B_CANCEL, NULL), QUICK_BUTTON (2, 10, SEARCH_DLG_HEIGHT - 3, SEARCH_DLG_HEIGHT, N_("&OK"), B_ENTER, NULL), #ifdef HAVE_CHARSET QUICK_CHECKBOX (SEARCH_DLG_WIDTH / 2 + 3, SEARCH_DLG_WIDTH, 8, SEARCH_DLG_HEIGHT, N_("&All charsets"), &mcview_search_options.all_codepages), #endif QUICK_CHECKBOX (SEARCH_DLG_WIDTH / 2 + 3, SEARCH_DLG_WIDTH, 7, SEARCH_DLG_HEIGHT, N_("&Whole words"), &mcview_search_options.whole_words), QUICK_CHECKBOX (SEARCH_DLG_WIDTH / 2 + 3, SEARCH_DLG_WIDTH, 6, SEARCH_DLG_HEIGHT, N_("&Backwards"), &mcview_search_options.backwards), QUICK_CHECKBOX (SEARCH_DLG_WIDTH / 2 + 3, SEARCH_DLG_WIDTH, 5, SEARCH_DLG_HEIGHT, N_("Cas&e sensitive"), &mcview_search_options.case_sens), QUICK_RADIO (3, SEARCH_DLG_WIDTH, 5, SEARCH_DLG_HEIGHT, num_of_types, (const char **) list_of_types, (int *) &mcview_search_options.type), QUICK_INPUT (3, SEARCH_DLG_WIDTH, 3, SEARCH_DLG_HEIGHT, INPUT_LAST_TEXT, SEARCH_DLG_WIDTH - 6, 0, MC_HISTORY_SHARED_SEARCH, &exp), QUICK_LABEL (3, SEARCH_DLG_WIDTH, 2, SEARCH_DLG_HEIGHT, N_("Enter search string:")), QUICK_END }; QuickDialog Quick_input = { SEARCH_DLG_WIDTH, SEARCH_DLG_HEIGHT, -1, -1, N_("Search"), "[Input Line Keys]", quick_widgets, NULL, NULL, FALSE }; qd_result = quick_dialog (&Quick_input); g_strfreev (list_of_types); if ((qd_result == B_CANCEL) || (exp == NULL) || (exp[0] == '\0')) { g_free (exp); return FALSE; } #ifdef HAVE_CHARSET { GString *tmp = str_convert_to_input (exp); if (tmp) { g_free (exp); exp = g_string_free (tmp, FALSE); } } #endif g_free (view->last_search_string); view->last_search_string = exp; mcview_nroff_seq_free (&view->search_nroff_seq); mc_search_free (view->search); view->search = mc_search_new (view->last_search_string, -1); view->search_nroff_seq = mcview_nroff_seq_new (view); if (view->search != NULL) { view->search->search_type = mcview_search_options.type; view->search->is_all_charsets = mcview_search_options.all_codepages; view->search->is_case_sensitive = mcview_search_options.case_sens; view->search->whole_words = mcview_search_options.whole_words; view->search->search_fn = mcview_search_cmd_callback; view->search->update_fn = mcview_search_update_cmd_callback; } return (view->search != NULL); }