static void write_color_profile(GString *outstr, gint indent) { gint i; #ifndef HAVE_LCMS g_string_append_printf(outstr, "<!-- NOTICE: %s was not built with support for color profiles,\n" " color profile options will have no effect.\n-->\n", GQ_APPNAME); #endif WRITE_NL(); WRITE_STRING("<color_profiles "); WRITE_CHAR(options->color_profile, screen_file); WRITE_BOOL(options->color_profile, enabled); WRITE_BOOL(options->color_profile, use_image); WRITE_INT(options->color_profile, input_type); WRITE_BOOL(options->color_profile, use_x11_screen_profile); WRITE_INT(options->color_profile, render_intent); WRITE_STRING(">"); indent++; for (i = 0; i < COLOR_PROFILE_INPUTS; i++) { WRITE_NL(); WRITE_STRING("<profile "); write_char_option(outstr, indent, "input_file", options->color_profile.input_file[i]); write_char_option(outstr, indent, "input_name", options->color_profile.input_name[i]); WRITE_STRING("/>"); } indent--; WRITE_NL(); WRITE_STRING("</color_profiles>"); }
static void bar_pane_exif_write_config(GtkWidget *pane, GString *outstr, gint indent) { PaneExifData *ped; GList *work, *list; ped = g_object_get_data(G_OBJECT(pane), "pane_data"); if (!ped) return; WRITE_NL(); WRITE_STRING("<pane_exif "); write_char_option(outstr, indent, "id", ped->pane.id); write_char_option(outstr, indent, "title", gtk_label_get_text(GTK_LABEL(ped->pane.title))); WRITE_BOOL(ped->pane, expanded); WRITE_BOOL(*ped, show_all); WRITE_STRING(">"); indent++; list = gtk_container_get_children(GTK_CONTAINER(ped->vbox)); work = list; while (work) { GtkWidget *entry = work->data; work = work->next; bar_pane_exif_entry_write_config(entry, outstr, indent); } g_list_free(list); indent--; WRITE_NL(); WRITE_STRING("</pane_exif>"); }
static void keyword_tree_node_write_config(GtkTreeModel *keyword_tree, GtkTreeIter *iter_ptr, GString *outstr, gint indent) { GtkTreeIter iter = *iter_ptr; while (TRUE) { GtkTreeIter children; gchar *name; gchar *mark_str; WRITE_NL(); WRITE_STRING("<keyword "); name = keyword_get_name(keyword_tree, &iter); write_char_option(outstr, indent, "name", name); g_free(name); write_bool_option(outstr, indent, "kw", keyword_get_is_keyword(keyword_tree, &iter)); mark_str = keyword_get_mark(keyword_tree, &iter); if (mark_str && mark_str[0]) { write_char_option(outstr, indent, "mark", mark_str); } if (gtk_tree_model_iter_children(keyword_tree, &children, &iter)) { WRITE_STRING(">"); indent++; keyword_tree_node_write_config(keyword_tree, &children, outstr, indent); indent--; WRITE_NL(); WRITE_STRING("</keyword>"); } else { WRITE_STRING("/>"); } if (!gtk_tree_model_iter_next(keyword_tree, &iter)) return; } }
void keyword_tree_write_config(GString *outstr, gint indent) { GtkTreeIter iter; WRITE_NL(); WRITE_STRING("<keyword_tree>"); indent++; if (keyword_tree && gtk_tree_model_get_iter_first(GTK_TREE_MODEL(keyword_tree), &iter)) { keyword_tree_node_write_config(GTK_TREE_MODEL(keyword_tree), &iter, outstr, indent); } indent--; WRITE_NL(); WRITE_STRING("</keyword_tree>"); }
static void bar_pane_exif_entry_write_config(GtkWidget *entry, GString *outstr, gint indent) { ExifEntry *ee = g_object_get_data(G_OBJECT(entry), "entry_data"); if (!ee) return; WRITE_NL(); WRITE_STRING("<entry "); WRITE_CHAR(*ee, key); if (!ee->auto_title) WRITE_CHAR(*ee, title); WRITE_BOOL(*ee, if_set); WRITE_BOOL(*ee, editable); WRITE_STRING("/>"); }
void bar_write_config(GtkWidget *bar, GString *outstr, gint indent) { BarData *bd; GList *list, *work; if (!bar) return; bd = g_object_get_data(G_OBJECT(bar), "bar_data"); if (!bd) return; WRITE_NL(); WRITE_STRING("<bar "); write_bool_option(outstr, indent, "enabled", gtk_widget_get_visible(bar)); write_uint_option(outstr, indent, "width", bd->width); WRITE_STRING(">"); indent++; WRITE_NL(); WRITE_STRING("<clear/>"); list = gtk_container_get_children(GTK_CONTAINER(bd->vbox)); work = list; while (work) { GtkWidget *expander = work->data; GtkWidget *widget = gtk_bin_get_child(GTK_BIN(expander)); PaneData *pd = g_object_get_data(G_OBJECT(widget), "pane_data"); if (!pd) continue; pd->expanded = gtk_expander_get_expanded(GTK_EXPANDER(expander)); if (pd->pane_write_config) pd->pane_write_config(widget, outstr, indent); work = work->next; } g_list_free(list); indent--; WRITE_NL(); WRITE_STRING("</bar>"); }
static void bar_pane_keywords_write_config(GtkWidget *pane, GString *outstr, gint indent) { PaneKeywordsData *pkd; pkd = g_object_get_data(G_OBJECT(pane), "pane_data"); if (!pkd) return; WRITE_NL(); WRITE_STRING("<pane_keywords "); write_char_option(outstr, indent, "id", pkd->pane.id); write_char_option(outstr, indent, "title", gtk_label_get_text(GTK_LABEL(pkd->pane.title))); WRITE_BOOL(pkd->pane, expanded); WRITE_CHAR(*pkd, key); WRITE_STRING("/>"); }
static void bar_pane_comment_write_config(GtkWidget *pane, GString *outstr, gint indent) { PaneCommentData *pcd; pcd = g_object_get_data(G_OBJECT(pane), "pane_data"); if (!pcd) return; WRITE_NL(); WRITE_STRING("<pane_comment "); write_char_option(outstr, indent, "id", pcd->pane.id); write_char_option(outstr, indent, "title", gtk_label_get_text(GTK_LABEL(pcd->pane.title))); WRITE_BOOL(pcd->pane, expanded); WRITE_CHAR(*pcd, key); WRITE_INT(*pcd, height); WRITE_STRING("/>"); }
static void bar_pane_gps_write_config(GtkWidget *pane, GString *outstr, gint indent) { PaneGPSData *pgd; gint zoom; ChamplainMapSource *mapsource; const gchar *map_id; gchar *str = NULL; GString *buffer = g_string_new(str); gdouble position; gint int_position; pgd = g_object_get_data(G_OBJECT(pane), "pane_data"); if (!pgd) return; WRITE_NL(); WRITE_STRING("<pane_gps "); write_char_option(outstr, indent, "id", pgd->pane.id); write_char_option(outstr, indent, "title", gtk_label_get_text(GTK_LABEL(pgd->pane.title))); WRITE_BOOL(pgd->pane, expanded); WRITE_INT(*pgd, height); indent++; g_object_get(G_OBJECT(pgd->gps_view), "map-source", &mapsource, NULL); map_id = champlain_map_source_get_id(mapsource); WRITE_NL(); write_char_option(outstr, indent, "map-id", map_id); g_object_get(G_OBJECT(pgd->gps_view), "zoom-level", &zoom, NULL); g_string_printf(buffer, "%d", zoom); WRITE_NL(); write_char_option(outstr, indent, "zoom-level", buffer->str); g_object_get(G_OBJECT(pgd->gps_view), "latitude", &position, NULL); int_position = position * 1000000; g_string_printf(buffer, "%i", int_position); WRITE_NL(); write_char_option(outstr, indent, "latitude", buffer->str); g_object_get(G_OBJECT(pgd->gps_view), "longitude", &position, NULL); int_position = position * 1000000; g_string_printf(buffer, "%i", int_position); WRITE_NL(); write_char_option(outstr, indent, "longitude", buffer->str); indent--; WRITE_NL(); WRITE_STRING("/>"); g_object_unref(mapsource); }
gboolean save_config_to_file(const gchar *utf8_path, ConfOptions *options) { SecureSaveInfo *ssi; gchar *rc_pathl; GString *outstr; gint indent = 0; GList *work; rc_pathl = path_from_utf8(utf8_path); ssi = secure_open(rc_pathl); g_free(rc_pathl); if (!ssi) { log_printf(_("error saving config file: %s\n"), utf8_path); return FALSE; } outstr = g_string_new(""); g_string_append_printf(outstr, "<!--\n"); g_string_append_printf(outstr, "######################################################################\n"); g_string_append_printf(outstr, "# %30s config file version %-10s #\n", GQ_APPNAME, VERSION); g_string_append_printf(outstr, "######################################################################\n"); WRITE_SEPARATOR(); WRITE_STRING("# Note: This file is autogenerated. Options can be changed here,\n"); WRITE_STRING("# but user comments and formatting will be lost.\n"); WRITE_SEPARATOR(); WRITE_STRING("-->\n"); WRITE_SEPARATOR(); WRITE_STRING("<gq>\n"); indent++; WRITE_NL(); WRITE_STRING("<global\n"); indent++; write_global_attributes(outstr, indent + 1); indent--; WRITE_STRING(">\n"); indent++; write_color_profile(outstr, indent); WRITE_SEPARATOR(); filter_write_list(outstr, indent); WRITE_SEPARATOR(); keyword_tree_write_config(outstr, indent); indent--; WRITE_NL(); WRITE_STRING("</global>\n"); WRITE_SEPARATOR(); /* Layout Options */ work = layout_window_list; while (work) { LayoutWindow *lw = work->data; layout_write_config(lw, outstr, indent); work = work->next; } indent--; WRITE_NL(); WRITE_STRING("</gq>\n"); WRITE_SEPARATOR(); secure_fputs(ssi, outstr->str); g_string_free(outstr, TRUE); if (secure_close(ssi)) { log_printf(_("error saving config file: %s\nerror: %s\n"), utf8_path, secsave_strerror(secsave_errno)); return FALSE; } return TRUE; }
static void write_global_attributes(GString *outstr, gint indent) { /* General Options */ WRITE_NL(); WRITE_BOOL(*options, show_icon_names); WRITE_SEPARATOR(); WRITE_NL(); WRITE_BOOL(*options, tree_descend_subdirs); WRITE_NL(); WRITE_BOOL(*options, view_dir_list_single_click_enter); WRITE_NL(); WRITE_BOOL(*options, lazy_image_sync); WRITE_NL(); WRITE_BOOL(*options, update_on_time_change); WRITE_SEPARATOR(); WRITE_NL(); WRITE_BOOL(*options, progressive_key_scrolling); WRITE_NL(); WRITE_UINT(*options, keyboard_scroll_step); WRITE_NL(); WRITE_UINT(*options, duplicates_similarity_threshold); WRITE_NL(); WRITE_UINT(*options, duplicates_match); WRITE_NL(); WRITE_UINT(*options, duplicates_select_type); WRITE_NL(); WRITE_BOOL(*options, duplicates_thumbnails); WRITE_NL(); WRITE_BOOL(*options, rot_invariant_sim); WRITE_SEPARATOR(); WRITE_NL(); WRITE_BOOL(*options, mousewheel_scrolls); WRITE_NL(); WRITE_BOOL(*options, image_lm_click_nav); WRITE_NL(); WRITE_INT(*options, open_recent_list_maxsize); WRITE_NL(); WRITE_INT(*options, dnd_icon_size); WRITE_NL(); WRITE_BOOL(*options, place_dialogs_under_mouse); WRITE_NL(); WRITE_BOOL(*options, save_window_positions); WRITE_NL(); WRITE_BOOL(*options, use_saved_window_positions_for_new_windows); WRITE_NL(); WRITE_BOOL(*options, tools_restore_state); /* File operations Options */ WRITE_NL(); WRITE_BOOL(*options, file_ops.enable_in_place_rename); WRITE_NL(); WRITE_BOOL(*options, file_ops.confirm_delete); WRITE_NL(); WRITE_BOOL(*options, file_ops.enable_delete_key); WRITE_NL(); WRITE_BOOL(*options, file_ops.safe_delete_enable); WRITE_NL(); WRITE_CHAR(*options, file_ops.safe_delete_path); WRITE_NL(); WRITE_INT(*options, file_ops.safe_delete_folder_maxsize); /* Properties dialog Options */ WRITE_NL(); WRITE_CHAR(*options, properties.tabs_order); /* Image Options */ WRITE_NL(); WRITE_UINT(*options, image.zoom_mode); WRITE_SEPARATOR(); WRITE_NL(); WRITE_BOOL(*options, image.zoom_2pass); WRITE_NL(); WRITE_BOOL(*options, image.zoom_to_fit_allow_expand); WRITE_NL(); WRITE_UINT(*options, image.zoom_quality); WRITE_NL(); WRITE_INT(*options, image.zoom_increment); WRITE_NL(); WRITE_BOOL(*options, image.fit_window_to_image); WRITE_NL(); WRITE_BOOL(*options, image.limit_window_size); WRITE_NL(); WRITE_INT(*options, image.max_window_size); WRITE_NL(); WRITE_BOOL(*options, image.limit_autofit_size); WRITE_NL(); WRITE_INT(*options, image.max_autofit_size); WRITE_NL(); WRITE_UINT(*options, image.scroll_reset_method); WRITE_NL(); WRITE_INT(*options, image.tile_cache_max); WRITE_NL(); WRITE_INT(*options, image.image_cache_max); WRITE_NL(); WRITE_BOOL(*options, image.enable_read_ahead); WRITE_NL(); WRITE_BOOL(*options, image.exif_rotate_enable); WRITE_NL(); WRITE_BOOL(*options, image.use_custom_border_color); WRITE_NL(); WRITE_BOOL(*options, image.use_custom_border_color_in_fullscreen); WRITE_NL(); WRITE_COLOR(*options, image.border_color); WRITE_NL(); WRITE_BOOL(*options, image.use_clutter_renderer); /* Thumbnails Options */ WRITE_NL(); WRITE_INT(*options, thumbnails.max_width); WRITE_NL(); WRITE_INT(*options, thumbnails.max_height); WRITE_NL(); WRITE_BOOL(*options, thumbnails.enable_caching); WRITE_NL(); WRITE_BOOL(*options, thumbnails.cache_into_dirs); WRITE_NL(); WRITE_BOOL(*options, thumbnails.use_xvpics); WRITE_NL(); WRITE_BOOL(*options, thumbnails.spec_standard); WRITE_NL(); WRITE_UINT(*options, thumbnails.quality); WRITE_NL(); WRITE_BOOL(*options, thumbnails.use_exif); /* File sorting Options */ WRITE_NL(); WRITE_INT(*options, file_sort.method); WRITE_NL(); WRITE_BOOL(*options, file_sort.ascending); WRITE_NL(); WRITE_BOOL(*options, file_sort.case_sensitive); WRITE_NL(); WRITE_BOOL(*options, file_sort.natural); /* Fullscreen Options */ WRITE_NL(); WRITE_INT(*options, fullscreen.screen); WRITE_NL(); WRITE_BOOL(*options, fullscreen.clean_flip); WRITE_NL(); WRITE_BOOL(*options, fullscreen.disable_saver); WRITE_NL(); WRITE_BOOL(*options, fullscreen.above); WRITE_SEPARATOR(); /* Image Overlay Options */ WRITE_NL(); WRITE_CHAR(*options, image_overlay.template_string); WRITE_NL(); WRITE_INT(*options, image_overlay.x); WRITE_NL(); WRITE_INT(*options, image_overlay.y); WRITE_NL(); WRITE_INT(*options, image_overlay.text_red); WRITE_NL(); WRITE_INT(*options, image_overlay.text_green); WRITE_NL(); WRITE_INT(*options, image_overlay.text_blue); WRITE_NL(); WRITE_INT(*options, image_overlay.text_alpha); WRITE_NL(); WRITE_INT(*options, image_overlay.background_red); WRITE_NL(); WRITE_INT(*options, image_overlay.background_green); WRITE_NL(); WRITE_INT(*options, image_overlay.background_blue); WRITE_NL(); WRITE_INT(*options, image_overlay.background_alpha); WRITE_NL(); WRITE_CHAR(*options, image_overlay.font); /* Slideshow Options */ WRITE_NL(); WRITE_INT_UNIT(*options, slideshow.delay, SLIDESHOW_SUBSECOND_PRECISION); WRITE_NL(); WRITE_BOOL(*options, slideshow.random); WRITE_NL(); WRITE_BOOL(*options, slideshow.repeat); /* Collection Options */ WRITE_NL(); WRITE_BOOL(*options, collections.rectangular_selection); /* Filtering Options */ WRITE_NL(); WRITE_BOOL(*options, file_filter.show_hidden_files); WRITE_NL(); WRITE_BOOL(*options, file_filter.show_parent_directory); WRITE_NL(); WRITE_BOOL(*options, file_filter.show_dot_directory); WRITE_NL(); WRITE_BOOL(*options, file_filter.disable_file_extension_checks); WRITE_NL(); WRITE_BOOL(*options, file_filter.disable); WRITE_SEPARATOR(); /* Sidecars Options */ WRITE_NL(); WRITE_CHAR(*options, sidecar.ext); /* Shell command */ WRITE_NL(); WRITE_CHAR(*options, shell.path); WRITE_NL(); WRITE_CHAR(*options, shell.options); /* Helpers */ WRITE_NL(); WRITE_CHAR(*options, helpers.html_browser.command_name); WRITE_NL(); WRITE_CHAR(*options, helpers.html_browser.command_line); /* Metadata Options */ WRITE_NL(); WRITE_BOOL(*options, metadata.enable_metadata_dirs); WRITE_NL(); WRITE_BOOL(*options, metadata.save_in_image_file); WRITE_NL(); WRITE_BOOL(*options, metadata.save_legacy_IPTC); WRITE_NL(); WRITE_BOOL(*options, metadata.warn_on_write_problems); WRITE_NL(); WRITE_BOOL(*options, metadata.save_legacy_format); WRITE_NL(); WRITE_BOOL(*options, metadata.sync_grouped_files); WRITE_NL(); WRITE_BOOL(*options, metadata.confirm_write); WRITE_NL(); WRITE_INT(*options, metadata.confirm_timeout); WRITE_NL(); WRITE_BOOL(*options, metadata.confirm_after_timeout); WRITE_NL(); WRITE_BOOL(*options, metadata.confirm_on_image_change); WRITE_NL(); WRITE_BOOL(*options, metadata.confirm_on_dir_change); WRITE_NL(); WRITE_BOOL(*options, metadata.keywords_case_sensitive); WRITE_NL(); WRITE_BOOL(*options, metadata.write_orientation); WRITE_NL(); WRITE_INT(*options, stereo.mode); WRITE_NL(); WRITE_INT(*options, stereo.fsmode); WRITE_NL(); WRITE_BOOL(*options, stereo.enable_fsmode); WRITE_NL(); WRITE_INT(*options, stereo.fixed_w); WRITE_NL(); WRITE_INT(*options, stereo.fixed_h); WRITE_NL(); WRITE_INT(*options, stereo.fixed_x1); WRITE_NL(); WRITE_INT(*options, stereo.fixed_y1); WRITE_NL(); WRITE_INT(*options, stereo.fixed_x2); WRITE_NL(); WRITE_INT(*options, stereo.fixed_y2); }