Index: src_plugins/hid_gtk/gtkhid-main.c =================================================================== --- src_plugins/hid_gtk/gtkhid-main.c (revision 2240) +++ src_plugins/hid_gtk/gtkhid-main.c (revision 2241) @@ -1810,8 +1810,7 @@ static int SaveWinGeo(int argc, char **argv, Coord x, Coord y) { - conf_role_t geo_dest = ghid_wgeo_save(); - conf_save_file(NULL, (PCB == NULL ? NULL : PCB->Filename), geo_dest, NULL); + ghid_wgeo_save(1); return 0; } Index: src_plugins/hid_gtk/gui-config.c =================================================================== --- src_plugins/hid_gtk/gui-config.c (revision 2240) +++ src_plugins/hid_gtk/gui-config.c (revision 2241) @@ -52,6 +52,7 @@ #include "hid_gtk_conf.h" #include "gtk_conf_list.h" #include "paths.h" +#include "plug_footprint.h" #include /* for MKDIR() */ @@ -76,29 +77,63 @@ } void hid_gtk_wgeo_update(void) { - conf_role_t dest_role = CFR_USER; - - if (!conf_hid_gtk.plugins.hid_gtk.auto_save_window_geometry) - return; - if (conf_hid_gtk.plugins.hid_gtk.save_window_geometry_in_design) - dest_role = CFR_DESIGN; - GHID_WGEO_ALL(hid_gtk_wgeo_update_, dest_role); + if (conf_hid_gtk.plugins.hid_gtk.auto_save_window_geometry.to_design) + GHID_WGEO_ALL(hid_gtk_wgeo_update_, CFR_DESIGN); + if (conf_hid_gtk.plugins.hid_gtk.auto_save_window_geometry.to_project) + GHID_WGEO_ALL(hid_gtk_wgeo_update_, CFR_PROJECT); + if (conf_hid_gtk.plugins.hid_gtk.auto_save_window_geometry.to_user) + GHID_WGEO_ALL(hid_gtk_wgeo_update_, CFR_USER); } #undef hid_gtk_wgeo_update_ -conf_role_t ghid_wgeo_save(void) +void ghid_wgeo_save(int save_to_file) { - conf_role_t dest_role = CFR_USER; + if (conf_hid_gtk.plugins.hid_gtk.auto_save_window_geometry.to_design) { + GHID_WGEO_ALL(hid_gtk_wgeo_save_, CFR_DESIGN); + if (save_to_file) + conf_save_file(NULL, (PCB == NULL ? NULL : PCB->Filename), CFR_DESIGN, NULL); + } - if (conf_hid_gtk.plugins.hid_gtk.save_window_geometry_in_design) - dest_role = CFR_DESIGN; - GHID_WGEO_ALL(hid_gtk_wgeo_save_, dest_role); + if (conf_hid_gtk.plugins.hid_gtk.auto_save_window_geometry.to_project) { + GHID_WGEO_ALL(hid_gtk_wgeo_save_, CFR_PROJECT); + if (save_to_file) + conf_save_file(NULL, (PCB == NULL ? NULL : PCB->Filename), CFR_PROJECT, NULL); + } - return dest_role; + if (conf_hid_gtk.plugins.hid_gtk.auto_save_window_geometry.to_user) { + GHID_WGEO_ALL(hid_gtk_wgeo_save_, CFR_USER); + if (save_to_file) + conf_save_file(NULL, (PCB == NULL ? NULL : PCB->Filename), CFR_USER, NULL); + } } + +static void wgeo_save_direct(GtkButton *widget, const char *ctx) +{ + if (*ctx == '*') { + switch(ctx[1]) { + case 'd': + GHID_WGEO_ALL(hid_gtk_wgeo_save_, CFR_DESIGN); + conf_save_file(NULL, (PCB == NULL ? NULL : PCB->Filename), CFR_DESIGN, NULL); + break; + case 'p': + GHID_WGEO_ALL(hid_gtk_wgeo_save_, CFR_PROJECT); + conf_save_file(NULL, (PCB == NULL ? NULL : PCB->Filename), CFR_PROJECT, NULL); + break; + case 'u': + GHID_WGEO_ALL(hid_gtk_wgeo_save_, CFR_USER); + conf_save_file(NULL, (PCB == NULL ? NULL : PCB->Filename), CFR_USER, NULL); + break; + } + } + else { +#warning TODO: save to the file name specified in ctx + } +} + #undef hid_gtk_wgeo_save_ + RCSID("$Id$"); enum ConfigType { @@ -501,6 +536,73 @@ } + /* -------------- The window config page ---------------- + */ +static GtkWidget *config_window_vbox; + +static void config_window_apply(void) +{ +} + +static void config_window_row(GtkWidget *parent, const char *desc, int load, const char *wgeo_save_str) +{ + GtkWidget *hbox, *lab, *button; + hbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(parent), hbox, FALSE, FALSE, 0); + + lab = gtk_label_new(desc); + gtk_box_pack_start(GTK_BOX(hbox), lab, TRUE, FALSE, 0); + gtk_misc_set_alignment(GTK_MISC(lab), 0.0, 0.5); + + button = gtk_button_new_with_label(_("now")); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); + g_signal_connect(GTK_OBJECT(button), "clicked", G_CALLBACK(wgeo_save_direct), (void *)wgeo_save_str); + + if (load) { + button = gtk_button_new_with_label(_("Load from file")); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); + } + else { + ghid_check_button_connected(hbox, NULL, conf_hid_gtk.plugins.hid_gtk.use_command_window, + TRUE, FALSE, FALSE, 2, + config_command_window_toggle_cb, NULL, _("every time pcb-rnd exits")); + } +} + +static void config_window_tab_create(GtkWidget *tab_vbox) +{ + GtkWidget *lab; + + config_window_vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(tab_vbox), config_window_vbox, FALSE, FALSE, 0); + gtk_container_set_border_width(GTK_CONTAINER(config_window_vbox), 6); + + lab = gtk_label_new(""); + gtk_label_set_use_markup(GTK_LABEL(lab), TRUE); + gtk_label_set_markup(GTK_LABEL(lab), + _("Save window geometry...")); + gtk_box_pack_start(GTK_BOX(config_window_vbox), lab, FALSE, FALSE, 4); + gtk_misc_set_alignment(GTK_MISC(lab), 0.0, 0.5); + + + config_window_row(config_window_vbox, "... in the design (.pcb) file", 0, "*d"); + config_window_row(config_window_vbox, "... in the project file", 0, "*p"); + config_window_row(config_window_vbox, "... in the central user configuration", 0, "*u"); +#warning TODO +/* config_window_row(config_window_vbox, "... in a custom file", 1);*/ + + lab = gtk_label_new(""); + gtk_label_set_use_markup(GTK_LABEL(lab), TRUE); + gtk_label_set_markup(GTK_LABEL(lab), + _("Note: checkbox values are saved in the user config")); + gtk_box_pack_start(GTK_BOX(config_window_vbox), lab, FALSE, FALSE, 4); + gtk_misc_set_alignment(GTK_MISC(lab), 0.0, 0.5); + + + gtk_widget_show_all(config_window_vbox); +} + + /* -------------- The Increments config page ---------------- */ /* Increment/decrement values are kept in mil and mm units and not in @@ -1715,6 +1817,7 @@ config_tree_sect(model, NULL, &config_pov, _("Config PoV"), _("\nConfig PoV\nAccess all configuration fields presented in a tree that matches the configuration file (lht) structure.")); config_tree_leaf(model, &user_pov, _("General"), config_general_tab_create); + config_tree_leaf(model, &user_pov, _("Window"), config_window_tab_create); config_tree_leaf(model, &user_pov, _("Sizes"), config_sizes_tab_create); config_tree_leaf(model, &user_pov, _("Increments"), config_increments_tab_create); config_tree_leaf(model, &user_pov, _("Library"), config_library_tab_create); Index: src_plugins/hid_gtk/gui.h =================================================================== --- src_plugins/hid_gtk/gui.h (revision 2240) +++ src_plugins/hid_gtk/gui.h (revision 2241) @@ -206,7 +206,7 @@ void ghid_config_groups_changed(void); void ghid_config_init(void); -conf_role_t ghid_wgeo_save(void); +void ghid_wgeo_save(int save_to_file); void ghid_mode_buttons_update(void); void ghid_pack_mode_buttons(void); Index: src_plugins/hid_gtk/hid_gtk_conf.h =================================================================== --- src_plugins/hid_gtk/hid_gtk_conf.h (revision 2240) +++ src_plugins/hid_gtk/hid_gtk_conf.h (revision 2241) @@ -15,8 +15,12 @@ CFT_INTEGER history_size; CFT_INTEGER n_mode_button_columns; - CFT_BOOLEAN auto_save_window_geometry; /* true=save window geometry so they are preserved after a restart of pcb */ - CFT_BOOLEAN save_window_geometry_in_design; /* true=save window geometry per design; false=save it per user */ + const struct auto_save_window_geometry { + CFT_BOOLEAN to_design; + CFT_BOOLEAN to_project; + CFT_BOOLEAN to_user; + } auto_save_window_geometry; + const struct window_geometry { CFT_INTEGER top_width; CFT_INTEGER top_height;