enable "preserve unchanged props" checkbutton in text edit prop dialog box

This commit is contained in:
Stefan Schippers 2020-08-24 16:21:50 +02:00
parent d076952bff
commit ec29c2677a
4 changed files with 46 additions and 48 deletions

View File

@ -2197,18 +2197,18 @@ void place_text(int draw_text, double mx, double my)
#endif #endif
tclsetvar("props",""); tclsetvar("props","");
tclsetvar("txt",""); tclsetvar("retval","");
if(tclgetvar("hsize")==NULL) if(tclgetvar("hsize")==NULL)
tclsetvar("hsize","0.4"); tclsetvar("hsize","0.4");
if(tclgetvar("vsize")==NULL) if(tclgetvar("vsize")==NULL)
tclsetvar("vsize","0.4"); tclsetvar("vsize","0.4");
tcleval("enter_text {text:}"); tcleval("enter_text {text:} normal");
dbg(1, "place_text(): hsize=%s vsize=%s\n",tclgetvar("hsize"), dbg(1, "place_text(): hsize=%s vsize=%s\n",tclgetvar("hsize"),
tclgetvar("vsize") ); tclgetvar("vsize") );
txt = (char *)tclgetvar("txt"); txt = (char *)tclgetvar("retval");
if(!strcmp(txt,"")) return; /* 01112004 dont allocate text object if empty string given */ if(!strcmp(txt,"")) return; /* 01112004 dont allocate text object if empty string given */
push_undo(); /* 20150327 */ push_undo(); /* 20150327 */
check_text_storage(); check_text_storage();

View File

@ -638,49 +638,41 @@ void edit_text_property(int x)
int customfont; int customfont;
#endif #endif
int sel, k, text_changed; int sel, k, text_changed;
int c,l; int c,l, preserve;
double xx1,yy1,xx2,yy2; double xx1,yy1,xx2,yy2;
double pcx,pcy; /* pin center 20070317 */ double pcx,pcy; /* pin center 20070317 */
char property[1024];/* used for float 2 string conv (xscale and yscale) overflow safe */ char property[1024];/* used for float 2 string conv (xscale and yscale) overflow safe */
const char *strlayer; const char *strlayer;
char *oldprop = NULL;
dbg(1, "edit_text_property(): entering\n"); dbg(1, "edit_text_property(): entering\n");
sel = selectedgroup[0].n; sel = selectedgroup[0].n;
my_strdup(656, &oldprop, textelement[sel].prop_ptr);
if(textelement[sel].prop_ptr !=NULL) if(textelement[sel].prop_ptr !=NULL)
tclsetvar("props",textelement[sel].prop_ptr); tclsetvar("props",textelement[sel].prop_ptr);
else else
tclsetvar("props",""); /* 20171112 */ tclsetvar("props",""); /* 20171112 */
tclsetvar("txt",textelement[sel].txt_ptr); tclsetvar("retval",textelement[sel].txt_ptr);
tclsetvar("retval",textelement[sel].txt_ptr); /* for viewdata */
my_snprintf(property, S(property), "%.16g",textelement[sel].yscale); my_snprintf(property, S(property), "%.16g",textelement[sel].yscale);
tclsetvar("vsize",property); tclsetvar("vsize",property);
my_snprintf(property, S(property), "%.16g",textelement[sel].xscale); my_snprintf(property, S(property), "%.16g",textelement[sel].xscale);
tclsetvar("hsize",property); tclsetvar("hsize",property);
if(x==0) tcleval("enter_text {text:}"); if(x==0) tcleval("enter_text {text:} normal");
else if(x==2) tcleval("viewdata $::retval"); else if(x==2) tcleval("viewdata $::retval");
else if(x==1) tcleval("edit_vi_prop {Text:}"); else if(x==1) tcleval("edit_vi_prop {Text:}");
else { else {
fprintf(errfp, "edit_text_property() : unknown parameter x=%d\n",x); exit(EXIT_FAILURE); fprintf(errfp, "edit_text_property() : unknown parameter x=%d\n",x); exit(EXIT_FAILURE);
} }
preserve = atoi(tclgetvar("preserve_unchanged_attrs"));
text_changed=0; text_changed=0;
if(x==0) { if(x == 0 || x == 1) {
if( strcmp(textelement[sel].txt_ptr, tclgetvar("txt") ) ) {
dbg(1, "edit_text_property(): x=0, text_changed=1\n");
text_changed=1;
} else {
dbg(1, "edit_text_property(): x=0, text_changed=0\n");
text_changed=0;
}
} else if(x==1) {
/* 20080804 */
if( strcmp(textelement[sel].txt_ptr, tclgetvar("retval") ) ) { if( strcmp(textelement[sel].txt_ptr, tclgetvar("retval") ) ) {
dbg(1, "edit_text_property(): x=1, text_changed=1\n"); dbg(1, "edit_text_property(): x=%d, text_changed=1\n", x);
text_changed=1; text_changed=1;
} else { } else {
dbg(1, "edit_text_property(): x=1, text_changed=0\n"); dbg(1, "edit_text_property(): x=%d, text_changed=0\n", x);
text_changed=0; text_changed=0;
} }
} }
@ -711,7 +703,7 @@ void edit_text_property(int x)
dbg(1, "edit_property(): text props: props=%s text=%s\n", dbg(1, "edit_property(): text props: props=%s text=%s\n",
tclgetvar("props"), tclgetvar("props"),
tclgetvar("txt") ); tclgetvar("retval") );
if(text_changed) { if(text_changed) {
if(current_type==SYMBOL) { if(current_type==SYMBOL) {
c = lastrect[PINLAYER]; c = lastrect[PINLAYER];
@ -743,7 +735,7 @@ void edit_text_property(int x)
if(x==0) /* 20080804 */ if(x==0) /* 20080804 */
my_strdup(71, &rect[PINLAYER][l].prop_ptr, my_strdup(71, &rect[PINLAYER][l].prop_ptr,
subst_token(rect[PINLAYER][l].prop_ptr, "name", subst_token(rect[PINLAYER][l].prop_ptr, "name",
(char *) tclgetvar("txt")) ); (char *) tclgetvar("retval")) );
else else
my_strdup(72, &rect[PINLAYER][l].prop_ptr, my_strdup(72, &rect[PINLAYER][l].prop_ptr,
subst_token(rect[PINLAYER][l].prop_ptr, "name", subst_token(rect[PINLAYER][l].prop_ptr, "name",
@ -752,26 +744,26 @@ void edit_text_property(int x)
} }
} }
} }
if(x==0) /* 20080804 */ my_strdup(74, &textelement[sel].txt_ptr, (char *) tclgetvar("retval"));
my_strdup(73, &textelement[sel].txt_ptr, (char *) tclgetvar("txt"));
else /* 20080804 */
my_strdup(74, &textelement[sel].txt_ptr, (char *) tclgetvar("retval"));
} }
if(x==0) { if(x==0) {
my_strdup(75, &textelement[sel].prop_ptr,(char *) tclgetvar("props")); if(preserve)
my_strdup(76, &textelement[sel].font, get_tok_value(textelement[sel].prop_ptr, "font", 0));/*20171206 */ set_different_token(&textelement[sel].prop_ptr, (char *) tclgetvar("props"), oldprop, 0, 0);
else
my_strdup(75, &textelement[sel].prop_ptr,(char *) tclgetvar("props"));
my_strdup(76, &textelement[sel].font, get_tok_value(textelement[sel].prop_ptr, "font", 0));/*20171206 */
strlayer = get_tok_value(textelement[sel].prop_ptr, "hcenter", 0); strlayer = get_tok_value(textelement[sel].prop_ptr, "hcenter", 0);
textelement[sel].hcenter = strcmp(strlayer, "true") ? 0 : 1; textelement[sel].hcenter = strcmp(strlayer, "true") ? 0 : 1;
strlayer = get_tok_value(textelement[sel].prop_ptr, "vcenter", 0); strlayer = get_tok_value(textelement[sel].prop_ptr, "vcenter", 0);
textelement[sel].vcenter = strcmp(strlayer, "true") ? 0 : 1; textelement[sel].vcenter = strcmp(strlayer, "true") ? 0 : 1;
strlayer = get_tok_value(textelement[sel].prop_ptr, "layer", 0); /* 20171206 */ strlayer = get_tok_value(textelement[sel].prop_ptr, "layer", 0); /* 20171206 */
if(strlayer[0]) textelement[sel].layer = atoi(strlayer); if(strlayer[0]) textelement[sel].layer = atoi(strlayer);
else textelement[sel].layer=-1; else textelement[sel].layer=-1;
textelement[sel].xscale=atof(tclgetvar("hsize")); textelement[sel].xscale=atof(tclgetvar("hsize"));
textelement[sel].yscale=atof(tclgetvar("vsize")); textelement[sel].yscale=atof(tclgetvar("vsize"));
} }
/* calculate bbox, some cleanup needed here */ /* calculate bbox, some cleanup needed here */
@ -793,6 +785,7 @@ void edit_text_property(int x)
draw(); draw();
bbox(END,0.0,0.0,0.0,0.0); bbox(END,0.0,0.0,0.0,0.0);
} }
my_free(890, &oldprop);
} }
static char *old_prop=NULL; static char *old_prop=NULL;

View File

@ -1485,8 +1485,8 @@ proc select_netlist_dir { force {dir {} }} {
return $netlist_dir return $netlist_dir
} }
proc enter_text {textlabel} { proc enter_text {textlabel {preserve_disabled disabled}} {
global txt rcode has_cairo global retval rcode has_cairo preserve_unchanged_attrs
set rcode {} set rcode {}
toplevel .t -class Dialog toplevel .t -class Dialog
wm title .t {Enter text} wm title .t {Enter text}
@ -1497,11 +1497,16 @@ proc enter_text {textlabel} {
# 20100203 # 20100203
if { $::wm_fix } { tkwait visibility .t } if { $::wm_fix } { tkwait visibility .t }
wm geometry .t "+$X+$Y" wm geometry .t "+$X+$Y"
label .t.txtlab -text $textlabel frame .t.f1
label .t.f1.txtlab -text $textlabel
text .t.txt -width 100 -height 12 text .t.txt -width 100 -height 12
.t.txt delete 1.0 end .t.txt delete 1.0 end
.t.txt insert 1.0 $txt .t.txt insert 1.0 $retval
pack .t.txtlab .t.txt -side top -fill x checkbutton .t.f1.l1 -text "preserve unchanged props" -variable preserve_unchanged_attrs -state $preserve_disabled
pack .t.f1 -side top -fill x -expand yes
pack .t.f1.l1 -side left
pack .t.f1.txtlab -side left -expand yes -fill x
pack .t.txt -side top -fill both -expand yes pack .t.txt -side top -fill both -expand yes
frame .t.edit frame .t.edit
frame .t.edit.lab frame .t.edit.lab
@ -1526,7 +1531,7 @@ proc enter_text {textlabel} {
frame .t.buttons frame .t.buttons
button .t.buttons.ok -text "OK" -command \ button .t.buttons.ok -text "OK" -command \
{ {
set txt [.t.txt get 1.0 {end - 1 chars}] set retval [.t.txt get 1.0 {end - 1 chars}]
if {$has_cairo} { if {$has_cairo} {
set hsize $vsize set hsize $vsize
} }
@ -1535,7 +1540,7 @@ proc enter_text {textlabel} {
} }
button .t.buttons.cancel -text "Cancel" -command \ button .t.buttons.cancel -text "Cancel" -command \
{ {
set txt {} set retval {}
set rcode {} set rcode {}
destroy .t destroy .t
} }
@ -1559,14 +1564,14 @@ proc enter_text {textlabel} {
pack .t.buttons.b4 -side left -fill x -expand yes pack .t.buttons.b4 -side left -fill x -expand yes
pack .t.buttons -side bottom -fill x pack .t.buttons -side bottom -fill x
bind .t <Escape> { bind .t <Escape> {
if ![string compare $txt [.t.txt get 1.0 {end - 1 chars}]] { if ![string compare $retval [.t.txt get 1.0 {end - 1 chars}]] {
.t.buttons.cancel invoke .t.buttons.cancel invoke
} }
} }
bind .t <Control-Return> {.t.buttons.ok invoke} bind .t <Control-Return> {.t.buttons.ok invoke}
#grab set .t #grab set .t
tkwait window .t tkwait window .t
return $txt return $retval
} }
# evaluate a tcl command from GUI # evaluate a tcl command from GUI

View File

@ -1,4 +1,4 @@
v {xschem version=2.9.5_RC5 file_version=1.1} v {xschem version=2.9.7 file_version=1.2}
G {type=subcircuit G {type=subcircuit
format="@name @pinlist @symname" format="@name @pinlist @symname"
verilog_stop=true verilog_stop=true