Index: trunk/src/conf_act.c =================================================================== --- trunk/src/conf_act.c (revision 34411) +++ trunk/src/conf_act.c (revision 34412) @@ -42,7 +42,7 @@ fgw_error_t pcb_act_GetStyle(fgw_arg_t *res, int argc, fgw_arg_t *argv) { pcb_board_t *pcb = PCB_ACT_BOARD; - RND_ACT_IRES(pcb_route_style_lookup(&pcb->RouteStyle, conf_core.design.line_thickness, conf_core.design.via_thickness, conf_core.design.via_drilling_hole, conf_core.design.clearance, NULL)); + RND_ACT_IRES(PCB_LOOKUP_ROUTE_STYLE_PEN(pcb)); return 0; } Index: trunk/src/gui_act.c =================================================================== --- trunk/src/gui_act.c (revision 34411) +++ trunk/src/gui_act.c (revision 34412) @@ -65,6 +65,8 @@ #include "route_style.h" #include "tool_logic.h" +#include "brave.h" + #define CLONE_TYPES PCB_OBJ_LINE | PCB_OBJ_ARC | PCB_OBJ_POLY /* --------------------------------------------------------------------------- */ @@ -547,7 +549,7 @@ } } else - number = pcb_route_style_lookup(&PCB->RouteStyle, conf_core.design.line_thickness, conf_core.design.via_thickness, conf_core.design.via_drilling_hole, conf_core.design.clearance, NULL)+1; + number = PCB_LOOKUP_ROUTE_STYLE_PEN(PCB)+1; if ((number <= 0) || (number > vtroutestyle_len(&PCB->RouteStyle))) { rnd_message(RND_MSG_ERROR, "RouteStyle: invalid route style name or index\n"); @@ -651,17 +653,22 @@ static const char pcb_acts_SetSame[] = "SetSame()"; static const char pcb_acth_SetSame[] = "Sets current layer and sizes to match indicated item."; /* DOC: setsame.html */ -static void set_same_(rnd_coord_t Thick, rnd_coord_t Diameter, rnd_coord_t Hole, rnd_coord_t Clearance, char *Name) +static void set_same_(rnd_coord_t Thick, rnd_coord_t textt, int texts, pcb_font_id_t fid, rnd_coord_t Diameter, rnd_coord_t Hole, rnd_coord_t Clearance, rnd_cardinal_t via_proto, char *Name) { int known; - known = pcb_route_style_lookup(&PCB->RouteStyle, Thick, Diameter, Hole, Clearance, Name); + known = pcb_route_style_lookup(&PCB->RouteStyle, Thick, textt, texts, fid, Diameter, Hole, Clearance, via_proto, Name); if (known < 0) { /* unknown style, set properties */ if (Thick != -1) { pcb_custom_route_style.Thick = Thick; rnd_conf_set_design("design/line_thickness", "%$mS", Thick); } if (Clearance != -1) { pcb_custom_route_style.Clearance = Clearance; rnd_conf_set_design("design/clearance", "%$mS", Clearance); } -TODO("pstk #21:"); - if (Diameter != -1) { pcb_custom_route_style.Diameter = Diameter; rnd_conf_set_design("design/via_thickness", "%$mS", Diameter); } - if (Hole != -1) { pcb_custom_route_style.Hole = Hole; rnd_conf_set_design("design/via_drilling_hole", "%$mS", Hole); } + if (pcb_brave & PCB_BRAVE_LIHATA_V8) { + TODO("pstk #21: implement the new version"); + } + else { + TODO("pstk #21: remove this branch"); + if (Diameter != -1) { pcb_custom_route_style.Diameter = Diameter; rnd_conf_set_design("design/via_thickness", "%$mS", Diameter); } + if (Hole != -1) { pcb_custom_route_style.Hole = Hole; rnd_conf_set_design("design/via_drilling_hole", "%$mS", Hole); } + } PCB->pen_attr = NULL; } else @@ -682,7 +689,7 @@ switch (type) { case PCB_OBJ_LINE: rnd_hid_notify_crosshair_change(RND_ACT_HIDLIB, rnd_false); - set_same_(((pcb_line_t *) ptr2)->Thickness, -1, -1, ((pcb_line_t *) ptr2)->Clearance / 2, NULL); + set_same_(((pcb_line_t *) ptr2)->Thickness, -1, -1, -1, -1, -1, ((pcb_line_t *) ptr2)->Clearance / 2, -1, NULL); layer = (pcb_layer_t *) ptr1; if (rnd_conf.editor.mode != pcb_crosshair.tool_line) rnd_tool_select_by_name(RND_ACT_HIDLIB, "line"); @@ -692,7 +699,7 @@ case PCB_OBJ_ARC: rnd_hid_notify_crosshair_change(RND_ACT_HIDLIB, rnd_false); - set_same_(((pcb_arc_t *) ptr2)->Thickness, -1, -1, ((pcb_arc_t *) ptr2)->Clearance / 2, NULL); + set_same_(((pcb_arc_t *) ptr2)->Thickness, -1, -1, -1, -1, -1, ((pcb_arc_t *) ptr2)->Clearance / 2, -1, NULL); layer = (pcb_layer_t *) ptr1; if (rnd_conf.editor.mode != pcb_crosshair.tool_arc) rnd_tool_select_by_name(RND_ACT_HIDLIB, "arc"); @@ -1500,7 +1507,7 @@ if (rst == NULL) RND_ACT_IRES(-1); else - RND_ACT_IRES(pcb_route_style_match(rst, conf_core.design.line_thickness, conf_core.design.via_thickness, conf_core.design.via_drilling_hole, conf_core.design.clearance, NULL)); + RND_ACT_IRES(PCB_MATCH_ROUTE_STYLE_PEN(rst)); return 0; } Index: trunk/src/route_style.c =================================================================== --- trunk/src/route_style.c (revision 34411) +++ trunk/src/route_style.c (revision 34412) @@ -40,6 +40,8 @@ #include "conf_core.h" #include "event.h" +#include "brave.h" + pcb_route_style_t pcb_custom_route_style; static const char rst_cookie[] = "core route style"; @@ -69,24 +71,36 @@ } #define cmp(a,b) (((a) != -1) && (coord_abs((a)-(b)) > 32)) +#define cmpi0(a,b) (((a) > 0) && ((b) > 0) && ((a) != (b))) +#define cmpi(a,b) (((a) != -1) && ((b) != -1) && ((a) != (b))) #define cmps(a,b) (((a) != NULL) && (strcmp((a), (b)) != 0)) -int pcb_route_style_match(pcb_route_style_t *rst, rnd_coord_t Thick, rnd_coord_t Diameter, rnd_coord_t Hole, rnd_coord_t Clearance, char *Name) +int pcb_route_style_match(pcb_route_style_t *rst, rnd_coord_t Thick, rnd_coord_t textt, int texts, pcb_font_id_t fid, rnd_coord_t Diameter, rnd_coord_t Hole, rnd_coord_t Clearance, rnd_cardinal_t via_proto, char *Name) { if (cmp(Thick, rst->Thick)) return 0; - if (cmp(Diameter, rst->Diameter)) return 0; - if (cmp(Hole, rst->Hole)) return 0; + if (cmp(textt, rst->textt)) return 0; + if (cmpi0(texts, rst->texts)) return 0; + if (cmpi(fid, rst->fid)) return 0; + if (!(pcb_brave & PCB_BRAVE_LIHATA_V8)) { + TODO("pstk #21: remove this branch"); + if (cmp(Diameter, rst->Diameter)) return 0; + if (cmp(Hole, rst->Hole)) return 0; + } + else + if (cmpi(via_proto, rst->via_proto)) return 0; if (cmp(Clearance, rst->Clearance)) return 0; if (cmps(Name, rst->name)) return 0; return 1; } #undef cmp +#undef cmpi +#undef cmpi0 #undef cmps -int pcb_route_style_lookup(vtroutestyle_t *styles, rnd_coord_t Thick, rnd_coord_t Diameter, rnd_coord_t Hole, rnd_coord_t Clearance, char *Name) +int pcb_route_style_lookup(vtroutestyle_t *styles, rnd_coord_t Thick, rnd_coord_t textt, int texts, pcb_font_id_t fid, rnd_coord_t Diameter, rnd_coord_t Hole, rnd_coord_t Clearance, rnd_cardinal_t via_proto, char *Name) { int n; for (n = 0; n < vtroutestyle_len(styles); n++) - if (pcb_route_style_match(&styles->array[n], Thick, Diameter, Hole, Clearance, Name)) + if (pcb_route_style_match(&styles->array[n], Thick, textt, texts, fid, Diameter, Hole, Clearance, via_proto, Name)) return n; return -1; } Index: trunk/src/route_style.h =================================================================== --- trunk/src/route_style.h (revision 34411) +++ trunk/src/route_style.h (revision 34412) @@ -39,11 +39,11 @@ /* Compare supplied parameters to each style in the vector and return the index of the first matching style. All non-(-1) parameters need to match to accept a style. Return -1 on no match. */ -int pcb_route_style_lookup(vtroutestyle_t *styles, rnd_coord_t Thick, rnd_coord_t Diameter, rnd_coord_t Hole, rnd_coord_t Clearance, char *Name); +int pcb_route_style_lookup(vtroutestyle_t *styles, rnd_coord_t Thick, rnd_coord_t textt, int texts, pcb_font_id_t fid, rnd_coord_t Diameter, rnd_coord_t Hole, rnd_coord_t Clearance, rnd_cardinal_t via_proto, char *Name); /* Return 1 if rst matches the style in supplied args. Same matching rules as in pcb_route_style_lookup(). */ -int pcb_route_style_match(pcb_route_style_t *rst, rnd_coord_t Thick, rnd_coord_t Diameter, rnd_coord_t Hole, rnd_coord_t Clearance, char *Name); +int pcb_route_style_match(pcb_route_style_t *rst, rnd_coord_t Thick, rnd_coord_t textt, int texts, pcb_font_id_t fid, rnd_coord_t Diameter, rnd_coord_t Hole, rnd_coord_t Clearance, rnd_cardinal_t via_proto, char *Name); extern pcb_route_style_t pcb_custom_route_style; @@ -51,7 +51,30 @@ size_id: 0=main size; 1=2nd size (drill); 2=clearance */ int pcb_get_style_size(int funcid, rnd_coord_t * out, int type, int size_id); +#define PCB_LOOKUP_ROUTE_STYLE_PEN(pcb) \ + pcb_route_style_lookup(&pcb->RouteStyle,\ + conf_core.design.line_thickness, \ + conf_core.design.text_thickness, \ + conf_core.design.text_scale, \ + conf_core.design.text_font_id, \ + conf_core.design.via_thickness, \ + conf_core.design.via_drilling_hole, \ + conf_core.design.clearance, \ + conf_core.design.via_proto, \ + NULL) +#define PCB_MATCH_ROUTE_STYLE_PEN(rst) \ + pcb_route_style_match(rst,\ + conf_core.design.line_thickness, \ + conf_core.design.text_thickness, \ + conf_core.design.text_scale, \ + conf_core.design.text_font_id, \ + conf_core.design.via_thickness, \ + conf_core.design.via_drilling_hole, \ + conf_core.design.clearance, \ + conf_core.design.via_proto, \ + NULL) + /*** Undoable changes to route styles ***/ /* Change a field. Returns 0 on success. */ Index: trunk/src_plugins/lib_hid_pcbui/routest.c =================================================================== --- trunk/src_plugins/lib_hid_pcbui/routest.c (revision 34411) +++ trunk/src_plugins/lib_hid_pcbui/routest.c (revision 34412) @@ -98,7 +98,7 @@ /* Update the edit dialog and all checkboxes, but nothing else on the sub */ static void rst_force_update_chk_and_dlg() { - int n, target = pcb_route_style_lookup(&PCB->RouteStyle, conf_core.design.line_thickness, conf_core.design.via_thickness, conf_core.design.via_drilling_hole, conf_core.design.clearance, NULL); + int n, target = PCB_LOOKUP_ROUTE_STYLE_PEN(PCB); rnd_hid_attr_val_t hv; idx_changed(); @@ -133,7 +133,7 @@ if (rst.sub_inited) { int n, target; - target = pcb_route_style_lookup(&PCB->RouteStyle, conf_core.design.line_thickness, conf_core.design.via_thickness, conf_core.design.via_drilling_hole, conf_core.design.clearance, NULL); + target = PCB_LOOKUP_ROUTE_STYLE_PEN(PCB); for(n = 0; n < vtroutestyle_len(&PCB->RouteStyle); n++) { rnd_hid_attr_val_t hv; @@ -172,7 +172,7 @@ static void rst_edit_cb(void *hid_ctx, void *caller_data, rnd_hid_attribute_t *attr) { - int target = pcb_route_style_lookup(&PCB->RouteStyle, conf_core.design.line_thickness, conf_core.design.via_thickness, conf_core.design.via_drilling_hole, conf_core.design.clearance, NULL); + int target = PCB_LOOKUP_ROUTE_STYLE_PEN(PCB); if (target >= 0) pcb_dlg_rstdlg(target); } @@ -186,7 +186,7 @@ static void rst_del_cb(void *hid_ctx, void *caller_data, rnd_hid_attribute_t *attr) { - int target = pcb_route_style_lookup(&PCB->RouteStyle, conf_core.design.line_thickness, conf_core.design.via_thickness, conf_core.design.via_drilling_hole, conf_core.design.clearance, NULL); + int target = PCB_LOOKUP_ROUTE_STYLE_PEN(PCB); if (target >= 0) { pcb_route_style_del(PCB, target, 1); rst_updated(NULL); Index: trunk/src_plugins/lib_hid_pcbui/routest_dlg.c =================================================================== --- trunk/src_plugins/lib_hid_pcbui/routest_dlg.c (revision 34411) +++ trunk/src_plugins/lib_hid_pcbui/routest_dlg.c (revision 34412) @@ -27,6 +27,7 @@ /* included from routest.c - split for clarity */ #include +#include "route_style.h" #include "brave.h" @@ -240,7 +241,7 @@ args[3].val.nat_long = rst->via_proto; err = rnd_actionv_bin(&PCB->hidlib, "pstklib", &res, 4, args); if ((err == 0) && (res.type == FGW_LONG)) { - pcb_font_id_t tmp = res.val.nat_long; + rnd_cardinal_t tmp = res.val.nat_long; pcb_route_style_change(PCB, rstdlg_ctx.curr, NULL, NULL, NULL, NULL, NULL, &tmp, 1); } } @@ -469,7 +470,7 @@ } if (idx < 0) { - idx = pcb_route_style_lookup(&PCB->RouteStyle, conf_core.design.line_thickness, conf_core.design.via_thickness, conf_core.design.via_drilling_hole, conf_core.design.clearance, NULL); + idx = PCB_LOOKUP_ROUTE_STYLE_PEN(PCB); if (idx < 0) { rnd_message(RND_MSG_ERROR, "No style selected\n"); RND_ACT_IRES(-1);