SIGNAL_CALLBACK void on_execute_button_clicked (GtkWidget *button) { GtkTreeIter iter; gboolean valid; Settings * user_settings; GList * rows; /* gui should prevent this from happening */ if (processing) return; if (confirm_overwrite()) { keep_going = TRUE; user_settings = settings_get_from_gui(); settings_on_execute = settings_copy(user_settings); rows = NULL; valid = gtk_tree_model_get_iter_first( GTK_TREE_MODEL(list_store), &iter); if (valid) { hide_sections_for_execute(); } else { message_box(" No files to process (click Browse...) "); } while (valid && keep_going) { GtkTreeRowReference * ref; GtkTreePath * path; path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter); ref = gtk_tree_row_reference_new(GTK_TREE_MODEL(list_store), path); rows = g_list_append(rows, ref); valid = gtk_tree_model_iter_next( GTK_TREE_MODEL(list_store), &iter); } process_items_from_list(rows, TRUE); settings_delete(user_settings); } }
void process_items_from_list(GList * list_of_row_refs, gboolean skip_done) { GList * i; Settings * user_settings; GtkTreeIter iter; int is_first = TRUE; processing = TRUE; keep_going = TRUE; show_execute_button(FALSE); user_settings = settings_get_from_gui(); i = list_of_row_refs; while (i && keep_going) { GtkTreeRowReference * ref; GtkTreePath * path; ref = (GtkTreeRowReference *) i->data; path = gtk_tree_row_reference_get_path(ref); gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path); process_item(&iter, user_settings, skip_done, is_first); while (gtk_events_pending()) gtk_main_iteration(); i = g_list_next(i); is_first = FALSE; } processing = FALSE; settings_delete_dem_and_mask(user_settings); settings_delete(user_settings); show_execute_button(TRUE); g_list_foreach(list_of_row_refs, (GFunc)gtk_tree_row_reference_free, NULL); g_list_free(list_of_row_refs); }
current_naming_scheme->scheme); } gtk_widget_show(dialog_cons); } static void apply_naming_scheme(const NamingScheme * new, const NamingScheme * old) { gboolean valid; GtkTreeIter iter; Settings * user_settings; assert(list_store); user_settings = settings_get_from_gui(); valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter); while (valid) { gchar * current_output_name; gchar * input_file_name; gchar * old_output_name; gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, COL_INPUT_FILE, &input_file_name, COL_OUTPUT_FILE, ¤t_output_name, -1); old_output_name = determine_default_output_file_name_schemed(input_file_name, old);
void do_rename(GtkTreeModel *model, GtkTreeIter *iter, const gchar *new_name) { const gchar * ext; gchar *user_ext, *basename, *name_without_path, *p, *fixed_name, *file_name, *path, *polsarpro_aux_info; Settings * user_settings; user_settings = settings_get_from_gui(); ext = settings_get_output_format_extension(user_settings); gtk_tree_model_get(model, iter, COL_INPUT_FILE, &file_name, COL_POLSARPRO_INFO, &polsarpro_aux_info, -1); int image_data_type = extract_image_data_type(polsarpro_aux_info); if (output_directory) { path = g_strdup(output_directory); } else { path = g_path_get_dirname(file_name); if (strcmp(path, ".") == 0) { *path = '\0'; } else { int len = strlen(path); path = (gchar *) g_realloc(path, sizeof(gchar) * (len + 2)); *(path + len) = DIR_SEPARATOR; *(path + len + 1) = '\0'; } } g_free(file_name); g_free(polsarpro_aux_info); /* do not allow user to move output file to a different location */ name_without_path = g_path_get_basename(new_name); /* replace illegal characters with _ */ p = name_without_path; do { /* figure out a better way here */ if (*p == '?' || isspace(*p) || *p == '>' || *p == '<' || *p == '|') *p = '_'; } while (*p++); /* add appropriate extension if was not given by user */ basename = g_strdup(name_without_path); p = findExt(basename); if (p) { *p = '\0'; user_ext = p + 1; } else { user_ext = NULL; } if (user_ext == NULL) { int len = strlen(path) + strlen(basename) + strlen(ext) + 2; fixed_name = (gchar *) g_malloc( sizeof(gchar) * len ); if (image_data_type == SELECT_POLARIMETRIC_MATRIX || image_data_type == SELECT_POLARIMETRIC_DECOMPOSITION) g_snprintf(fixed_name, len, "%s%s", path, basename); else g_snprintf(fixed_name, len, "%s%s.%s", path, basename, ext); } else if (strcmp(user_ext, ext) != 0) { int len = strlen(path) + strlen(name_without_path) + strlen(ext) + 2; fixed_name = (gchar *) g_malloc( sizeof(gchar) * len ); if (image_data_type == SELECT_POLARIMETRIC_MATRIX || image_data_type == SELECT_POLARIMETRIC_DECOMPOSITION) g_snprintf(fixed_name, len, "%s%s", path, name_without_path); else g_snprintf(fixed_name, len, "%s%s.%s", path, name_without_path, ext); } else { int len = strlen(path) + strlen(name_without_path) + 2; fixed_name = (gchar *) g_malloc( sizeof(gchar) * len ); g_snprintf(fixed_name, len, "%s%s", path, name_without_path); } g_free(basename); g_free(name_without_path); g_free(path); set_output_name(iter, fixed_name); g_free(fixed_name); settings_delete(user_settings); }
static gboolean confirm_overwrite() { GtkTreeIter iter; gboolean valid; gboolean exist = FALSE; gboolean settings_different = TRUE; Settings * user_settings; user_settings = settings_get_from_gui(); if (settings_on_execute) { settings_different = !settings_equal(user_settings, settings_on_execute); } valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter); while (valid) { gchar *output_file; gchar *status; gboolean done; gtk_tree_model_get (GTK_TREE_MODEL(list_store), &iter, COL_OUTPUT_FILE, &output_file, COL_STATUS, &status, -1); done = strcmp("Done", status) == 0; if ((settings_different || !done) && g_file_test(output_file, G_FILE_TEST_EXISTS)) exist = TRUE; g_free(output_file); g_free(status); if (exist) break; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter); } settings_delete(user_settings); if (exist) { GtkWidget * dialog_confirm_overwrite; gint result; dialog_confirm_overwrite = get_widget_checked("dialog_confirm_overwrite"); result = gtk_dialog_run( GTK_DIALOG(dialog_confirm_overwrite) ); gtk_widget_hide( dialog_confirm_overwrite ); switch (result) { default: return FALSE; case GTK_RESPONSE_OK: return TRUE; } } else { /* no need to confirm -- no overwrites */ return TRUE; } }