Index: trunk/scconfig/Rev.h =================================================================== --- trunk/scconfig/Rev.h (revision 5486) +++ trunk/scconfig/Rev.h (revision 5487) @@ -1 +1 @@ -static const int myrev = 5472; +static const int myrev = 5487; Index: trunk/scconfig/Rev.tab =================================================================== --- trunk/scconfig/Rev.tab (revision 5486) +++ trunk/scconfig/Rev.tab (revision 5487) @@ -1,3 +1,4 @@ +5487 configure layer cleanup: layer visibility ina new source file 5472 configure draw_fab config subtree 5278 configure prepare for arc UI extension: blank arc_ui.[ch] to move arc UI logics into 5256 configure move rubberband code into a plugin Index: trunk/src/Makefile.dep =================================================================== --- trunk/src/Makefile.dep (revision 5486) +++ trunk/src/Makefile.dep (revision 5487) @@ -31,7 +31,7 @@ ../src_3rd/liblihata/genht/ht.h ../src_3rd/liblihata/genht/ht_inlines.h \ obj_poly_list.h obj_poly.h polyarea.h obj_text_list.h obj_rat_list.h \ obj_rat.h library.h rats_patch.h board.h font.h box.h math_helper.h \ - move.h misc_util.h dolists.h + move.h misc_util.h event.h dolists.h ../src_plugins/autoplace/autoplace.o: \ ../src_plugins/autoplace/autoplace.c ../config.h board.h const.h macro.h \ global_typedefs.h pcb_bool.h unit.h vtroutestyle.h attrib.h \ @@ -66,7 +66,7 @@ obj_poly_list.h obj_poly.h polyarea.h obj_text_list.h obj_rat_list.h \ obj_rat.h library.h rats_patch.h board.h font.h box.h math_helper.h \ move.h misc_util.h action_helper.h plugins.h hid_actions.h hid.h error.h \ - drc.h dolists.h + drc.h event.h dolists.h ../src_plugins/autoroute/autoroute.o: \ ../src_plugins/autoroute/autoroute.c ../config.h conf_core.h conf.h \ global_typedefs.h pcb_bool.h unit.h pcb-printf.h \ @@ -228,7 +228,7 @@ vtonpoint.h hid.h error.h drc.h buffer.h remove.h move.h draw.h undo.h \ flag_str.h find.h layer.h pcb-printf.h compat_misc.h plugins.h \ hid_flags.h hid_actions.h ../src_plugins/djopt/djopt_conf.h conf.h \ - obj_line.h obj_pinvia.h dolists.h \ + obj_line.h obj_pinvia.h event.h dolists.h \ ../src_plugins/djopt/djopt_conf_fields.h ../src_plugins/draw_fab/draw_fab.o: ../src_plugins/draw_fab/draw_fab.c \ ../config.h board.h const.h macro.h global_typedefs.h pcb_bool.h unit.h \ @@ -678,7 +678,7 @@ font.h box.h math_helper.h move.h misc_util.h data.h crosshair.h \ vtonpoint.h hid.h error.h drc.h buffer.h draw.h flag.h layer.h move.h \ remove.h rtree.h flag_str.h undo.h pcb-printf.h plugins.h hid_actions.h \ - compat_misc.h dolists.h + compat_misc.h event.h dolists.h ../src_plugins/fp_fs/fp_fs.o: ../src_plugins/fp_fs/fp_fs.c ../config.h \ data.h globalconst.h global_typedefs.h pcb_bool.h unit.h layer.h \ attrib.h obj_all_list.h obj_arc_list.h obj_common.h \ @@ -1016,7 +1016,7 @@ hid_draw_helpers.h pcb-printf.h plugins.h hid_attrib.h hid_init.h \ hid_flags.h hid_actions.h plug_footprint.h vtlibrary.h plug_io.h \ misc_util.h layer.h ../src_plugins/hid_gtk/ghid-search.h compat_nls.h \ - ../src_plugins/hid_gtk/gtkhid.h conf_hid.h dolists.h \ + layer_vis.h ../src_plugins/hid_gtk/gtkhid.h conf_hid.h dolists.h \ ../src_plugins/hid_gtk/hid_gtk_conf_fields.h ../src_plugins/hid_gtk/gui-command-window.o: \ ../src_plugins/hid_gtk/gui-command-window.c ../config.h conf_core.h \ @@ -1170,7 +1170,7 @@ ../src_plugins/hid_gtk/win_place.h \ ../src_plugins/hid_gtk/gui-drc-window.h hid_actions.h compat_nls.h \ obj_all.h obj_pinvia_draw.h obj_pad_draw.h obj_rat_draw.h \ - obj_line_draw.h obj_arc_draw.h obj_poly_draw.h + obj_line_draw.h obj_arc_draw.h obj_poly_draw.h layer_vis.h ../src_plugins/hid_gtk/gui-keyref-window.o: \ ../src_plugins/hid_gtk/gui-keyref-window.c ../config.h \ ../src_plugins/hid_gtk/gui.h board.h const.h macro.h global_typedefs.h \ @@ -1446,7 +1446,7 @@ ../src_plugins/hid_gtk/gui-icons-mode-buttons.data \ ../src_plugins/hid_gtk/gui-icons-misc.data \ ../src_plugins/hid_gtk/win_place.h hid_attrib.h hid_actions.h \ - hid_flags.h compat_nls.h obj_line.h + hid_flags.h compat_nls.h obj_line.h layer_vis.h ../src_plugins/hid_gtk/gui-utils.o: ../src_plugins/hid_gtk/gui-utils.c \ ../config.h conf_core.h conf.h global_typedefs.h pcb_bool.h unit.h \ pcb-printf.h ../src_3rd/genvector/gds_char.h \ @@ -1552,7 +1552,7 @@ hid_cfg_input.h ../src_3rd/liblihata/genht/htip.h hid_cfg.h compat_nls.h \ board.h const.h macro.h vtroutestyle.h library.h rats_patch.h board.h \ font.h box.h math_helper.h move.h misc_util.h \ - ../src_plugins/hid_lesstif/stdarg.h + ../src_plugins/hid_lesstif/stdarg.h event.h ../src_plugins/hid_lesstif/main.o: ../src_plugins/hid_lesstif/main.c \ ../src_plugins/hid_lesstif/xincludes.h ../config.h math_helper.h \ conf_core.h conf.h global_typedefs.h pcb_bool.h unit.h pcb-printf.h \ @@ -1577,7 +1577,8 @@ board.h const.h macro.h vtroutestyle.h library.h rats_patch.h board.h \ font.h box.h math_helper.h move.h misc_util.h hid_attrib.h hid_helper.h \ hid_init.h hid_color.h hid_extents.h hid_flags.h hid_actions.h \ - ../src_plugins/hid_lesstif/stdarg.h misc_util.h compat_misc.h dolists.h + ../src_plugins/hid_lesstif/stdarg.h misc_util.h compat_misc.h \ + layer_vis.h dolists.h ../src_plugins/hid_lesstif/menu.o: ../src_plugins/hid_lesstif/menu.c \ ../src_plugins/hid_lesstif/xincludes.h ../config.h conf_core.h conf.h \ global_typedefs.h pcb_bool.h unit.h pcb-printf.h \ @@ -1601,7 +1602,7 @@ compat_nls.h board.h const.h macro.h vtroutestyle.h library.h \ rats_patch.h board.h font.h box.h math_helper.h move.h misc_util.h \ paths.h hid_actions.h hid_flags.h ../src_plugins/hid_lesstif/stdarg.h \ - compat_misc.h + event.h compat_misc.h layer_vis.h ../src_plugins/hid_lesstif/menu_lht.o: \ ../src_plugins/hid_lesstif/menu_lht.c ../src_plugins/hid_lesstif/netlist.o: \ @@ -1619,7 +1620,7 @@ obj_rat.h crosshair.h vtonpoint.h ../src_3rd/genvector/genvector_impl.h \ ../src_3rd/genvector/genvector_undef.h hid.h error.h drc.h buffer.h \ find.h rats.h netlist.h library.h route_style.h vtroutestyle.h select.h \ - operation.h undo.h remove.h crosshair.h draw.h obj_all.h hid.h \ + operation.h undo.h remove.h crosshair.h draw.h obj_all.h event.h hid.h \ hid_actions.h ../src_plugins/hid_lesstif/lesstif.h hid_cfg_input.h \ ../src_3rd/liblihata/dom.h ../src_3rd/liblihata/lihata.h \ ../src_3rd/liblihata/parser.h ../src_3rd/liblihata/genht/htsp.h \ @@ -1652,7 +1653,7 @@ ../src_3rd/liblihata/genht/htip.h hid_cfg.h compat_nls.h board.h const.h \ macro.h vtroutestyle.h library.h rats_patch.h board.h font.h box.h \ math_helper.h move.h misc_util.h hid_flags.h \ - ../src_plugins/hid_lesstif/stdarg.h misc_util.h + ../src_plugins/hid_lesstif/stdarg.h misc_util.h event.h ../src_plugins/hid_remote/base64.o: ../src_plugins/hid_remote/base64.c \ ../src_plugins/hid_remote/base64.h ../src_plugins/hid_remote/proto.o: ../src_plugins/hid_remote/proto.c \ @@ -1810,7 +1811,8 @@ obj_rat.h library.h rats_patch.h board.h font.h box.h math_helper.h \ move.h misc_util.h ../src_plugins/import_hyp/hyp_l.h \ ../src_plugins/import_hyp/hyp_y.h error.h pcb-printf.h \ - ../src_3rd/genvector/gds_char.h + ../src_3rd/genvector/gds_char.h obj_all.h flag_str.h layer.h data.h \ + crosshair.h vtonpoint.h hid.h error.h drc.h buffer.h ../src_plugins/import_netlist/import_netlist.o: \ ../src_plugins/import_netlist/import_netlist.c ../config.h board.h \ const.h macro.h global_typedefs.h pcb_bool.h unit.h vtroutestyle.h \ @@ -2181,7 +2183,8 @@ ../src_3rd/liblihata/lihata.h ../src_3rd/liblihata/dom.h \ ../src_3rd/liblihata/lihata.h ../src_3rd/liblihata/parser.h \ ../src_3rd/liblihata/genht/htsp.h ../src_3rd/liblihata/genht/ht.h \ - ../src_3rd/genvector/vtp0.h list_conf.h misc_util.h obj_line.h dolists.h + ../src_3rd/genvector/vtp0.h list_conf.h misc_util.h obj_line.h event.h \ + dolists.h ../src_plugins/lib_gensexpr/lib_gensexpr.o: \ ../src_plugins/lib_gensexpr/lib_gensexpr.c plugins.h ../src_plugins/lib_legacy_func/lib_legacy_func.o: \ @@ -2711,7 +2714,7 @@ ../src_plugins/vendordrill/vendor.h stub_vendor.h plugins.h \ action_helper.h hid_flags.h hid_actions.h hid_cfg.h \ ../src_plugins/vendordrill/vendor_conf.h conf.h compat_misc.h \ - compat_nls.h obj_pinvia.h ../src_3rd/liblihata/tree.h dolists.h \ + compat_nls.h obj_pinvia.h event.h ../src_3rd/liblihata/tree.h dolists.h \ ../src_plugins/vendordrill/vendor_conf_fields.h ../src_3rd/gensexpr/gsx_parse.o: ../src_3rd/gensexpr/gsx_parse.c \ ../src_3rd/gensexpr/gsx_parse.h @@ -3115,7 +3118,8 @@ ../src_3rd/liblihata/lihata.h ../src_3rd/liblihata/dom.h \ ../src_3rd/liblihata/lihata.h ../src_3rd/liblihata/parser.h \ ../src_3rd/liblihata/genht/htsp.h ../src_3rd/liblihata/genht/ht.h \ - ../src_3rd/genvector/vtp0.h list_conf.h compat_misc.h compat_nls.h + ../src_3rd/genvector/vtp0.h list_conf.h compat_misc.h compat_nls.h \ + conf_core.h event.o: event.c ../config.h event.h unit.h error.h fptr_cast.h file_act.o: file_act.c ../config.h board.h const.h macro.h \ global_typedefs.h pcb_bool.h unit.h vtroutestyle.h attrib.h \ @@ -3138,7 +3142,7 @@ data.h crosshair.h vtonpoint.h hid.h error.h drc.h buffer.h \ action_helper.h plug_io.h plug_import.h remove.h draw.h find.h search.h \ rats.h netlist.h route_style.h hid_actions.h compat_misc.h compat_nls.h \ - hid_init.h + hid_init.h layer_vis.h find.o: find.c ../config.h const.h math_helper.h conf_core.h conf.h \ global_typedefs.h pcb_bool.h unit.h pcb-printf.h \ ../src_3rd/genvector/gds_char.h ../src_3rd/genvector/genvector_impl.h \ @@ -3157,11 +3161,12 @@ polyarea.h obj_text_list.h obj_rat_list.h obj_rat.h crosshair.h \ vtonpoint.h hid.h error.h drc.h buffer.h draw.h find.h rtree.h polygon.h \ search.h rats.h netlist.h library.h route_style.h vtroutestyle.h \ - misc_util.h undo.h plug_io.h hid_actions.h compat_misc.h obj_all.h \ - find_geo.c macro.h find_lookup.c compat_nls.h board.h rats_patch.h \ - font.h box.h move.h find_drc.c obj_arc_draw.h obj_pad_draw.h \ - obj_rat_draw.h obj_line_draw.h obj_elem_draw.h obj_poly_draw.h \ - obj_pinvia_draw.h find_misc.c find_clear.c find_debug.c find_print.c + misc_util.h undo.h plug_io.h hid_actions.h compat_misc.h event.h \ + layer_vis.h obj_all.h find_geo.c macro.h find_lookup.c compat_nls.h \ + board.h rats_patch.h font.h box.h move.h find_drc.c obj_arc_draw.h \ + obj_pad_draw.h obj_rat_draw.h obj_line_draw.h obj_elem_draw.h \ + obj_poly_draw.h obj_pinvia_draw.h find_misc.c find_clear.c find_debug.c \ + find_print.c find_act.o: find_act.c ../config.h board.h const.h macro.h \ global_typedefs.h pcb_bool.h unit.h vtroutestyle.h attrib.h \ ../src_3rd/genvector/genvector_impl.h \ @@ -3230,8 +3235,8 @@ data.h crosshair.h vtonpoint.h hid.h error.h drc.h buffer.h \ action_helper.h undo.h funchash_core.h funchash.h funchash_core_list.h \ draw.h search.h rats.h netlist.h route_style.h find.h stub_stroke.h \ - hid_actions.h hid_init.h compat_nls.h event.h obj_elem_draw.h \ - obj_pinvia_draw.h obj_pad_draw.h + hid_actions.h hid_init.h compat_nls.h event.h layer_vis.h \ + obj_elem_draw.h obj_pinvia_draw.h obj_pad_draw.h heap.o: heap.c ../config.h heap.h hid_actions.o: hid_actions.c ../config.h conf_core.h conf.h \ global_typedefs.h pcb_bool.h unit.h pcb-printf.h \ @@ -3345,7 +3350,16 @@ ../src_3rd/genlist/gentdlist_undef.h ../src_3rd/genlist/gentdlist_impl.h \ ../src_3rd/genlist/gendlist.h globalconst.h compat_misc.h fptr_cast.h hid_nogui.o: hid_nogui.c ../config.h hid.h error.h drc.h unit.h \ - global_typedefs.h pcb_bool.h attrib.h compat_misc.h compat_nls.h + global_typedefs.h pcb_bool.h attrib.h compat_misc.h compat_nls.h \ + conf_core.h conf.h pcb-printf.h ../src_3rd/genvector/gds_char.h \ + ../src_3rd/genvector/genvector_impl.h \ + ../src_3rd/genvector/genvector_undef.h ../src_3rd/liblihata/lihata.h \ + ../src_3rd/liblihata/dom.h ../src_3rd/liblihata/lihata.h \ + ../src_3rd/liblihata/parser.h ../src_3rd/liblihata/genht/htsp.h \ + ../src_3rd/liblihata/genht/ht.h ../src_3rd/liblihata/genht/ht_inlines.h \ + ../src_3rd/genvector/vtp0.h list_conf.h \ + ../src_3rd/genlist/gentdlist_undef.h ../src_3rd/genlist/gentdlist_impl.h \ + ../src_3rd/genlist/gendlist.h globalconst.h ht_element.o: ht_element.c ../config.h obj_elem_list.h obj_elem.h \ obj_common.h ../src_3rd/liblihata/genht/hash.h \ ../src_3rd/genlist/gendlist.h flag.h globalconst.h attrib.h \ @@ -3398,7 +3412,27 @@ ../src_3rd/liblihata/lihata.h ../src_3rd/liblihata/parser.h \ ../src_3rd/liblihata/genht/htsp.h ../src_3rd/liblihata/genht/ht.h \ ../src_3rd/genvector/vtp0.h list_conf.h hid_actions.h compat_misc.h \ - undo.h + undo.h event.h +layer_vis.o: layer_vis.c ../config.h board.h const.h macro.h \ + global_typedefs.h pcb_bool.h unit.h vtroutestyle.h attrib.h \ + ../src_3rd/genvector/genvector_impl.h \ + ../src_3rd/genvector/genvector_undef.h layer.h globalconst.h \ + obj_all_list.h obj_arc_list.h obj_common.h \ + ../src_3rd/liblihata/genht/hash.h ../src_3rd/genlist/gendlist.h flag.h \ + obj_arc.h ../src_3rd/genlist/gentdlist_impl.h \ + ../src_3rd/genlist/gendlist.h ../src_3rd/genlist/gentdlist_undef.h \ + obj_elem_list.h obj_elem.h obj_line_list.h obj_line.h obj_pad_list.h \ + obj_pad.h obj_pinvia_list.h obj_pinvia.h obj_text.h ht_element.h \ + ../src_3rd/liblihata/genht/ht.h ../src_3rd/liblihata/genht/ht_inlines.h \ + obj_poly_list.h obj_poly.h polyarea.h obj_text_list.h obj_rat_list.h \ + obj_rat.h library.h rats_patch.h font.h box.h math_helper.h move.h \ + misc_util.h data.h crosshair.h vtonpoint.h hid.h error.h drc.h buffer.h \ + conf_core.h conf.h pcb-printf.h ../src_3rd/genvector/gds_char.h \ + ../src_3rd/liblihata/lihata.h ../src_3rd/liblihata/dom.h \ + ../src_3rd/liblihata/lihata.h ../src_3rd/liblihata/parser.h \ + ../src_3rd/liblihata/genht/htsp.h ../src_3rd/liblihata/genht/ht.h \ + ../src_3rd/genvector/vtp0.h list_conf.h layer_vis.h event.h \ + compat_misc.h library.o: library.c ../config.h library.h global_typedefs.h pcb_bool.h \ unit.h macro.h compat_misc.h list_conf.o: list_conf.c conf.h ../config.h global_typedefs.h pcb_bool.h \ @@ -3432,8 +3466,8 @@ buffer.h crosshair.h vtonpoint.h hid.h drc.h compat_lrealpath.h \ free_atexit.h polygon.h rtree.h buildin.h build_run.h flag_str.h \ plugins.h plug_footprint.h vtlibrary.h event.h funchash.h conf_core.h \ - hid_actions.h hid_init.h compat_misc.h compat_nls.h dolists.h \ - generated_lists.h + vtptr.h layer_vis.h hid_actions.h hid_init.h compat_misc.h compat_nls.h \ + dolists.h generated_lists.h main_act.o: main_act.c ../config.h hid_actions.h hid.h error.h drc.h \ unit.h global_typedefs.h pcb_bool.h attrib.h hid_init.h conf_core.h \ conf.h pcb-printf.h ../src_3rd/genvector/gds_char.h \ @@ -3489,7 +3523,7 @@ ../src_3rd/liblihata/parser.h ../src_3rd/liblihata/genht/htsp.h \ ../src_3rd/liblihata/genht/ht.h ../src_3rd/genvector/vtp0.h list_conf.h \ find.h rats.h netlist.h route_style.h hid_actions.h hid.h drc.h \ - compat_misc.h + compat_misc.h event.h netlist_act.o: netlist_act.c ../config.h ../src_3rd/genregex/regex_sei.h \ ../src_3rd/genregex/regex_templ.h ../src_3rd/genregex/regex.h \ action_helper.h global_typedefs.h pcb_bool.h unit.h data.h globalconst.h \ @@ -3804,7 +3838,7 @@ vtroutestyle.h library.h rats_patch.h font.h box.h math_helper.h move.h \ misc_util.h action_helper.h change.h undo.h event.h funchash_core.h \ funchash.h funchash_core_list.h search.h rats.h netlist.h route_style.h \ - draw.h copy.h remove.h compat_misc.h compat_nls.h + draw.h copy.h remove.h compat_misc.h compat_nls.h layer_vis.h paths.o: paths.c ../config.h paths.h ../src_3rd/genvector/gds_char.h \ ../src_3rd/genvector/genvector_impl.h \ ../src_3rd/genvector/genvector_undef.h error.h conf_core.h conf.h \ @@ -3866,7 +3900,7 @@ vtonpoint.h hid.h error.h drc.h buffer.h plug_io.h library.h remove.h \ paths.h rats_patch.h board.h const.h macro.h vtroutestyle.h font.h box.h \ math_helper.h move.h misc_util.h hid_actions.h hid_flags.h plugins.h \ - event.h compat_misc.h route_style.h compat_fs.h compat_nls.h \ + event.h compat_misc.h route_style.h compat_fs.h compat_nls.h layer_vis.h \ compat_inc.h plugins.o: plugins.c plugins.h ../config.h \ ../src_3rd/genvector/gds_char.h ../src_3rd/genvector/genvector_impl.h \ Index: trunk/src/Makefile.in =================================================================== --- trunk/src/Makefile.in (revision 5486) +++ trunk/src/Makefile.in (revision 5487) @@ -68,6 +68,7 @@ insert.o intersect.o layer.o + layer_vis.o library.o list_conf.o main.o Index: trunk/src/file_act.c =================================================================== --- trunk/src/file_act.c (revision 5486) +++ trunk/src/file_act.c (revision 5487) @@ -41,6 +41,7 @@ #include "compat_misc.h" #include "compat_nls.h" #include "hid_init.h" +#include "layer_vis.h" /* ---------------------------------------------------------------- */ static const char pcb_acts_ExecCommand[] = "ExecCommand(command)"; Index: trunk/src/find.c =================================================================== --- trunk/src/find.c (revision 5486) +++ trunk/src/find.c (revision 5487) @@ -76,6 +76,7 @@ #include "compat_misc.h" #include "layer.h" #include "event.h" +#include "layer_vis.h" #include "obj_all.h" Index: trunk/src/gui_act.c =================================================================== --- trunk/src/gui_act.c (revision 5486) +++ trunk/src/gui_act.c (revision 5487) @@ -42,6 +42,7 @@ #include "hid_init.h" #include "compat_nls.h" #include "event.h" +#include "layer_vis.h" #include "obj_elem_draw.h" #include "obj_pinvia_draw.h" Index: trunk/src/layer.c =================================================================== --- trunk/src/layer.c (revision 5486) +++ trunk/src/layer.c (revision 5487) @@ -83,19 +83,6 @@ #define PCB_LAYER_VIRT_MAX (PCB_LYT_VIRTUAL + 11) -/* - * Used by SaveStackAndVisibility() and - * RestoreStackAndVisibility() - */ - -static struct { - pcb_bool ElementOn, InvisibleObjectsOn, PinOn, ViaOn, RatOn; - int pcb_layer_stack[PCB_MAX_LAYER]; - pcb_bool LayerOn[PCB_MAX_LAYER]; - int cnt; -} SavedStack; - - pcb_bool pcb_layer_is_empty_(pcb_layer_t *layer) { return PCB_LAYER_IS_EMPTY(layer); @@ -209,161 +196,6 @@ return -1; } -/* --------------------------------------------------------------------------- - * move layer (number is passed in) to top of layerstack - */ -static void PushOnTopOfLayerStack(int NewTop) -{ - int i; - - /* ignore silk layers */ - if (NewTop < pcb_max_copper_layer) { - /* first find position of passed one */ - for (i = 0; i < pcb_max_copper_layer; i++) - if (pcb_layer_stack[i] == NewTop) - break; - - /* bring this element to the top of the stack */ - for (; i; i--) - pcb_layer_stack[i] = pcb_layer_stack[i - 1]; - pcb_layer_stack[0] = NewTop; - } -} - - -/* ---------------------------------------------------------------------- - * changes the visibility of all layers in a group - * returns the number of changed layers - */ -int ChangeGroupVisibility(int Layer, pcb_bool On, pcb_bool ChangeStackOrder) -{ - int group, i, changed = 1; /* at least the current layer changes */ - - /* Warning: these special case values must agree with what gui-top-window.c - | thinks the are. - */ - - if (conf_core.rc.verbose) - printf("ChangeGroupVisibility(Layer=%d, On=%d, ChangeStackOrder=%d)\n", Layer, On, ChangeStackOrder); - - /* decrement 'i' to keep stack in order of layergroup */ - if ((group = pcb_layer_get_group(Layer)) >= 0) { - for (i = PCB->LayerGroups.Number[group]; i;) { - int layer = PCB->LayerGroups.Entries[group][--i]; - - /* don't count the passed member of the group */ - if (layer != Layer && layer < pcb_max_copper_layer) { - PCB->Data->Layer[layer].On = On; - - /* push layer on top of stack if switched on */ - if (On && ChangeStackOrder) - PushOnTopOfLayerStack(layer); - changed++; - } - } - } - - /* change at least the passed layer */ - PCB->Data->Layer[Layer].On = On; - if (On && ChangeStackOrder) - PushOnTopOfLayerStack(Layer); - - /* update control panel and exit */ - pcb_event(PCB_EVENT_LAYERS_CHANGED, NULL); - return (changed); -} - -/* ---------------------------------------------------------------------- - * Given a string description of a layer stack, adjust the layer stack - * to correspond. -*/ - -void LayerStringToLayerStack(const char *layer_string) -{ - static int listed_layers = 0; - int l = strlen(layer_string); - char **args; - int i, argn, lno; - int prev_sep = 1; - char *s; - - s = pcb_strdup(layer_string); - args = (char **) malloc(l * sizeof(char *)); - argn = 0; - - for (i = 0; i < l; i++) { - switch (s[i]) { - case ' ': - case '\t': - case ',': - case ';': - case ':': - prev_sep = 1; - s[i] = '\0'; - break; - default: - if (prev_sep) - args[argn++] = s + i; - prev_sep = 0; - break; - } - } - - for (i = 0; i < pcb_max_copper_layer + 2; i++) { - if (i < pcb_max_copper_layer) - pcb_layer_stack[i] = i; - PCB->Data->Layer[i].On = pcb_false; - } - PCB->ElementOn = pcb_false; - PCB->InvisibleObjectsOn = pcb_false; - PCB->PinOn = pcb_false; - PCB->ViaOn = pcb_false; - PCB->RatOn = pcb_false; - - conf_set_editor(show_mask, 0); - conf_set_editor(show_solder_side, 0); - - for (i = argn - 1; i >= 0; i--) { - if (strcasecmp(args[i], "rats") == 0) - PCB->RatOn = pcb_true; - else if (strcasecmp(args[i], "invisible") == 0) - PCB->InvisibleObjectsOn = pcb_true; - else if (strcasecmp(args[i], "pins") == 0) - PCB->PinOn = pcb_true; - else if (strcasecmp(args[i], "vias") == 0) - PCB->ViaOn = pcb_true; - else if (strcasecmp(args[i], "elements") == 0 || strcasecmp(args[i], "silk") == 0) - PCB->ElementOn = pcb_true; - else if (strcasecmp(args[i], "mask") == 0) - conf_set_editor(show_mask, 1); - else if (strcasecmp(args[i], "solderside") == 0) - conf_set_editor(show_solder_side, 1); - else if (isdigit((int) args[i][0])) { - lno = atoi(args[i]); - ChangeGroupVisibility(lno, pcb_true, pcb_true); - } - else { - int found = 0; - for (lno = 0; lno < pcb_max_copper_layer; lno++) - if (strcasecmp(args[i], PCB->Data->Layer[lno].Name) == 0) { - ChangeGroupVisibility(lno, pcb_true, pcb_true); - found = 1; - break; - } - if (!found) { - fprintf(stderr, "Warning: layer \"%s\" not known\n", args[i]); - if (!listed_layers) { - fprintf(stderr, "Named layers in this board are:\n"); - listed_layers = 1; - for (lno = 0; lno < pcb_max_copper_layer; lno++) - fprintf(stderr, "\t%s\n", PCB->Data->Layer[lno].Name); - fprintf(stderr, "Also: component, solder, rats, invisible, pins, vias, elements or silk, mask, solderside.\n"); - } - } - } - } -} - pcb_layergrp_id_t pcb_layer_get_group(pcb_layer_id_t Layer) { pcb_layergrp_id_t group, i; @@ -387,91 +219,6 @@ return pcb_layer_get_group(pcb_layer_id(PCB->Data, Layer)); } -/* --------------------------------------------------------------------------- - * resets the layerstack setting - */ -void ResetStackAndVisibility(void) -{ - int comp_group; - pcb_cardinal_t i; - - assert(PCB->Data->LayerN <= PCB_MAX_LAYER); - for (i = 0; i < pcb_max_copper_layer + 2; i++) { - if (i < pcb_max_copper_layer) - pcb_layer_stack[i] = i; - PCB->Data->Layer[i].On = pcb_true; - } - PCB->ElementOn = pcb_true; - PCB->InvisibleObjectsOn = pcb_true; - PCB->PinOn = pcb_true; - PCB->ViaOn = pcb_true; - PCB->RatOn = pcb_true; - - /* Bring the component group to the front and make it active. */ - comp_group = pcb_layer_get_group(pcb_component_silk_layer); - ChangeGroupVisibility(PCB->LayerGroups.Entries[comp_group][0], 1, 1); -} - -/* --------------------------------------------------------------------------- - * saves the layerstack setting - */ -void SaveStackAndVisibility(void) -{ - pcb_cardinal_t i; - static pcb_bool run = pcb_false; - - if (run == pcb_false) { - SavedStack.cnt = 0; - run = pcb_true; - } - - if (SavedStack.cnt != 0) { - fprintf(stderr, - "SaveStackAndVisibility() layerstack was already saved and not" "yet restored. cnt = %d\n", SavedStack.cnt); - } - - for (i = 0; i < pcb_max_copper_layer + 2; i++) { - if (i < pcb_max_copper_layer) - SavedStack.pcb_layer_stack[i] = pcb_layer_stack[i]; - SavedStack.LayerOn[i] = PCB->Data->Layer[i].On; - } - SavedStack.ElementOn = PCB->ElementOn; - SavedStack.InvisibleObjectsOn = PCB->InvisibleObjectsOn; - SavedStack.PinOn = PCB->PinOn; - SavedStack.ViaOn = PCB->ViaOn; - SavedStack.RatOn = PCB->RatOn; - SavedStack.cnt++; -} - -/* --------------------------------------------------------------------------- - * restores the layerstack setting - */ -void RestoreStackAndVisibility(void) -{ - pcb_cardinal_t i; - - if (SavedStack.cnt == 0) { - fprintf(stderr, "RestoreStackAndVisibility() layerstack has not" " been saved. cnt = %d\n", SavedStack.cnt); - return; - } - else if (SavedStack.cnt != 1) { - fprintf(stderr, "RestoreStackAndVisibility() layerstack save count is" " wrong. cnt = %d\n", SavedStack.cnt); - } - - for (i = 0; i < pcb_max_copper_layer + 2; i++) { - if (i < pcb_max_copper_layer) - pcb_layer_stack[i] = SavedStack.pcb_layer_stack[i]; - PCB->Data->Layer[i].On = SavedStack.LayerOn[i]; - } - PCB->ElementOn = SavedStack.ElementOn; - PCB->InvisibleObjectsOn = SavedStack.InvisibleObjectsOn; - PCB->PinOn = SavedStack.PinOn; - PCB->ViaOn = SavedStack.ViaOn; - PCB->RatOn = SavedStack.RatOn; - - SavedStack.cnt--; -} - pcb_bool pcb_layer_is_paste_empty(pcb_side_t side) { pcb_bool paste_empty = pcb_true; Index: trunk/src/layer.h =================================================================== --- trunk/src/layer.h (revision 5486) +++ trunk/src/layer.h (revision 5487) @@ -83,14 +83,6 @@ /************ OLD API - new code should not use these **************/ -int ChangeGroupVisibility(int, pcb_bool, pcb_bool); -void LayerStringToLayerStack(const char *); - -void ResetStackAndVisibility(void); -void SaveStackAndVisibility(void); -void RestoreStackAndVisibility(void); - - #define LAYER_ON_STACK(n) (&PCB->Data->Layer[pcb_layer_stack[(n)]]) #define LAYER_PTR(n) (&PCB->Data->Layer[(n)]) #define CURRENT (PCB->SilkActive ? &PCB->Data->Layer[ \ Index: trunk/src/layer_vis.c =================================================================== --- trunk/src/layer_vis.c (nonexistent) +++ trunk/src/layer_vis.c (revision 5487) @@ -0,0 +1,289 @@ +/* + * COPYRIGHT + * + * PCB, interactive printed circuit board design + * Copyright (C) 1994,1995,1996,2004,2006 Thomas Nau + * Copyright (C) 2016 Tibor 'Igor2' Palinkas (pcb-rnd extensions) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Contact addresses for paper mail and Email: + * Thomas Nau, Schlehenweg 15, 88471 Baustetten, Germany + * Thomas.Nau@rz.uni-ulm.de + * + */ + +/* Layer visibility logics (affects the GUI and some exporters) */ + +#include "config.h" +#include "board.h" +#include "data.h" +#include "conf_core.h" +#include "layer.h" +#include "layer_vis.h" +#include "event.h" +#include "compat_misc.h" + +/* + * Used by SaveStackAndVisibility() and + * RestoreStackAndVisibility() + */ +static struct { + pcb_bool ElementOn, InvisibleObjectsOn, PinOn, ViaOn, RatOn; + int pcb_layer_stack[PCB_MAX_LAYER]; + pcb_bool LayerOn[PCB_MAX_LAYER]; + int cnt; +} SavedStack; + + +/* ---------------------------------------------------------------------- + * Given a string description of a layer stack, adjust the layer stack + * to correspond. +*/ + +void LayerStringToLayerStack(const char *layer_string) +{ + static int listed_layers = 0; + int l = strlen(layer_string); + char **args; + int i, argn, lno; + int prev_sep = 1; + char *s; + + s = pcb_strdup(layer_string); + args = (char **) malloc(l * sizeof(char *)); + argn = 0; + + for (i = 0; i < l; i++) { + switch (s[i]) { + case ' ': + case '\t': + case ',': + case ';': + case ':': + prev_sep = 1; + s[i] = '\0'; + break; + default: + if (prev_sep) + args[argn++] = s + i; + prev_sep = 0; + break; + } + } + + for (i = 0; i < pcb_max_copper_layer + 2; i++) { + if (i < pcb_max_copper_layer) + pcb_layer_stack[i] = i; + PCB->Data->Layer[i].On = pcb_false; + } + PCB->ElementOn = pcb_false; + PCB->InvisibleObjectsOn = pcb_false; + PCB->PinOn = pcb_false; + PCB->ViaOn = pcb_false; + PCB->RatOn = pcb_false; + + conf_set_editor(show_mask, 0); + conf_set_editor(show_solder_side, 0); + + for (i = argn - 1; i >= 0; i--) { + if (strcasecmp(args[i], "rats") == 0) + PCB->RatOn = pcb_true; + else if (strcasecmp(args[i], "invisible") == 0) + PCB->InvisibleObjectsOn = pcb_true; + else if (strcasecmp(args[i], "pins") == 0) + PCB->PinOn = pcb_true; + else if (strcasecmp(args[i], "vias") == 0) + PCB->ViaOn = pcb_true; + else if (strcasecmp(args[i], "elements") == 0 || strcasecmp(args[i], "silk") == 0) + PCB->ElementOn = pcb_true; + else if (strcasecmp(args[i], "mask") == 0) + conf_set_editor(show_mask, 1); + else if (strcasecmp(args[i], "solderside") == 0) + conf_set_editor(show_solder_side, 1); + else if (isdigit((int) args[i][0])) { + lno = atoi(args[i]); + ChangeGroupVisibility(lno, pcb_true, pcb_true); + } + else { + int found = 0; + for (lno = 0; lno < pcb_max_copper_layer; lno++) + if (strcasecmp(args[i], PCB->Data->Layer[lno].Name) == 0) { + ChangeGroupVisibility(lno, pcb_true, pcb_true); + found = 1; + break; + } + if (!found) { + fprintf(stderr, "Warning: layer \"%s\" not known\n", args[i]); + if (!listed_layers) { + fprintf(stderr, "Named layers in this board are:\n"); + listed_layers = 1; + for (lno = 0; lno < pcb_max_copper_layer; lno++) + fprintf(stderr, "\t%s\n", PCB->Data->Layer[lno].Name); + fprintf(stderr, "Also: component, solder, rats, invisible, pins, vias, elements or silk, mask, solderside.\n"); + } + } + } + } +} + +/* --------------------------------------------------------------------------- + * move layer (number is passed in) to top of layerstack + */ +static void PushOnTopOfLayerStack(int NewTop) +{ + int i; + + /* ignore silk layers */ + if (NewTop < pcb_max_copper_layer) { + /* first find position of passed one */ + for (i = 0; i < pcb_max_copper_layer; i++) + if (pcb_layer_stack[i] == NewTop) + break; + + /* bring this element to the top of the stack */ + for (; i; i--) + pcb_layer_stack[i] = pcb_layer_stack[i - 1]; + pcb_layer_stack[0] = NewTop; + } +} + + +/* ---------------------------------------------------------------------- + * changes the visibility of all layers in a group + * returns the number of changed layers + */ +int ChangeGroupVisibility(int Layer, pcb_bool On, pcb_bool ChangeStackOrder) +{ + int group, i, changed = 1; /* at least the current layer changes */ + + /* Warning: these special case values must agree with what gui-top-window.c + | thinks the are. + */ + + if (conf_core.rc.verbose) + printf("ChangeGroupVisibility(Layer=%d, On=%d, ChangeStackOrder=%d)\n", Layer, On, ChangeStackOrder); + + /* decrement 'i' to keep stack in order of layergroup */ + if ((group = pcb_layer_get_group(Layer)) >= 0) { + for (i = PCB->LayerGroups.Number[group]; i;) { + int layer = PCB->LayerGroups.Entries[group][--i]; + + /* don't count the passed member of the group */ + if (layer != Layer && layer < pcb_max_copper_layer) { + PCB->Data->Layer[layer].On = On; + + /* push layer on top of stack if switched on */ + if (On && ChangeStackOrder) + PushOnTopOfLayerStack(layer); + changed++; + } + } + } + + /* change at least the passed layer */ + PCB->Data->Layer[Layer].On = On; + if (On && ChangeStackOrder) + PushOnTopOfLayerStack(Layer); + + /* update control panel and exit */ + pcb_event(PCB_EVENT_LAYERS_CHANGED, NULL); + return (changed); +} + +/* --------------------------------------------------------------------------- + * resets the layerstack setting + */ +void ResetStackAndVisibility(void) +{ + int comp_group; + pcb_cardinal_t i; + + assert(PCB->Data->LayerN <= PCB_MAX_LAYER); + for (i = 0; i < pcb_max_copper_layer + 2; i++) { + if (i < pcb_max_copper_layer) + pcb_layer_stack[i] = i; + PCB->Data->Layer[i].On = pcb_true; + } + PCB->ElementOn = pcb_true; + PCB->InvisibleObjectsOn = pcb_true; + PCB->PinOn = pcb_true; + PCB->ViaOn = pcb_true; + PCB->RatOn = pcb_true; + + /* Bring the component group to the front and make it active. */ + comp_group = pcb_layer_get_group(pcb_component_silk_layer); + ChangeGroupVisibility(PCB->LayerGroups.Entries[comp_group][0], 1, 1); +} + +/* --------------------------------------------------------------------------- + * saves the layerstack setting + */ +void SaveStackAndVisibility(void) +{ + pcb_cardinal_t i; + static pcb_bool run = pcb_false; + + if (run == pcb_false) { + SavedStack.cnt = 0; + run = pcb_true; + } + + if (SavedStack.cnt != 0) { + fprintf(stderr, + "SaveStackAndVisibility() layerstack was already saved and not" "yet restored. cnt = %d\n", SavedStack.cnt); + } + + for (i = 0; i < pcb_max_copper_layer + 2; i++) { + if (i < pcb_max_copper_layer) + SavedStack.pcb_layer_stack[i] = pcb_layer_stack[i]; + SavedStack.LayerOn[i] = PCB->Data->Layer[i].On; + } + SavedStack.ElementOn = PCB->ElementOn; + SavedStack.InvisibleObjectsOn = PCB->InvisibleObjectsOn; + SavedStack.PinOn = PCB->PinOn; + SavedStack.ViaOn = PCB->ViaOn; + SavedStack.RatOn = PCB->RatOn; + SavedStack.cnt++; +} + +/* --------------------------------------------------------------------------- + * restores the layerstack setting + */ +void RestoreStackAndVisibility(void) +{ + pcb_cardinal_t i; + + if (SavedStack.cnt == 0) { + fprintf(stderr, "RestoreStackAndVisibility() layerstack has not" " been saved. cnt = %d\n", SavedStack.cnt); + return; + } + else if (SavedStack.cnt != 1) { + fprintf(stderr, "RestoreStackAndVisibility() layerstack save count is" " wrong. cnt = %d\n", SavedStack.cnt); + } + + for (i = 0; i < pcb_max_copper_layer + 2; i++) { + if (i < pcb_max_copper_layer) + pcb_layer_stack[i] = SavedStack.pcb_layer_stack[i]; + PCB->Data->Layer[i].On = SavedStack.LayerOn[i]; + } + PCB->ElementOn = SavedStack.ElementOn; + PCB->InvisibleObjectsOn = SavedStack.InvisibleObjectsOn; + PCB->PinOn = SavedStack.PinOn; + PCB->ViaOn = SavedStack.ViaOn; + PCB->RatOn = SavedStack.RatOn; + + SavedStack.cnt--; +} Index: trunk/src/main.c =================================================================== --- trunk/src/main.c (revision 5486) +++ trunk/src/main.c (revision 5487) @@ -54,6 +54,7 @@ #include "conf.h" #include "conf_core.h" #include "vtptr.h" +#include "layer_vis.h" #include "hid_actions.h" #include "hid_init.h" Index: trunk/src/object_act.c =================================================================== --- trunk/src/object_act.c (revision 5486) +++ trunk/src/object_act.c (revision 5487) @@ -42,6 +42,7 @@ #include "remove.h" #include "compat_misc.h" #include "compat_nls.h" +#include "layer_vis.h" /* --------------------------------------------------------------------------- */ Index: trunk/src/plug_io.c =================================================================== --- trunk/src/plug_io.c (revision 5486) +++ trunk/src/plug_io.c (revision 5487) @@ -63,6 +63,7 @@ #include "route_style.h" #include "compat_fs.h" #include "compat_nls.h" +#include "layer_vis.h" /* for opendir */ #include "compat_inc.h" Index: trunk/src_plugins/gpmi/pcb-gpmi/gpmi_plugin/gpmi_pkg/layout/layers.c =================================================================== --- trunk/src_plugins/gpmi/pcb-gpmi/gpmi_plugin/gpmi_pkg/layout/layers.c (revision 5486) +++ trunk/src_plugins/gpmi/pcb-gpmi/gpmi_plugin/gpmi_pkg/layout/layers.c (revision 5487) @@ -6,6 +6,7 @@ #include "src/draw.h" #include "src/conf_core.h" #include "src/layer.h" +#include "src/layer_vis.h" #define layer_check(layer) \ if ((layer < 0) || (layer >= PCB_MAX_LAYER+2)) \ Index: trunk/src_plugins/hid_gtk/gtkhid-main.c =================================================================== --- trunk/src_plugins/hid_gtk/gtkhid-main.c (revision 5486) +++ trunk/src_plugins/hid_gtk/gtkhid-main.c (revision 5487) @@ -26,6 +26,7 @@ #include "layer.h" #include "ghid-search.h" #include "compat_nls.h" +#include "layer_vis.h" #include "gtkhid.h" Index: trunk/src_plugins/hid_gtk/gui-drc-window.c =================================================================== --- trunk/src_plugins/hid_gtk/gui-drc-window.c (revision 5486) +++ trunk/src_plugins/hid_gtk/gui-drc-window.c (revision 5487) @@ -45,6 +45,7 @@ #include "obj_line_draw.h" #include "obj_arc_draw.h" #include "obj_poly_draw.h" +#include "layer_vis.h" #define VIOLATION_PIXMAP_PIXEL_SIZE 100 Index: trunk/src_plugins/hid_gtk/gui-top-window.c =================================================================== --- trunk/src_plugins/hid_gtk/gui-top-window.c (revision 5486) +++ trunk/src_plugins/hid_gtk/gui-top-window.c (revision 5487) @@ -93,6 +93,7 @@ #include "route_style.h" #include "compat_nls.h" #include "obj_line.h" +#include "layer_vis.h" static pcb_bool ignore_layer_update; Index: trunk/src_plugins/hid_lesstif/main.c =================================================================== --- trunk/src_plugins/hid_lesstif/main.c (revision 5486) +++ trunk/src_plugins/hid_lesstif/main.c (revision 5487) @@ -46,6 +46,7 @@ #include "misc_util.h" #include "compat_misc.h" #include "compat_nls.h" +#include "layer_vis.h" #include Index: trunk/src_plugins/hid_lesstif/menu.c =================================================================== --- trunk/src_plugins/hid_lesstif/menu.c (revision 5486) +++ trunk/src_plugins/hid_lesstif/menu.c (revision 5487) @@ -25,6 +25,7 @@ #include "stdarg.h" #include "event.h" #include "compat_misc.h" +#include "layer_vis.h" #include Widget lesstif_menubar;