static GtkTargetList * gnm_soi_get_target_list (SheetObject const *so) { SheetObjectImage *soi = SHEET_OBJECT_IMAGE (so); GtkTargetList *tl = gtk_target_list_new (NULL, 0); char *mime_str = go_image_format_to_mime (soi->type); GSList *mimes, *ptr; GdkPixbuf *pixbuf; mimes = go_strsplit_to_slist (mime_str, ','); for (ptr = mimes; ptr != NULL; ptr = ptr->next) { const char *mime = ptr->data; if (mime != NULL && *mime != '\0') gtk_target_list_add (tl, gdk_atom_intern (mime, FALSE), 0, 0); } g_free (mime_str); go_slist_free_custom (mimes, g_free); /* No need to eliminate duplicates. */ if ((pixbuf = soi_get_pixbuf (soi, 1.0)) != NULL) { gtk_target_list_add_image_targets (tl, 0, TRUE); g_object_unref (pixbuf); } return tl; }
/** * csv_page_global_change * @widget : the widget which emitted the signal * @data : mother struct * * This will update the preview based on the state of * the widgets on the csv page * * returns : nothing **/ static void csv_page_global_change (G_GNUC_UNUSED GtkWidget *widget, StfDialogData *pagedata) { StfParseOptions_t *parseoptions = pagedata->parseoptions; RenderData_t *renderdata = pagedata->csv.renderdata; GSList *sepstr; GString *sepc = g_string_new (NULL); GStringChunk *lines_chunk; GPtrArray *lines; StfTrimType_t trim; sepstr = NULL; if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pagedata->csv.csv_custom))) { char *csvcustomtext = gtk_editable_get_chars (GTK_EDITABLE (pagedata->csv.csv_customseparator), 0, -1); if (strcmp (csvcustomtext, "") != 0) sepstr = g_slist_append (sepstr, csvcustomtext); else g_free (csvcustomtext); } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pagedata->csv.csv_tab))) g_string_append_c (sepc, '\t'); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pagedata->csv.csv_colon))) g_string_append_c (sepc, ':'); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pagedata->csv.csv_comma))) g_string_append_c (sepc, ','); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pagedata->csv.csv_space))) g_string_append_c (sepc, ' '); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pagedata->csv.csv_semicolon))) g_string_append_c (sepc, ';'); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pagedata->csv.csv_hyphen))) g_string_append_c (sepc, '-'); stf_parse_options_csv_set_separators (parseoptions, strcmp (sepc->str, "") == 0 ? NULL : sepc->str, sepstr); g_string_free (sepc, TRUE); go_slist_free_custom (sepstr, g_free); stf_parse_options_csv_set_duplicates (parseoptions, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pagedata->csv.csv_duplicates))); stf_parse_options_csv_set_trim_seps (parseoptions, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pagedata->csv.csv_trim_seps))); lines_chunk = g_string_chunk_new (100 * 1024); /* Don't trim on this page. */ trim = parseoptions->trim_spaces; stf_parse_options_set_trim_spaces (parseoptions, TRIM_TYPE_NEVER); lines = stf_parse_general (parseoptions, lines_chunk, pagedata->cur, pagedata->cur_end); stf_parse_options_set_trim_spaces (parseoptions, trim); stf_preview_set_lines (renderdata, lines_chunk, lines); }
/** * stf_parse_options_clear_line_terminator: * * This will clear the line terminator, in both the Fixed width and CSV delimited importers * this indicates the end of a row. * **/ void stf_parse_options_clear_line_terminator (StfParseOptions_t *parseoptions) { g_return_if_fail (parseoptions != NULL); go_slist_free_custom (parseoptions->terminator, g_free); parseoptions->terminator = NULL; compile_terminators (parseoptions); }
/** * stf_parse_options_csv_set_separators: * * A copy is made of the parameters. **/ void stf_parse_options_csv_set_separators (StfParseOptions_t *parseoptions, char const *character, GSList const *string) { g_return_if_fail (parseoptions != NULL); g_free (parseoptions->sep.chr); parseoptions->sep.chr = g_strdup (character); go_slist_free_custom (parseoptions->sep.str, g_free); parseoptions->sep.str = go_slist_map (string, (GOMapFunc)g_strdup); }
GList * category_group_list_get (void) { GList *category_groups = NULL; GSList *dir_list = NULL, *sl; GList *categories, *l; FormatTemplateCategoryGroup *current_group; add_dir (&dir_list, gnm_conf_get_autoformat_sys_dir (), gnm_sys_data_dir ()); add_dir (&dir_list, gnm_conf_get_autoformat_usr_dir (), gnm_usr_dir (FALSE)); add_dir (&dir_list, gnm_conf_get_autoformat_usr_dir (), gnm_usr_dir (TRUE)); for (sl = gnm_conf_get_autoformat_extra_dirs (); sl; sl = sl->next) { const char *dir = sl->data; add_dir (&dir_list, dir, g_get_home_dir ()); } dir_list = g_slist_reverse (dir_list); categories = category_list_get_from_dir_list (dir_list); go_slist_free_custom (dir_list, g_free); categories = g_list_sort (categories, category_compare_name_and_dir); current_group = NULL; for (l = categories; l != NULL; l = l->next) { FormatTemplateCategory *category = l->data; if (current_group == NULL || strcmp (current_group->name, category->name) != 0) { if (current_group != NULL) { category_groups = g_list_prepend (category_groups, current_group); } current_group = g_new (FormatTemplateCategoryGroup, 1); current_group->categories = g_list_append (NULL, category); current_group->name = g_strdup (category->name); current_group->description = g_strdup (category->description); } else { current_group->categories = g_list_prepend (current_group->categories, category); } } if (current_group != NULL) category_groups = g_list_prepend (category_groups, current_group); g_list_free (categories); return category_groups; }