diff options
Diffstat (limited to 'src/dlg-extract.c')
-rw-r--r-- | src/dlg-extract.c | 215 |
1 files changed, 52 insertions, 163 deletions
diff --git a/src/dlg-extract.c b/src/dlg-extract.c index ca40182..e23e585 100644 --- a/src/dlg-extract.c +++ b/src/dlg-extract.c @@ -32,6 +32,8 @@ #include "typedefs.h" #include "dlg-extract.h" +#define GET_WIDGET(x) (_gtk_builder_get_widget (data->builder, (x))) + typedef struct { FrWindow *window; GSettings *settings; @@ -40,14 +42,7 @@ typedef struct { GtkWidget *dialog; - GtkWidget *e_main_vbox; - GtkWidget *e_all_radiobutton; - GtkWidget *e_selected_radiobutton; - GtkWidget *e_files_radiobutton; - GtkWidget *e_files_entry; - GtkWidget *e_recreate_dir_checkbutton; - GtkWidget *e_overwrite_checkbutton; - GtkWidget *e_not_newer_checkbutton; + GtkBuilder *builder; gboolean extract_clicked; } DialogData; @@ -62,6 +57,7 @@ destroy_cb (GtkWidget *widget, fr_window_pop_message (data->window); fr_window_stop_batch (data->window); } + g_object_unref (data->builder); path_list_free (data->selected_files); g_free (data->base_dir_for_selection); g_object_unref (data->settings); @@ -188,17 +184,17 @@ extract_cb (GtkWidget *w, fr_window_set_extract_default_dir (window, extract_to_dir, TRUE); - overwrite = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->e_overwrite_checkbutton)); - skip_newer = ! gtk_toggle_button_get_inconsistent (GTK_TOGGLE_BUTTON (data->e_not_newer_checkbutton)) && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->e_not_newer_checkbutton)); - junk_paths = ! gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->e_recreate_dir_checkbutton)); + overwrite = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("overwrite_checkbutton"))); + skip_newer = ! gtk_toggle_button_get_inconsistent (GTK_TOGGLE_BUTTON (GET_WIDGET ("not_newer_checkbutton"))) && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("not_newer_checkbutton"))); + junk_paths = ! gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("recreate_dir_checkbutton"))); g_settings_set_boolean (data->settings, PREF_EXTRACT_OVERWRITE, overwrite); - if (! gtk_toggle_button_get_inconsistent (GTK_TOGGLE_BUTTON (data->e_not_newer_checkbutton))) - g_settings_set_boolean (data->settings, PREF_EXTRACT_SKIP_NEWER, skip_newer); + if (! gtk_toggle_button_get_inconsistent (GTK_TOGGLE_BUTTON (GET_WIDGET ("not_newer_checkbutton")))) + g_settings_set_boolean (data->settings, PREF_EXTRACT_SKIP_NEWER, skip_newer); g_settings_set_boolean (data->settings, PREF_EXTRACT_RECREATE_FOLDERS, ! junk_paths); - selected_files = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->e_selected_radiobutton)); - pattern_files = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->e_files_radiobutton)); + selected_files = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("selected_files_radiobutton"))); + pattern_files = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("file_pattern_radiobutton"))); /* create the file list. */ @@ -211,7 +207,7 @@ extract_cb (GtkWidget *w, else if (pattern_files) { const char *pattern; - pattern = gtk_entry_get_text (GTK_ENTRY (data->e_files_entry)); + pattern = gtk_entry_get_text (GTK_ENTRY (GET_WIDGET ("file_pattern_entry"))); file_list = fr_window_get_file_list_pattern (window, pattern); if (file_list == NULL) { gtk_widget_destroy (data->dialog); @@ -276,8 +272,8 @@ static void files_entry_changed_cb (GtkWidget *widget, DialogData *data) { - if (! gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->e_files_radiobutton))) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->e_files_radiobutton), TRUE); + if (! gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("file_pattern_radiobutton")))) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("file_pattern_radiobutton")), TRUE); } @@ -286,121 +282,8 @@ overwrite_toggled_cb (GtkToggleButton *button, DialogData *data) { gboolean active = gtk_toggle_button_get_active (button); - gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (data->e_not_newer_checkbutton), !active); - gtk_widget_set_sensitive (data->e_not_newer_checkbutton, active); -} - - -static void -set_bold_label (GtkWidget *label, - const char *label_txt) -{ - char *bold_label; - - bold_label = g_strconcat ("<b>", label_txt, "</b>", NULL); - gtk_label_set_markup (GTK_LABEL (label), bold_label); - g_free (bold_label); -} - - -static GtkWidget * -create_extra_widget (DialogData *data) -{ - GtkWidget *vbox1; - GtkWidget *hbox28; - GtkWidget *vbox19; - GtkWidget *e_files_label; - GtkWidget *hbox29; - GtkWidget *label47; - GtkWidget *grid1; - GSList *e_files_radiobutton_group = NULL; - GtkWidget *vbox20; - GtkWidget *e_actions_label; - GtkWidget *hbox30; - GtkWidget *label48; - GtkWidget *vbox15; - - vbox1 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_container_set_border_width (GTK_CONTAINER (vbox1), 0); - - hbox28 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); - gtk_box_pack_start (GTK_BOX (vbox1), hbox28, TRUE, TRUE, 0); - - vbox19 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_box_pack_start (GTK_BOX (hbox28), vbox19, TRUE, TRUE, 0); - - e_files_label = gtk_label_new (""); - set_bold_label (e_files_label, _("Extract")); - gtk_box_pack_start (GTK_BOX (vbox19), e_files_label, FALSE, FALSE, 0); - gtk_label_set_justify (GTK_LABEL (e_files_label), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (e_files_label), 0); - - hbox29 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_box_pack_start (GTK_BOX (vbox19), hbox29, TRUE, TRUE, 0); - - label47 = gtk_label_new (" "); - gtk_box_pack_start (GTK_BOX (hbox29), label47, FALSE, FALSE, 0); - gtk_label_set_justify (GTK_LABEL (label47), GTK_JUSTIFY_LEFT); - - grid1 = gtk_grid_new (); - gtk_box_pack_start (GTK_BOX (hbox29), grid1, TRUE, TRUE, 0); - gtk_grid_set_row_spacing (GTK_GRID (grid1), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid1), 6); - - data->e_files_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("_Files:")); - gtk_grid_attach (GTK_GRID (grid1), data->e_files_radiobutton, 0, 2, 1, 1); - gtk_radio_button_set_group (GTK_RADIO_BUTTON (data->e_files_radiobutton), e_files_radiobutton_group); - e_files_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (data->e_files_radiobutton)); - - data->e_files_entry = gtk_entry_new (); - gtk_grid_attach (GTK_GRID (grid1), data->e_files_entry, 1, 2, 1, 1); - gtk_widget_set_tooltip_text (data->e_files_entry, _("example: *.txt; *.doc")); - gtk_entry_set_activates_default (GTK_ENTRY (data->e_files_entry), TRUE); - - data->e_all_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("_All files")); - gtk_grid_attach (GTK_GRID (grid1), data->e_all_radiobutton, 0, 0, 2, 1); - gtk_radio_button_set_group (GTK_RADIO_BUTTON (data->e_all_radiobutton), e_files_radiobutton_group); - e_files_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (data->e_all_radiobutton)); - - data->e_selected_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("_Selected files")); - gtk_grid_attach (GTK_GRID (grid1), data->e_selected_radiobutton, 0, 1, 2, 1); - gtk_radio_button_set_group (GTK_RADIO_BUTTON (data->e_selected_radiobutton), e_files_radiobutton_group); - e_files_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (data->e_selected_radiobutton)); - - vbox20 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_box_pack_start (GTK_BOX (hbox28), vbox20, TRUE, TRUE, 0); - - e_actions_label = gtk_label_new (""); - set_bold_label (e_actions_label, _("Actions")); - gtk_box_pack_start (GTK_BOX (vbox20), e_actions_label, FALSE, FALSE, 0); - gtk_label_set_use_markup (GTK_LABEL (e_actions_label), TRUE); - gtk_label_set_justify (GTK_LABEL (e_actions_label), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (e_actions_label), 0); - - hbox30 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_box_pack_start (GTK_BOX (vbox20), hbox30, TRUE, TRUE, 0); - - label48 = gtk_label_new (" "); - gtk_box_pack_start (GTK_BOX (hbox30), label48, FALSE, FALSE, 0); - gtk_label_set_justify (GTK_LABEL (label48), GTK_JUSTIFY_LEFT); - - vbox15 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_box_pack_start (GTK_BOX (hbox30), vbox15, TRUE, TRUE, 0); - - data->e_recreate_dir_checkbutton = gtk_check_button_new_with_mnemonic (_("Re-crea_te folders")); - gtk_box_pack_start (GTK_BOX (vbox15), data->e_recreate_dir_checkbutton, FALSE, FALSE, 0); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->e_recreate_dir_checkbutton), TRUE); - - data->e_overwrite_checkbutton = gtk_check_button_new_with_mnemonic (_("Over_write existing files")); - gtk_box_pack_start (GTK_BOX (vbox15), data->e_overwrite_checkbutton, FALSE, FALSE, 0); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->e_overwrite_checkbutton), TRUE); - - data->e_not_newer_checkbutton = gtk_check_button_new_with_mnemonic (_("Do not e_xtract older files")); - gtk_box_pack_start (GTK_BOX (vbox15), data->e_not_newer_checkbutton, FALSE, FALSE, 0); - - gtk_widget_show_all (vbox1); - - return vbox1; + gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (GET_WIDGET ("not_newer_checkbutton")), !active); + gtk_widget_set_sensitive (GET_WIDGET ("not_newer_checkbutton"), active); } @@ -410,7 +293,6 @@ dlg_extract__common (FrWindow *window, char *base_dir_for_selection) { DialogData *data; - GtkWidget *file_sel; data = g_new0 (DialogData, 1); data->settings = g_settings_new (ENGRAMPA_SCHEMA_EXTRACT); @@ -419,43 +301,49 @@ dlg_extract__common (FrWindow *window, data->base_dir_for_selection = base_dir_for_selection; data->extract_clicked = FALSE; - data->dialog = file_sel = - gtk_file_chooser_dialog_new (_("Extract"), - GTK_WINDOW (data->window), - GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, - "gtk-cancel", GTK_RESPONSE_CANCEL, - FR_STOCK_EXTRACT, GTK_RESPONSE_OK, - "gtk-help", GTK_RESPONSE_HELP, - NULL); + data->dialog = gtk_file_chooser_dialog_new (_("Extract"), + GTK_WINDOW (data->window), + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + "gtk-cancel", GTK_RESPONSE_CANCEL, + FR_STOCK_EXTRACT, GTK_RESPONSE_OK, + "gtk-help", GTK_RESPONSE_HELP, + NULL); - gtk_window_set_default_size (GTK_WINDOW (file_sel), 530, 510); + gtk_window_set_default_size (GTK_WINDOW (data->dialog), 530, 510); - gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (file_sel), FALSE); - gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (file_sel), FALSE); - gtk_dialog_set_default_response (GTK_DIALOG (file_sel), GTK_RESPONSE_OK); + gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (data->dialog), FALSE); + gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (data->dialog), FALSE); + gtk_dialog_set_default_response (GTK_DIALOG (data->dialog), GTK_RESPONSE_OK); - gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (file_sel), create_extra_widget (data)); + data->builder = _gtk_builder_new_from_resource ("extract-dialog-options.ui"); + if (data->builder == NULL) { + g_object_unref (data->settings); + gtk_widget_destroy (data->dialog); + g_free (data); + return; + } + gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (data->dialog), GET_WIDGET ("extra_widget")); /* Set widgets data. */ - gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (file_sel), fr_window_get_extract_default_dir (window)); + gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (data->dialog), fr_window_get_extract_default_dir (window)); if (data->selected_files != NULL) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->e_selected_radiobutton), TRUE); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("selected_files_radiobutton")), TRUE); else { - gtk_widget_set_sensitive (data->e_selected_radiobutton, FALSE); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->e_all_radiobutton), TRUE); + gtk_widget_set_sensitive (GET_WIDGET ("selected_files_radiobutton"), FALSE); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("all_files_radiobutton")), TRUE); } - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->e_overwrite_checkbutton), g_settings_get_boolean (data->settings, PREF_EXTRACT_OVERWRITE)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->e_not_newer_checkbutton), g_settings_get_boolean (data->settings, PREF_EXTRACT_SKIP_NEWER)); - if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->e_overwrite_checkbutton))) { - gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (data->e_not_newer_checkbutton), TRUE); - gtk_widget_set_sensitive (data->e_not_newer_checkbutton, FALSE); - } + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("overwrite_checkbutton")), g_settings_get_boolean (data->settings, PREF_EXTRACT_OVERWRITE)); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("not_newer_checkbutton")), g_settings_get_boolean (data->settings, PREF_EXTRACT_SKIP_NEWER)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->e_recreate_dir_checkbutton), g_settings_get_boolean (data->settings, PREF_EXTRACT_RECREATE_FOLDERS)); + if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("overwrite_checkbutton")))) { + gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (GET_WIDGET ("not_newer_checkbutton")), TRUE); + gtk_widget_set_sensitive (GET_WIDGET ("not_newer_checkbutton"), FALSE); + } + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("recreate_dir_checkbutton")), g_settings_get_boolean (data->settings, PREF_EXTRACT_RECREATE_FOLDERS)); /* Set the signals handlers. */ @@ -464,24 +352,25 @@ dlg_extract__common (FrWindow *window, G_CALLBACK (destroy_cb), data); - g_signal_connect (G_OBJECT (file_sel), + g_signal_connect (G_OBJECT (data->dialog), "response", G_CALLBACK (file_sel_response_cb), data); - g_signal_connect (G_OBJECT (data->e_overwrite_checkbutton), + g_signal_connect (G_OBJECT (GET_WIDGET ("overwrite_checkbutton")), "toggled", G_CALLBACK (overwrite_toggled_cb), data); - g_signal_connect (G_OBJECT (data->e_files_entry), + + g_signal_connect (G_OBJECT (GET_WIDGET ("file_pattern_entry")), "changed", G_CALLBACK (files_entry_changed_cb), data); /* Run dialog. */ - gtk_window_set_modal (GTK_WINDOW (file_sel),TRUE); - gtk_widget_show (file_sel); + gtk_window_set_modal (GTK_WINDOW (data->dialog), TRUE); + gtk_widget_show (data->dialog); } |