Modified the toolkit to take a selectlist with the special variable
name "gencell" and use that to create a selection that can change between (compatible or somewhat compatible) device types.
This commit is contained in:
parent
be8ba09373
commit
27ed2bf975
|
|
@ -280,6 +280,7 @@ proc magic::gencell_setparams {parameters} {
|
||||||
} elseif {[regexp {^.params.edits.(.*)_sel$} $s valid pname] != 0} {
|
} elseif {[regexp {^.params.edits.(.*)_sel$} $s valid pname] != 0} {
|
||||||
set value [dict get $parameters $pname]
|
set value [dict get $parameters $pname]
|
||||||
set magic::${pname}_val $value
|
set magic::${pname}_val $value
|
||||||
|
.params.edits.${pname}_sel configure -text $value
|
||||||
} elseif {[regexp {^.params.edits.(.*)_txt$} $s valid pname] != 0} {
|
} elseif {[regexp {^.params.edits.(.*)_txt$} $s valid pname] != 0} {
|
||||||
if {[dict exists $parameters $pname]} {
|
if {[dict exists $parameters $pname]} {
|
||||||
set value [dict get $parameters $pname]
|
set value [dict get $parameters $pname]
|
||||||
|
|
@ -310,11 +311,18 @@ proc magic::gencell_change {instname gencell_type library parameters} {
|
||||||
if {$newinstname == $instname} {set newinstname $instname}
|
if {$newinstname == $instname} {set newinstname $instname}
|
||||||
if {[instance list exists $newinstname] != ""} {set newinstname $instname}
|
if {[instance list exists $newinstname] != ""} {set newinstname $instname}
|
||||||
}
|
}
|
||||||
|
if {[dict exists $parameters gencell]} {
|
||||||
|
# Setting special parameter "gencell" forces the gencell to change type
|
||||||
|
set gencell_type [dict get $parameters gencell]
|
||||||
|
}
|
||||||
if {[catch {set parameters [${library}::${gencell_type}_check $parameters]} \
|
if {[catch {set parameters [${library}::${gencell_type}_check $parameters]} \
|
||||||
checkerr]} {
|
checkerr]} {
|
||||||
puts stderr $checkerr
|
puts stderr $checkerr
|
||||||
}
|
}
|
||||||
magic::gencell_setparams $parameters
|
magic::gencell_setparams $parameters
|
||||||
|
if {[dict exists $parameters gencell]} {
|
||||||
|
set parameters [dict remove $parameters gencell]
|
||||||
|
}
|
||||||
|
|
||||||
set gname [instance list celldef $instname]
|
set gname [instance list celldef $instname]
|
||||||
|
|
||||||
|
|
@ -346,6 +354,7 @@ proc magic::gencell_change {instname gencell_type library parameters} {
|
||||||
puts stderr $drawerr
|
puts stderr $drawerr
|
||||||
}
|
}
|
||||||
property parameters $parameters
|
property parameters $parameters
|
||||||
|
property gencell ${gencell_type}
|
||||||
tech revert
|
tech revert
|
||||||
popstack
|
popstack
|
||||||
select cell $instname
|
select cell $instname
|
||||||
|
|
@ -400,14 +409,24 @@ proc magic::gencell_create {gencell_type library parameters} {
|
||||||
set newinstname ""
|
set newinstname ""
|
||||||
|
|
||||||
# Get device defaults
|
# Get device defaults
|
||||||
set pdefaults [${library}::${gencell_type}_defaults]
|
|
||||||
if {$parameters == {}} {
|
if {$parameters == {}} {
|
||||||
# Pull user-entered values from dialog
|
# Pull user-entered values from dialog
|
||||||
set parameters [dict merge $pdefaults [magic::gencell_getparams]]
|
set dialogparams [magic::gencell_getparams]
|
||||||
|
if {[dict exists $dialogparams gencell]} {
|
||||||
|
# Setting special parameter "gencell" forces the gencell to change type
|
||||||
|
set gencell_type [dict get $dialogparams gencell]
|
||||||
|
}
|
||||||
|
set pdefaults [${library}::${gencell_type}_defaults]
|
||||||
|
set parameters [dict merge $pdefaults $dialogparams]
|
||||||
set newinstname [.params.title.ient get]
|
set newinstname [.params.title.ient get]
|
||||||
if {$newinstname == "(default)"} {set newinstname ""}
|
if {$newinstname == "(default)"} {set newinstname ""}
|
||||||
if {[instance list exists $newinstname] != ""} {set newinstname ""}
|
if {[instance list exists $newinstname] != ""} {set newinstname ""}
|
||||||
} else {
|
} else {
|
||||||
|
if {[dict exists $parameters gencell]} {
|
||||||
|
# Setting special parameter "gencell" forces the gencell to change type
|
||||||
|
set gencell_type [dict get $parameters gencell]
|
||||||
|
}
|
||||||
|
set pdefaults [${library}::${gencell_type}_defaults]
|
||||||
set parameters [dict merge $pdefaults $parameters]
|
set parameters [dict merge $pdefaults $parameters]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -416,6 +435,9 @@ proc magic::gencell_create {gencell_type library parameters} {
|
||||||
puts stderr $checkerr
|
puts stderr $checkerr
|
||||||
}
|
}
|
||||||
magic::gencell_setparams $parameters
|
magic::gencell_setparams $parameters
|
||||||
|
if {[dict exists $parameters gencell]} {
|
||||||
|
set parameters [dict remove $parameters gencell]
|
||||||
|
}
|
||||||
|
|
||||||
set snaptype [snap list]
|
set snaptype [snap list]
|
||||||
snap internal
|
snap internal
|
||||||
|
|
@ -546,6 +568,10 @@ proc magic::add_dependency {callback gencell_type library args} {
|
||||||
#----------------------------------------------------------
|
#----------------------------------------------------------
|
||||||
|
|
||||||
proc magic::update_dialog {callback pname gencell_type library} {
|
proc magic::update_dialog {callback pname gencell_type library} {
|
||||||
|
if {[dict exists $parameters gencell]} {
|
||||||
|
# Setting special parameter "gencell" forces the gencell to change type
|
||||||
|
set gencell_type [dict get $parameters gencell]
|
||||||
|
}
|
||||||
set pdefaults [${library}::${gencell_type}_defaults]
|
set pdefaults [${library}::${gencell_type}_defaults]
|
||||||
set parameters [dict merge $pdefaults [magic::gencell_getparams]]
|
set parameters [dict merge $pdefaults [magic::gencell_getparams]]
|
||||||
if {$callback != {}} {
|
if {$callback != {}} {
|
||||||
|
|
@ -605,12 +631,12 @@ proc magic::add_message {pname ptext parameters {color blue}} {
|
||||||
# Add a selectable-list parameter to the gencell window
|
# Add a selectable-list parameter to the gencell window
|
||||||
#----------------------------------------------------------
|
#----------------------------------------------------------
|
||||||
|
|
||||||
proc magic::add_selectlist {pname ptext all_values parameters} {
|
proc magic::add_selectlist {pname ptext all_values parameters {itext ""}} {
|
||||||
|
|
||||||
if [dict exists $parameters $pname] {
|
if [dict exists $parameters $pname] {
|
||||||
set value [dict get $parameters $pname]
|
set value [dict get $parameters $pname]
|
||||||
} else {
|
} else {
|
||||||
set value ""
|
set value $itext
|
||||||
}
|
}
|
||||||
|
|
||||||
set numrows [lindex [grid size .params.edits] 1]
|
set numrows [lindex [grid size .params.edits] 1]
|
||||||
|
|
@ -635,12 +661,12 @@ proc magic::add_selectlist {pname ptext all_values parameters} {
|
||||||
# keying the selection to other parameter value lists.
|
# keying the selection to other parameter value lists.
|
||||||
#----------------------------------------------------------
|
#----------------------------------------------------------
|
||||||
|
|
||||||
proc magic::add_selectindex {pname ptext all_values parameters} {
|
proc magic::add_selectindex {pname ptext all_values parameters {ival 0}} {
|
||||||
|
|
||||||
if [dict exists $parameters $pname] {
|
if [dict exists $parameters $pname] {
|
||||||
set value [dict get $parameters $pname]
|
set value [dict get $parameters $pname]
|
||||||
} else {
|
} else {
|
||||||
set value 0
|
set value $ival
|
||||||
}
|
}
|
||||||
|
|
||||||
set numrows [lindex [grid size .params.edits] 1]
|
set numrows [lindex [grid size .params.edits] 1]
|
||||||
|
|
@ -745,9 +771,7 @@ proc magic::gencell_dialog {instname gencell_type library parameters} {
|
||||||
set instname $instroot
|
set instname $instroot
|
||||||
}
|
}
|
||||||
set gname [instance list celldef [subst $instname]]
|
set gname [instance list celldef [subst $instname]]
|
||||||
if {$gencell_type == {}} {
|
set gencell_type [cellname list property $gname gencell]
|
||||||
set gencell_type [cellname list property $gname gencell]
|
|
||||||
}
|
|
||||||
if {$library == {}} {
|
if {$library == {}} {
|
||||||
set library [cellname list property $gname library]
|
set library [cellname list property $gname library]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue