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
tclsetvar("props","");
tclsetvar("txt","");
tclsetvar("retval","");
if(tclgetvar("hsize")==NULL)
tclsetvar("hsize","0.4");
if(tclgetvar("vsize")==NULL)
tclsetvar("vsize","0.4");
tcleval("enter_text {text:}");
tcleval("enter_text {text:} normal");
dbg(1, "place_text(): hsize=%s vsize=%s\n",tclgetvar("hsize"),
tclgetvar("vsize") );
txt = (char *)tclgetvar("txt");
txt = (char *)tclgetvar("retval");
if(!strcmp(txt,"")) return; /* 01112004 dont allocate text object if empty string given */
push_undo(); /* 20150327 */
check_text_storage();

View File

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

View File

@ -1485,8 +1485,8 @@ proc select_netlist_dir { force {dir {} }} {
return $netlist_dir
}
proc enter_text {textlabel} {
global txt rcode has_cairo
proc enter_text {textlabel {preserve_disabled disabled}} {
global retval rcode has_cairo preserve_unchanged_attrs
set rcode {}
toplevel .t -class Dialog
wm title .t {Enter text}
@ -1497,11 +1497,16 @@ proc enter_text {textlabel} {
# 20100203
if { $::wm_fix } { tkwait visibility .t }
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
.t.txt delete 1.0 end
.t.txt insert 1.0 $txt
pack .t.txtlab .t.txt -side top -fill x
.t.txt insert 1.0 $retval
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
frame .t.edit
frame .t.edit.lab
@ -1526,7 +1531,7 @@ proc enter_text {textlabel} {
frame .t.buttons
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} {
set hsize $vsize
}
@ -1535,7 +1540,7 @@ proc enter_text {textlabel} {
}
button .t.buttons.cancel -text "Cancel" -command \
{
set txt {}
set retval {}
set rcode {}
destroy .t
}
@ -1559,14 +1564,14 @@ proc enter_text {textlabel} {
pack .t.buttons.b4 -side left -fill x -expand yes
pack .t.buttons -side bottom -fill x
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
}
}
bind .t <Control-Return> {.t.buttons.ok invoke}
#grab set .t
tkwait window .t
return $txt
return $retval
}
# 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
format="@name @pinlist @symname"
verilog_stop=true