Index: trunk/src_plugins/propedit/propdlg.c =================================================================== --- trunk/src_plugins/propedit/propdlg.c (revision 31188) +++ trunk/src_plugins/propedit/propdlg.c (revision 31189) @@ -229,6 +229,7 @@ switch(p->type) { case PCB_PROPT_COORD: case PCB_PROPT_ANGLE: + case PCB_PROPT_DOUBLE: case PCB_PROPT_INT: if (!ctx->dlg[ctx->wabs[p->type]].val.lng) return; @@ -241,6 +242,7 @@ case PCB_PROPT_STRING: hv.str = rnd_strdup(pv->string == NULL ? "" : pv->string); break; case PCB_PROPT_COORD: hv.crd = pv->coord; break; case PCB_PROPT_ANGLE: hv.dbl = pv->angle; break; + case PCB_PROPT_DOUBLE: hv.dbl = pv->d; break; case PCB_PROPT_BOOL: case PCB_PROPT_INT: hv.lng = pv->i; break; case PCB_PROPT_COLOR: hv.clr = pv->clr; break; @@ -347,6 +349,11 @@ sctx.d_absolute = ctx->dlg[ctx->wabs[p->type]].val.lng; sctx.d_valid = 1; break; + case PCB_PROPT_DOUBLE: + sctx.d = ctx->dlg[ctx->wedit[p->type]].val.dbl; + sctx.d_absolute = ctx->dlg[ctx->wabs[p->type]].val.lng; + sctx.d_valid = 1; + break; case PCB_PROPT_INT: sctx.c = ctx->dlg[ctx->wedit[p->type]].val.lng; sctx.c_absolute = ctx->dlg[ctx->wabs[p->type]].val.lng; @@ -467,7 +474,7 @@ static void build_propval(propdlg_t *ctx) { - static const char *type_tabs[] = {"none", "string", "coord", "angle", "int", NULL}; + static const char *type_tabs[] = {"none", "string", "coord", "angle", "double", "int", NULL}; static const char *abshelp = "When unticked each apply is a relative change added to\nthe current value of each object"; RND_DAD_BEGIN_TABBED(ctx->dlg, type_tabs); @@ -528,17 +535,36 @@ RND_DAD_CHANGE_CB(ctx->dlg, prop_data_force_cb); RND_DAD_END(ctx->dlg); RND_DAD_END(ctx->dlg); + RND_DAD_BEGIN_VBOX(ctx->dlg); + RND_DAD_LABEL(ctx->dlg, "Data type: double"); + RND_DAD_REAL(ctx->dlg, ""); + ctx->wedit[4] = RND_DAD_CURRENT(ctx->dlg); + RND_DAD_MINMAX(ctx->dlg, -1000, +1000); + RND_DAD_ENTER_CB(ctx->dlg, prop_data_auto_cb); + RND_DAD_BEGIN_HBOX(ctx->dlg); + RND_DAD_LABEL(ctx->dlg, "abs"); + RND_DAD_BOOL(ctx->dlg, ""); + ctx->wabs[4] = RND_DAD_CURRENT(ctx->dlg); + RND_DAD_HELP(ctx->dlg, abshelp); + RND_DAD_BEGIN_HBOX(ctx->dlg); + RND_DAD_COMPFLAG(ctx->dlg, RND_HATF_EXPFILL); + RND_DAD_END(ctx->dlg); + RND_DAD_BUTTON(ctx->dlg, "apply"); + RND_DAD_CHANGE_CB(ctx->dlg, prop_data_force_cb); + RND_DAD_END(ctx->dlg); + RND_DAD_END(ctx->dlg); + RND_DAD_BEGIN_VBOX(ctx->dlg); RND_DAD_LABEL(ctx->dlg, "Data type: int"); RND_DAD_INTEGER(ctx->dlg, ""); - ctx->wedit[4] = RND_DAD_CURRENT(ctx->dlg); + ctx->wedit[5] = RND_DAD_CURRENT(ctx->dlg); RND_DAD_ENTER_CB(ctx->dlg, prop_data_auto_cb); RND_DAD_MINMAX(ctx->dlg, -(1<<30), 1<<30); RND_DAD_BEGIN_HBOX(ctx->dlg); RND_DAD_LABEL(ctx->dlg, "abs"); RND_DAD_BOOL(ctx->dlg, ""); - ctx->wabs[4] = RND_DAD_CURRENT(ctx->dlg); + ctx->wabs[5] = RND_DAD_CURRENT(ctx->dlg); RND_DAD_HELP(ctx->dlg, abshelp); RND_DAD_BEGIN_HBOX(ctx->dlg); RND_DAD_COMPFLAG(ctx->dlg, RND_HATF_EXPFILL); @@ -551,9 +577,9 @@ RND_DAD_BEGIN_VBOX(ctx->dlg); RND_DAD_LABEL(ctx->dlg, "Data type: boolean"); RND_DAD_BOOL(ctx->dlg, ""); - ctx->wedit[5] = RND_DAD_CURRENT(ctx->dlg); + ctx->wedit[6] = RND_DAD_CURRENT(ctx->dlg); RND_DAD_BEGIN_HBOX(ctx->dlg); - ctx->wabs[5] = 0; + ctx->wabs[6] = 0; RND_DAD_BEGIN_HBOX(ctx->dlg); RND_DAD_COMPFLAG(ctx->dlg, RND_HATF_EXPFILL); RND_DAD_END(ctx->dlg); @@ -565,9 +591,9 @@ RND_DAD_BEGIN_VBOX(ctx->dlg); RND_DAD_LABEL(ctx->dlg, "Data type: color"); RND_DAD_COLOR(ctx->dlg); - ctx->wedit[6] = RND_DAD_CURRENT(ctx->dlg); + ctx->wedit[7] = RND_DAD_CURRENT(ctx->dlg); RND_DAD_BEGIN_HBOX(ctx->dlg); - ctx->wabs[6] = 0; + ctx->wabs[7] = 0; RND_DAD_BEGIN_HBOX(ctx->dlg); RND_DAD_COMPFLAG(ctx->dlg, RND_HATF_EXPFILL); RND_DAD_END(ctx->dlg); Index: trunk/src_plugins/propedit/propedit.c =================================================================== --- trunk/src_plugins/propedit/propedit.c (revision 31188) +++ trunk/src_plugins/propedit/propedit.c (revision 31189) @@ -286,6 +286,7 @@ break; case PCB_PROPT_COORD: res->type = FGW_COORD; fgw_coord(res) = out->coord; break; case PCB_PROPT_ANGLE: res->type = FGW_DOUBLE; res->val.nat_double = out->angle; break; + case PCB_PROPT_DOUBLE: res->type = FGW_DOUBLE; res->val.nat_double = out->d; break; case PCB_PROPT_BOOL: case PCB_PROPT_INT: res->type = FGW_INT; res->val.nat_int = out->i; break; case PCB_PROPT_COLOR: res->type = FGW_STR | FGW_DYN; res->val.str = rnd_strdup(out->clr.str); break; @@ -341,6 +342,10 @@ rnd_printf(" common='%f'\n", com.angle); rnd_printf(" min/avg/max=%f/%f/%f\n", min.angle, avg.angle, max.angle); break; + case PCB_PROPT_DOUBLE: + rnd_printf(" common='%f'\n", com.d); + rnd_printf(" min/avg/max=%f/%f/%f\n", min.d, avg.d, max.d); + break; case PCB_PROPT_INT: case PCB_PROPT_BOOL: rnd_printf(" common='%d'\n", com.i); Index: trunk/src_plugins/propedit/props.c =================================================================== --- trunk/src_plugins/propedit/props.c (revision 31188) +++ trunk/src_plugins/propedit/props.c (revision 31189) @@ -195,6 +195,7 @@ case PCB_PROPT_STRING: break; case PCB_PROPT_COORD: minp.coord = RND_COORD_MAX; maxp.coord = -minp.coord; break; case PCB_PROPT_ANGLE: minp.angle = 100000; maxp.angle = -minp.angle; break; + case PCB_PROPT_DOUBLE: minp.d = 100000; maxp.d = -minp.d; break; case PCB_PROPT_INT: minp.i = INT_MAX; maxp.i = -minp.i; break; case PCB_PROPT_BOOL: minp.i = 1; maxp.i = 0; break; case PCB_PROPT_COLOR: break; @@ -213,6 +214,7 @@ case PCB_PROPT_STRING: break; case PCB_PROPT_COORD: STAT(e->key, coord, e->value); break; case PCB_PROPT_ANGLE: STAT(e->key, angle, e->value); break; + case PCB_PROPT_DOUBLE: STAT(e->key, d, e->value); break; case PCB_PROPT_INT: STAT(e->key, i, e->value); break; case PCB_PROPT_BOOL: STAT(e->key, i, e->value); break; case PCB_PROPT_COLOR: break; @@ -227,6 +229,7 @@ case PCB_PROPT_STRING: break; case PCB_PROPT_COORD: avgp.coord = avgp.coord/num_vals; break; case PCB_PROPT_ANGLE: avgp.angle = avgp.angle/num_vals; break; + case PCB_PROPT_DOUBLE: avgp.angle = avgp.d/num_vals; break; case PCB_PROPT_INT: avgp.i = avgp.i/num_vals; break; case PCB_PROPT_BOOL: avgp.i = avgp.i * 100/num_vals; break; case PCB_PROPT_COLOR: break; Index: trunk/src_plugins/propedit/props.h =================================================================== --- trunk/src_plugins/propedit/props.h (revision 31188) +++ trunk/src_plugins/propedit/props.h (revision 31189) @@ -47,6 +47,7 @@ PCB_PROPT_STRING, PCB_PROPT_COORD, PCB_PROPT_ANGLE, + PCB_PROPT_DOUBLE, PCB_PROPT_INT, PCB_PROPT_BOOL, PCB_PROPT_COLOR, @@ -58,6 +59,7 @@ rnd_coord_t coord; rnd_angle_t angle; int i; + double d; rnd_color_t clr; } pcb_propval_t; Index: trunk/src_plugins/propedit/propsel.c =================================================================== --- trunk/src_plugins/propedit/propsel.c (revision 31188) +++ trunk/src_plugins/propedit/propsel.c (revision 31189) @@ -52,6 +52,7 @@ #define type2field_String string #define type2field_rnd_coord_t coord #define type2field_rnd_angle_t angle +#define type2field_double d #define type2field_int i #define type2field_bool i #define type2field_color clr @@ -59,6 +60,7 @@ #define type2TYPE_String PCB_PROPT_STRING #define type2TYPE_rnd_coord_t PCB_PROPT_COORD #define type2TYPE_rnd_angle_t PCB_PROPT_ANGLE +#define type2TYPE_double PCB_PROPT_DOUBLE #define type2TYPE_int PCB_PROPT_INT #define type2TYPE_bool PCB_PROPT_BOOL #define type2TYPE_color PCB_PROPT_COLOR @@ -216,6 +218,8 @@ static void map_text(pcb_propedit_t *ctx, pcb_text_t *text) { map_add_prop(ctx, "p/text/scale", int, text->Scale); + map_add_prop(ctx, "p/text/scale_x", double, text->scale_x); + map_add_prop(ctx, "p/text/scale_y", double, text->scale_y); map_add_prop(ctx, "p/text/fid", int, text->fid); map_add_prop(ctx, "p/text/rotation", rnd_angle_t, text->rot); map_add_prop(ctx, "p/text/thickness", rnd_coord_t, text->thickness); @@ -1129,6 +1133,7 @@ case PCB_PROPT_STRING: return val->string == NULL ? rnd_strdup("") : rnd_strdup(val->string); case PCB_PROPT_COORD: return rnd_strdup_printf("%m+%.02mS", rnd_conf.editor.grid_unit->allow, val->coord); case PCB_PROPT_ANGLE: return rnd_strdup_printf("%f", val->angle); + case PCB_PROPT_DOUBLE: return rnd_strdup_printf("%f", val->d); case PCB_PROPT_INT: return rnd_strdup_printf("%d", val->i); case PCB_PROPT_BOOL: return rnd_strdup(val->i ? "true" : "false"); case PCB_PROPT_COLOR: return rnd_strdup_printf("#%02x%02x%02x", val->clr.r, val->clr.g, val->clr.b);