combobox is editable so new attributes can be directly typed in
This commit is contained in:
parent
2aed232e04
commit
574900e1df
|
|
@ -867,7 +867,21 @@ void update_symbol(const char *result, int x)
|
|||
dbg(1, "update_symbol(): tcl retval==%s\n", tclgetvar("retval"));
|
||||
}
|
||||
else {
|
||||
my_strdup(80, &new_prop, (char *) tclgetvar("retval"));
|
||||
|
||||
const char *tok;
|
||||
tok = tclgetvar("selected_tok");
|
||||
|
||||
if(x == 0 && strcmp(tok, "<ALL>")) {
|
||||
|
||||
tcleval("regsub -all {\\\\?\"} $retval {\\\\\"} retval");
|
||||
tcleval("set retval \\\"${retval}\\\"");
|
||||
|
||||
my_strdup(656, &new_prop,
|
||||
subst_token(old_prop, tok, (char *) tclgetvar("retval") )
|
||||
);
|
||||
} else {
|
||||
my_strdup(80, &new_prop, (char *) tclgetvar("retval"));
|
||||
}
|
||||
dbg(1, "update_symbol(): new_prop=%s\n", new_prop);
|
||||
}
|
||||
|
||||
|
|
@ -1082,10 +1096,15 @@ void change_elem_order(void)
|
|||
void edit_property(int x)
|
||||
{
|
||||
int j;
|
||||
|
||||
if(!has_x) return;
|
||||
rebuild_selected_array(); /* from the .sel field in objects build */
|
||||
if(lastselected==0 ) /* the array of selected objs */
|
||||
{
|
||||
const char *tok;
|
||||
char *old_prop = NULL;
|
||||
char *new_prop = NULL;
|
||||
|
||||
if(netlist_type==CAD_SYMBOL_ATTRS && current_type==SCHEMATIC) {
|
||||
if(schsymbolprop!=NULL) /*09112003 */
|
||||
tclsetvar("retval",schsymbolprop);
|
||||
|
|
@ -1117,6 +1136,8 @@ void edit_property(int x)
|
|||
tclsetvar("retval","");
|
||||
}
|
||||
|
||||
my_strdup(660, &old_prop, tclgetvar("retval"));
|
||||
|
||||
if(x==0) tcleval("text_line {Global schematic property:} 0");
|
||||
else if(x==1) {
|
||||
dbg(1, "edit_property(): executing edit_vi_prop\n");
|
||||
|
|
@ -1125,6 +1146,24 @@ void edit_property(int x)
|
|||
else if(x==2) tcleval("viewdata $::retval");
|
||||
dbg(1, "edit_property(): done executing edit_vi_prop, result=%s\n",tclresult());
|
||||
dbg(1, "edit_property(): rcode=%s\n",tclgetvar("rcode") );
|
||||
|
||||
tok = tclgetvar("selected_tok");
|
||||
if(x == 0 && strcmp(tok, "<ALL>")) {
|
||||
|
||||
tcleval("regsub -all {\\\\?\"} $retval {\\\\\"} retval");
|
||||
tcleval("set retval \\\"${retval}\\\"");
|
||||
|
||||
my_strdup(890, &new_prop,
|
||||
subst_token(old_prop, tok, (char *) tclgetvar("retval") )
|
||||
);
|
||||
} else {
|
||||
my_strdup(650, &new_prop, (char *) tclgetvar("retval"));
|
||||
}
|
||||
tclsetvar("retval", new_prop);
|
||||
my_free(892, &old_prop);
|
||||
my_free(893, &new_prop);
|
||||
|
||||
|
||||
if(strcmp(tclgetvar("rcode"),"") )
|
||||
{
|
||||
if(current_type==SYMBOL && /* 20120404 added case for symbol editing, use schvhdlprop regardless of netlisting mode */
|
||||
|
|
|
|||
|
|
@ -1109,11 +1109,6 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
|||
}
|
||||
}
|
||||
|
||||
else if(!strcmp(argv[1],"update_symbol") ) {
|
||||
if(argc >= 3) update_symbol(argv[2],0);
|
||||
else update_symbol(NULL, 0);
|
||||
}
|
||||
|
||||
else if(!strcmp(argv[1], "print_hilight_net") && argc == 3) {
|
||||
print_hilight_net(atoi(argv[2]));
|
||||
}
|
||||
|
|
@ -1137,6 +1132,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
|||
|
||||
}
|
||||
}
|
||||
|
||||
else if(!strcmp(argv[1],"print") ) { /* 20171022 added png, svg */
|
||||
if(argc==2 || (argc==3 && !strcmp(argv[2],"pdf")) ) {
|
||||
ps_draw();
|
||||
|
|
@ -1149,6 +1145,14 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
|||
}
|
||||
}
|
||||
|
||||
else if(!strcmp(argv[1],"gettok") )
|
||||
{
|
||||
char *s=NULL;
|
||||
Tcl_ResetResult(interp);
|
||||
my_strdup(648, &s, get_tok_value(argv[2], argv[3], 0));
|
||||
Tcl_AppendResult(interp, s, NULL);
|
||||
my_free(649, &s);
|
||||
}
|
||||
else if(!strcmp(argv[1],"load_symbol") )
|
||||
{
|
||||
if(argc==3) {
|
||||
|
|
|
|||
10
src/token.c
10
src/token.c
|
|
@ -372,9 +372,6 @@ int set_different_token(char **s,char *new, char *old, int object, int n)
|
|||
token[token_pos]='\0';
|
||||
token_pos=0;
|
||||
}
|
||||
} else if(state==XEND) {
|
||||
value[value_pos]='\0';
|
||||
value_pos=0;
|
||||
get_tok_value(new,token,1);
|
||||
if(get_tok_size == 0 ) {
|
||||
|
||||
|
|
@ -390,6 +387,9 @@ int set_different_token(char **s,char *new, char *old, int object, int n)
|
|||
mod=1;
|
||||
my_strdup(443, s, subst_token(*s, token, NULL) );
|
||||
}
|
||||
} else if(state==XEND) {
|
||||
value[value_pos]='\0';
|
||||
value_pos=0;
|
||||
state=XBEGIN;
|
||||
}
|
||||
if(c=='\0') break;
|
||||
|
|
@ -2531,7 +2531,7 @@ char *translate(int inst, char* s)
|
|||
tmp=strlen(tmp_sym_name);
|
||||
if(result_pos + tmp>=size) {
|
||||
size=(1+(result_pos + tmp) / CADCHUNKALLOC) * CADCHUNKALLOC;
|
||||
my_realloc(531, &result,size);
|
||||
my_realloc(453, &result,size);
|
||||
}
|
||||
memcpy(result+result_pos,tmp_sym_name, tmp+1); /* 20180923 */
|
||||
result_pos+=tmp;
|
||||
|
|
@ -2809,7 +2809,7 @@ char* translate2(struct Lcc *lcc, int level, char* s)
|
|||
tmp = strlen(tmp_sym_name);
|
||||
if (result_pos + tmp >= size) {
|
||||
size = (1 + (result_pos + tmp) / CADCHUNKALLOC) * CADCHUNKALLOC;
|
||||
my_realloc(665, &result, size);
|
||||
my_realloc(655, &result, size);
|
||||
}
|
||||
memcpy(result + result_pos, tmp_sym_name, tmp + 1);
|
||||
result_pos += tmp;
|
||||
|
|
|
|||
|
|
@ -1929,7 +1929,7 @@ proc edit_vi_netlist_prop {txtlabel} {
|
|||
if [string compare $tmp $retval] {
|
||||
set retval $tmp
|
||||
regsub -all {\\?"} $retval {\\"} retval
|
||||
set retval "\"${retval}\""
|
||||
set retval \"${retval}\"
|
||||
if $tcl_debug<=-1 then {puts "modified"}
|
||||
set rcode ok
|
||||
return $rcode
|
||||
|
|
@ -1971,9 +1971,10 @@ proc change_color {} {
|
|||
proc edit_prop {txtlabel} {
|
||||
global edit_prop_size infowindow_text selected_tok edit_symbol_prop_new_sel edit_prop_pos
|
||||
global prev_symbol retval symbol rcode no_change_attrs preserve_unchanged_attrs copy_cell tcl_debug
|
||||
global user_wants_copy_cell editprop_sympath
|
||||
global user_wants_copy_cell editprop_sympath retval_orig
|
||||
set user_wants_copy_cell 0
|
||||
set rcode {}
|
||||
set retval_orig $retval
|
||||
if $tcl_debug<=-1 then {puts " edit_prop{}: retval=$retval"}
|
||||
if { [winfo exists .dialog] } return
|
||||
toplevel .dialog -class Dialog
|
||||
|
|
@ -2079,7 +2080,7 @@ proc edit_prop {txtlabel} {
|
|||
set tok_list "<ALL> [xschem list_tokens $retval 0]"
|
||||
set selected_tok {<ALL>}
|
||||
label .dialog.f2.r4 -text { Edit Attr:}
|
||||
ttk::combobox .dialog.f2.r5 -values $tok_list -textvariable selected_tok -state readonly -width 10
|
||||
ttk::combobox .dialog.f2.r5 -values $tok_list -textvariable selected_tok -width 14
|
||||
|
||||
pack .dialog.f1.l2 .dialog.f1.e2 .dialog.f1.b1 .dialog.f1.b2 .dialog.f1.b3 .dialog.f1.b4 .dialog.f1.b5 -side left -expand 1
|
||||
pack .dialog.f4 -side top -anchor nw
|
||||
|
|
@ -2090,8 +2091,8 @@ proc edit_prop {txtlabel} {
|
|||
pack .dialog.f2.r1 -side left
|
||||
pack .dialog.f2.r2 -side left
|
||||
pack .dialog.f2.r3 -side left
|
||||
# pack .dialog.f2.r4 -side left
|
||||
# pack .dialog.f2.r5 -side left
|
||||
pack .dialog.f2.r4 -side left
|
||||
pack .dialog.f2.r5 -side left
|
||||
pack .dialog.yscroll -side right -fill y
|
||||
pack .dialog.xscroll -side bottom -fill x
|
||||
pack .dialog.e1 -fill both -expand yes
|
||||
|
|
@ -2103,6 +2104,30 @@ proc edit_prop {txtlabel} {
|
|||
}
|
||||
}
|
||||
|
||||
bind .dialog.f2.r5 <<ComboboxSelected>> {
|
||||
if {$selected_tok eq {<ALL>} } {
|
||||
set retval $retval_orig
|
||||
} else {
|
||||
set retval [xschem gettok $retval_orig $selected_tok]
|
||||
regsub -all {\\?"} $retval {"} retval
|
||||
}
|
||||
.dialog.e1 delete 1.0 end
|
||||
.dialog.e1 insert 1.0 $retval
|
||||
}
|
||||
|
||||
bind .dialog.f2.r5 <KeyRelease> {
|
||||
set selected_tok [.dialog.f2.r5 get]
|
||||
if {$selected_tok eq {<ALL>} } {
|
||||
set retval $retval_orig
|
||||
} else {
|
||||
set retval [xschem gettok $retval_orig $selected_tok]
|
||||
regsub -all {\\?"} $retval {"} retval
|
||||
}
|
||||
.dialog.e1 delete 1.0 end
|
||||
.dialog.e1 insert 1.0 $retval
|
||||
}
|
||||
|
||||
|
||||
if {$edit_symbol_prop_new_sel == 1} {
|
||||
wm geometry .dialog $edit_prop_pos
|
||||
}
|
||||
|
|
@ -2143,7 +2168,8 @@ proc write_data {data f} {
|
|||
|
||||
proc text_line {txtlabel clear {preserve_disabled disabled} } {
|
||||
global text_line_default_geometry preserve_unchanged_attrs
|
||||
global retval rcode tcl_debug
|
||||
global retval rcode tcl_debug tok_list selected_tok retval_orig
|
||||
set retval_orig $retval
|
||||
if $clear==1 then {set retval ""}
|
||||
if $tcl_debug<=-1 then {puts " text_line{}: clear=$clear"}
|
||||
if $tcl_debug<=-1 then {puts " text_line{}: retval=$retval"}
|
||||
|
|
@ -2154,6 +2180,8 @@ proc text_line {txtlabel clear {preserve_disabled disabled} } {
|
|||
set X [expr [winfo pointerx .dialog] - 60]
|
||||
set Y [expr [winfo pointery .dialog] - 35]
|
||||
|
||||
set tok_list "<ALL> [xschem list_tokens $retval 0]"
|
||||
set selected_tok {<ALL>}
|
||||
# 20160325 change and remember widget size
|
||||
bind .dialog <Configure> {
|
||||
# puts [wm geometry .dialog]
|
||||
|
|
@ -2201,6 +2229,10 @@ proc text_line {txtlabel clear {preserve_disabled disabled} } {
|
|||
{
|
||||
.dialog.e1 delete 1.0 end
|
||||
}
|
||||
set selected_tok {<ALL>}
|
||||
label .dialog.f1.r4 -text { Edit Attr:}
|
||||
ttk::combobox .dialog.f1.r5 -values $tok_list -textvariable selected_tok -width 14
|
||||
|
||||
checkbutton .dialog.f0.l2 -text "preserve unchanged props" -variable preserve_unchanged_attrs -state $preserve_disabled
|
||||
pack .dialog.f0 -fill x
|
||||
pack .dialog.f0.l2 -side left
|
||||
|
|
@ -2210,6 +2242,8 @@ proc text_line {txtlabel clear {preserve_disabled disabled} } {
|
|||
pack .dialog.f1.b2 -side left -fill x -expand yes
|
||||
pack .dialog.f1.b3 -side left -fill x -expand yes
|
||||
pack .dialog.f1.b4 -side left -fill x -expand yes
|
||||
pack .dialog.f1.r4 -side left
|
||||
pack .dialog.f1.r5 -side left
|
||||
|
||||
|
||||
pack .dialog.yscroll -side right -fill y
|
||||
|
|
@ -2220,6 +2254,33 @@ proc text_line {txtlabel clear {preserve_disabled disabled} } {
|
|||
.dialog.f1.b2 invoke
|
||||
}
|
||||
}
|
||||
|
||||
bind .dialog.f1.r5 <<ComboboxSelected>> {
|
||||
if {$selected_tok eq {<ALL>} } {
|
||||
set retval $retval_orig
|
||||
} else {
|
||||
set retval [xschem gettok $retval_orig $selected_tok]
|
||||
regsub -all {\\?"} $retval {"} retval
|
||||
}
|
||||
.dialog.e1 delete 1.0 end
|
||||
.dialog.e1 insert 1.0 $retval
|
||||
}
|
||||
|
||||
|
||||
|
||||
bind .dialog.f1.r5 <KeyRelease> {
|
||||
set selected_tok [.dialog.f1.r5 get]
|
||||
if {$selected_tok eq {<ALL>} } {
|
||||
set retval $retval_orig
|
||||
} else {
|
||||
set retval [xschem gettok $retval_orig $selected_tok]
|
||||
regsub -all {\\?"} $retval {"} retval
|
||||
}
|
||||
.dialog.e1 delete 1.0 end
|
||||
.dialog.e1 insert 1.0 $retval
|
||||
}
|
||||
|
||||
|
||||
bind .dialog <Control-Return> {.dialog.f1.b1 invoke}
|
||||
#tkwait visibility .dialog
|
||||
#grab set .dialog
|
||||
|
|
|
|||
Loading…
Reference in New Issue