//genesis
function do_xselect_funcs
int channo
create x1form /compt_display [480,50,520,370]
// disable /compt_display
//DHB create xdraw /compt_display/draw [0,2,100%,335] -transform z2d \
//DHB -wx 18 -wy 18 -cx 9 -cy 9 -refresh_flag FALSE
create x1draw /compt_display/draw [0,2,100%,335] -transform z2d \
-xmin 0 -xmax 18 -ymin 0 -ymax 18
ce ^
copy /xproto/draw/hhna.icon hh.icon
setfield hh.icon pixcolor Orange linewidth 2
copy /xproto/draw/excsyn.icon syn.icon
setfield syn.icon pixcolor Green linewidth 2
copy /xproto/draw/soma.icon rec.icon
copy /xproto/draw/fillbox.icon vdep.icon
copy /xproto/draw/hilight hilight
setfield # tx -1000 ty -1000 // move proto pixes out of view
copy /xproto/draw/comptshape compt
setfield compt pixflags clickable_not
create x1shape dummy.icon
create x1shape comptpath -tx 10 -ty 10
setfield comptpath pixflags clickable_not
/* This is a brutish hack. We need to handle all this much better */
for (channo = 0; channo < 20; channo = channo + 1)
create x1shape chan{channo} -tx {6 + 2.2*(channo%5)} -ty \
{3.5 + 0.82*channo}
end
// turn off automatic select highlighting
setfield chan# hldispmode invert hlhistmode lastone
setfield #[ISA=xshape] pixflags hlt1 pixflags ~hlt2
create x1toggle /compt_display/mouse_mode -script \
"set_compt_disp_mode "<widget>
setfield /compt_display/mouse_mode label0 "Select" \
label1 "Cut-n-Paste"
setup_mouse /compt_display/draw 0 0 paste do_chanpaste cut \
do_chancut copy do_chancopy
setup_mouse /compt_display/draw 0 0 select \
"do_channelselect /compt_display/draw" dummy do_dummy dummy \
do_dummy
create x1form /compt_select [0,440,480,450]
// disable /compt_select
create x1draw /compt_select/draw [0,2,100%,400] -transform \
ortho3d -wx 0.0015 -wy 0.0015 -cz 0.2e-3 -vx 10 -vy -15 -vz \
7
//DHB setfield ^ wx {user_wx} wy {user_wy} cx {user_cx} cy {user_cy} \
//DHB cz {user_cz}
setfield ^ xmin {user_cx - user_wx/2} xmax {user_cx + user_wx/2} \
ymin {user_cy - user_wy/2} ymax {user_cy + user_wy/2}
create x1toggle /compt_select/scope [0,5:draw.bottom,49%,25]
setfield /compt_select/scope \
label0 "Select One Compartment" \
label1 "Select Sub Tree"
create x1toggle /compt_select/mouse_mode \
[51%,5:draw.bottom,49%,25] -script \
"set_compt_sel_mode "<widget>
setfield /compt_select/mouse_mode label0 "Edit" \
label1 "Cut-n-Paste"
setup_mouse /compt_select/draw 0 0 paste do_comptpaste cut \
do_comptcut copy do_comptcopy
setup_mouse /compt_select/draw 0 0 select do_comptselect stretch \
do_stretch rotate do_rotate
// hack added to allow stretch and rotate functions to get coords - DEB 8/3/95
setfield /compt_select/draw script \
"do_comptselect.d1; do_stretch.d2 <x> <y> <z>; do_rotate.d3 <x> <y> <z>"
create x1cell /compt_select/draw/cell -colfield activation \
-colmin -1 -colmax 2 -autocol FALSE
setfield /compt_select/draw/cell fatrange {user_fatrange1} // DEB 8/2/95
/* create xcell /compt_select/draw/cell -colfield activation \
-colmin -1 -colmax 2 -fatfield dia -autocol FALSE
*/
end
function sub_hilight(name)
str name
int nmsgs
int i
str child
setfield {name} activation 1
nmsgs = {getmsg {name} -incoming -count}
for (i = 0; i < nmsgs; i = i + 1)
if ( \
{strcmp {getmsg {name} -incoming -type {i}} RAXIAL} == 0 \
)
child = {getmsg {name} -incoming -source {i}}
sub_hilight {child}
end
end
end
function hilight_compt(name)
str name
int scope = {getfield /compt_select/scope state}
if ((user_symcomps))
setfield {cellpath}/##[TYPE=symcompartment] activation 0
else
setfield {cellpath}/##[TYPE=compartment] activation 0
end
if ((scope) == 0) // local
setfield {name} activation 1
else
sub_hilight {name}
end
call /compt_select/draw/cell PROCESS
end
function display_compt(name)
str name
str chan
int channo = 0
foreach chan ({el /compt_display/draw/chan#})
//DHB
setfield {chan} text "" iconname dummy.icon
/*
setfield {chan} text "" &&xpts &/compt_display/draw/dummy.icon/xpts \
&&ypts &/compt_display/draw/dummy.icon/ypts \
&&zpts &/compt_display/draw/dummy.icon/zpts \
npts 0
*/
end
pushe /compt_display/draw
foreach chan ({el {name}/#[TYPE=tabchannel]})
//DHB
setfield chan{channo} text {getfield {chan} name} \
iconname hh.icon
/*
setfield chan{channo} text {getfield {chan} name} \
&&xpts &hh.icon/xpts \
&&ypts &hh.icon/ypts \
&&zpts &hh.icon/zpts \
npts {getfield hh.icon npts}
*/
channo = channo + 1
end
foreach chan ({el {name}/#[TYPE=tab2Dchannel]})
setfield chan{channo} text {getfield {chan} name} \
iconname hh.icon
channo = channo + 1
end
foreach chan ({el {name}/#[TYPE=hh_channel]})
//DHB
setfield chan{channo} text {getfield {chan} name} \
iconname hh.icon
/*
setfield chan{channo} text {getfield {chan} name} \
&&xpts &hh.icon/xpts \
&&ypts &hh.icon/ypts \
&&zpts &hh.icon/zpts \
npts {getfield hh.icon npts}
*/
channo = channo + 1
end
foreach chan ({el {name}/#[TYPE=channelC2]})
//DHB
setfield chan{channo} text {getfield {chan} name} \
iconname syn.icon
/*
setfield chan{channo} text {getfield {chan} name} \
&&xpts &syn.icon/xpts \
&&ypts &syn.icon/ypts \
&&zpts &syn.icon/zpts \
npts {getfield syn.icon npts}
*/
channo = channo + 1
end
foreach chan ({el {name}/#[TYPE=synchan]}) // DEB 8/3/95
setfield chan{channo} text {getfield {chan} name} \
iconname syn.icon
channo = channo + 1
end
foreach chan ({el {name}/#[TYPE=vdep_channel]})
//DHB
setfield chan{channo} text {getfield {chan} name} \
iconname vdep.icon
/*
setfield chan{channo} text {getfield {chan} name} \
&&xpts &vdep.icon/xpts \
&&ypts &vdep.icon/ypts \
&&zpts &vdep.icon/zpts \
npts {getfield vdep.icon npts}
*/
channo = channo + 1
end
foreach chan ({el {name}/#[TYPE=receptor2]})
//DHBi
setfield chan{channo} text {getfield {chan} name} \
iconname rec.icon
/*
setfield chan{channo} text {getfield {chan} name} \
&&xpts &rec.icon/xpts \
&&ypts &rec.icon/ypts \
&&zpts &rec.icon/zpts \
npts {getfield rec.icon npts}
*/
channo = channo + 1
end
setfield comptpath text {name}
foreach chan ({el /compt_display/draw/chan#})
if ({strcmp {getfield {chan} text} {channelname}} == 0)
setfield hilight tx {getfield {chan} tx} \
ty {getfield {chan} ty}
xupdate /compt_display/draw
pope
return
end
end
setfield hilight tx -1000 ty -1000
xupdate .
pope
end
function do_comptcut
str src = {getfield /compt_select/draw value}
hilight_compt {src}
cut_to_lib compt_lib {src} {getfield /compt_select/scope state}
if ((user_symcomps))
setfield /compt_select/draw/cell \
path {cellpath}/##[TYPE=symcompartment]
else
setfield /compt_select/draw/cell \
path {cellpath}/##[TYPE=compartment]
end
end
function do_comptcopy
str src = {getfield /compt_select/draw value}
hilight_compt {src}
copy_to_lib compt_lib {src} {getfield /compt_select/scope state}
end
function do_comptpaste
str dst = {getfield /compt_select/draw value}
str elm = {getfield /compt_lib_form/sel value}
str \
elmname = {getfield {elm} name} @ "[" @ {getfield {elm} index} @ "]"
str src = (cellpath) @ "/" @ (elmname)
float x, y, z
int rename_flag = {getfield /compt_lib_form/auto_rename state}
str newname
if ( \
{strcmp {getfield {elm}/{elmname} object->name} "compartment"} != 0 \
)
echo Only compartments may be pasted onto the cell.
return
end
hilight_compt {dst}
if ((!rename_flag) && ({exists {cellpath}/{elmname}}))
echo Element {elmname} already exists. Paste not done.
return
end
if ({exists /buffer/temp2})
delete /buffer/temp2
end
copy {elm} /buffer/temp2
if (rename_flag)
newname = {do_child_rename /buffer/temp2/{elmname} {dst}}
src = (cellpath) @ "/" @ (newname)
subtree_move /buffer/temp2/{newname} {cellpath}
else
subtree_move /buffer/temp2/{elmname} {cellpath};
end
addmsg {dst} {src} AXIAL Vm
addmsg {src} {dst} RAXIAL Ra Vm
x = {getfield {dst} x}
y = {getfield {dst} y}
z = {getfield {dst} z}
position {src} R{x} R{y} R{z}
// refresh the cell display
if ((user_symcomps))
setfield /compt_select/draw/cell \
path {cellpath}/##[TYPE=symcompartment]
setfield {cellpath}xout1/draw/cell \
path {cellpath}/##[TYPE=symcompartment]
setfield {cellpath}xout2/draw/cell \
path {cellpath}/##[TYPE=symcompartment]
else
setfield /compt_select/draw/cell \
path {cellpath}/##[TYPE=compartment]
setfield {cellpath}xout1/draw/cell \
path {cellpath}/##[TYPE=compartment]
setfield {cellpath}xout2/draw/cell \
path {cellpath}/##[TYPE=compartment]
end
end
function do_channelselect(widget)
str widget
str icon = {getfield {widget} pixchoose}
channelname = ({getfield {widget}/{icon} text})
channelpath = (comptpath) @ "/" @ (channelname)
hilight_channel
if (({exists {channelpath}}))
if (({strcmp {analysis_level} neuron}) == 0)
update_neuron_params
end
/*
if ({strcmp({analysis_level},compt)} == 0)
update_compt_params
end
*/
if (({strcmp {analysis_level} channel}) == 0)
update_channel_params
end
end
end
function do_chancut
do_channelselect /compt_display/draw
hilight_channel
cut_to_lib compt_lib {channelpath} \
{getfield /compt_select/scope state}
display_compt {comptpath}
end
function do_chancopy
do_channelselect /compt_display/draw
hilight_channel
copy_to_lib compt_lib {channelpath} \
{getfield /compt_select/scope state}
end
function do_chanpaste
str elm = {getfield /compt_lib_form/sel value}
str \
elmname = {getfield {elm} name} @ "[" @ {getfield {elm} index} @ "]"
str src = "/compt_lib/" @ (elmname) @ "/" @ (elmname)
str chtype = {getfield {src} object->name}
str name
if ({strcmp {chtype} "compartment"} == 0)
echo element {elmname} is not a channel
return
end
if (({getfield /compt_select/scope state}) == 1) // global
foreach name ({el {cellpath}/#[][activation>0.99]})
if ({exists {name}/{elmname}})
echo Element {elmname} already exists. \
Paste not done.
else
pastechannel {src} {name}
end
end
else // local
if ({exists {comptpath}/{elmname}})
echo Element {elmname} already exists. Paste not \
done.
return
end
pastechannel {src} {comptpath}
end
hilight_compt {comptpath}
display_compt {comptpath}
end
function do_comptselect
str name
name = {getfield /compt_select/draw value}
if (({exists {name}}))
comptpath = name
comptname = {getfield {name} name}
channelpath = (comptpath) @ "/" @ (channelname)
hilight_compt {comptpath}
// hilight_compt({comptpath},{get(/compt_select/scope,state)})
if (({strcmp {analysis_level} neuron}) == 0)
update_neuron_params
end
if (({strcmp {analysis_level} compt}) == 0)
update_compt_params
end
if (({strcmp {analysis_level} channel}) == 0)
update_channel_params
end
display_compt {comptpath}
end
end
function set_compt_sel_mode(widget)
str widget
int state = {getfield {widget} state}
if (state == 1)
select_mouse /compt_select/draw paste do_comptpaste cut \
do_comptcut copy do_comptcopy
else
select_mouse /compt_select/draw select do_comptselect stretch \
do_stretch rotate do_rotate
// hack added to allow stretch and rotate functions to get coords - DEB 8/3/95
setfield /compt_select/draw script \
"do_comptselect.d1; do_stretch.d2 <x> <y> <z>; do_rotate.d3 <x> <y> <z>"
end
end
function set_compt_disp_mode(widget)
str widget
int state = {getfield {widget} state}
if (state == 1)
select_mouse /compt_display/draw paste do_chanpaste cut \
do_chancut copy do_chancopy
else
select_mouse /compt_display/draw select \
"do_channelselect /compt_display/draw" dummy do_dummy dummy \
do_dummy
end
end
|