//genesis
str quit_form = "Do you really want to quit ?"
str help_form = "Using the Neuron simulation kit"
str file_form = "file_form"
str select_form = "Select Level of analysis"
str chosencell = "Selected cell name"
str iocell = "Cell for IO"
str author = "Your Name"
function check_iocell
str io = {getfield /{file_form}/{iocell} value}
if (({findchar {io} /}) != 0)
echo Invalid cell for I/O. Cell must be of form \
'/cellname'.
setfield /{file_form}/{iocell} value /cell
return
end
if (({findchar {substring {io} 1} /}) != -1)
echo Invalid cell for I/O. Cell must be of form \
'/cellname'.
setfield /{file_form}/{iocell} value /cell
end
end
function do_title_bar
create x1form /title_bar [0,0,{user_screenwidth},50] -nolabel
ce ^
disable .
create x1button quit [1%,2,13%,] -script popup_quit
create x1button help [15%,2,14%,] -script popup_help
create x1button "file" [30%,2,14%,] -script popup_file
create x1button "run cell" [45%,2,14%,] -script \
"set_level run_neuron"
create x1button "edit cell" [60%,2,14%,] -script "set_level neuron"
create x1button "edit compt" [75%,2,12%,] -script "set_level compt"
create x1button "edit channel" [88%,2,11%,] -script \
"set_level channel"
create x1form /{quit_form} [0,40,300,100] -title {quit_form}
ce ^
disable .
create x1button yes -script quit
create x1button no -script popdown_quit
create x1form /{help_form} [160,40,600,850] -notitle
ce ^
disable .
create x1label /{help_form}/header [1%,2,98%,25] -title \
{help_form}
create x1label /{help_form}/instr [1%,28,98%,25] -title \
"Use the scroll bar at the left to move through the text"
create x1text /{help_form}/text [1%,55,98%,87%] -filename {user_help}
create x1button "CANCEL" -script popdown_help
create x1form /{select_form} [480,40,300,100]
ce ^
disable .
create x1button "Single Neuron level" -script "set_level neuron"
create x1button "Compartment level" -script "set_level compt"
create x1button "Channel level" -script "set_level channel"
create x1button "CANCEL" -script popdown_select
create x1form /{file_form} [320,40,300,325] -title "File Menu"
ce ^
disable .
create x1label "Cell Selection"
create x1dialog {chosencell} -value /mit -script \
"choose_cell "<widget>
create x1label "Cell Parameter IO"
create x1dialog {iocell} -value /camit -script check_iocell
create x1dialog source_file_name -value camit.p
create x1button "Load from file" -script do_cell_load
create x1dialog "Save to file" -script "do_cell_save "<widget> \
-value newcamit.p
create x1dialog {author} -value " "
create x1button "New Cell" -script "do_new_cell "<widget>
// above "create x1button" had the following option, but
// x1buttons don't support it and set code will complain
// about the unknown field. ---dhb
// -value "/newcell"
create x1label " "
create x1button "CANCEL" -script popdown_file
create neutral /dummy
setfield /file_form/"Selected cell name" value {user_cell}
check_iocell
setfield /file_form/"Cell for IO" value {user_cell}
setfield /file_form/"source_file_name" value {user_pfile}
setfield /file_form/"Save to file" value new{user_pfile}
setfield /file_form/{author} value {user_name}
end
function popup_quit
xshowontop /{quit_form}
end
function popup_help
xshowontop /{help_form}
end
function popup_file
xshowontop /{file_form}
end
function popup_select
xshowontop /{select_form}
end
function popdown_quit
xhide /{quit_form}
end
function popdown_help
xhide /{help_form}
end
function popdown_file
xhide /{file_form}
end
function popdown_select
xhide /{select_form}
end
function choose_cell(widget)
str widget
int n
str num, cellw
pushe /{file_form}
xhide .
str newcell = {getfield {chosencell} value}
if (!({exists {newcell}}))
echo {newcell} does not exist
return
end
if ({strcmp {cellpath} {newcell}} == 0)
return
end
if ({exists {cellpath}})
disable {cellpath}
for (n = 1; n <= 2; n = n + 1)
num = n
if (({exists {cellpath}xout{num}}))
disable {cellpath}graph{num}
disable {cellpath}xout{num}
xhide {cellpath}graph{num}
xhide {cellpath}xout{num}
end
end
end
cellpath = newcell
for (n = 1; n <= 2; n = n + 1)
num = n
if (!({exists {cellpath}xout{num}}))
do_xout {num}
do_xgraph {num}
end
if ({strcmp {analysis_level} "run_neuron"} == 0)
if (num <= user_numxouts)
xshowontop {newcell}graph{num}
xshowontop {newcell}xout{num}
end
end
end
enable {cellpath}
for (n = 1; n <= (user_numxouts); n = n + 1)
num = n
enable {cellpath}graph{num}
enable {cellpath}xout{num}
end
reset
for (n = 1; n <= 2; n = n + 1)
num = n
cellw = (cellpath) @ "xout" @ (num) @ "/draw/cell"
setfield {cellw} autofat TRUE
setfield {cellw} fatfix FALSE
if ((user_symcomps))
setfield {cellw} \
path {cellpath}"/##[TYPE=symcompartment]"
setfield /compt_select/draw/cell \
path {cellpath}"/##[TYPE=symcompartment]"
else
setfield {cellw} path {cellpath}"/##[TYPE=compartment]"
setfield /compt_select/draw/cell \
path {cellpath}"/##[TYPE=compartment]"
end
setfield {cellw} fatfix TRUE
setfield {cellw} autofat FALSE
end
setfield /file_IO/field_path \
value {cellpath}/{user_filefieldpath}
pope
end
function do_cell_load
str wid = "/" @ (file_form) @ "/source_file_name"
str name
pushe /{file_form}
readcell {getfield {wid} value} {getfield {iocell} value}
reset
pushe /{file_form}
setfield {chosencell} value {getfield {iocell} value}
choose_cell {chosencell}
/* \
find type of first compartment, assume they are all same type \
*/
foreach name ({el {cellpath}/#[]})
if ( \
{strcmp {getfield {name} object->name} compartment} == 0 \
)
user_symcomps = 0
else
user_symcomps = 1
end
break /* exit after first iteration of the loop */
end
pope
xhide /{file_form}
/* set correct integration method */
intmethod "/cell_run_control/method"
end
function do_cell_save(widget)
str widget
pushe /{file_form}
writecell {getfield {widget} value} {getfield {iocell} value} \
-author {getfield {author} value}
pope
xhide /{file_form}
end
function do_new_cell(widget)
str widget
echo not yet implemented
end
function set_level(level)
str level
if (!({exists {cellpath}}))
echo {cellpath} is not defined yet : a cell must be \
loaded in.
return
end
if (({strcmp {analysis_level} {level}}) == 0)
return
end
if (({strcmp {level} "run_neuron"}) == 0)
xshowontop /cell_run_control
xshowontop {cellpath}xout1
xshowontop {cellpath}graph1
if ((user_numxouts) > 1)
xshowontop {cellpath}xout2
xshowontop {cellpath}graph2
end
/*
if ({user_symcomps})
set {cellpath}/##[TYPE=symcompartment] inject 0.0
else
set {cellpath}/##[TYPE=compartment] inject 0.0
end
*/
do_run_clickmode /cell_run_control/Record
xhide /compt_display
xhide /compt_select
xhide /compt_lib_form
else
if (({strcmp {analysis_level} "new"}) == 0)
xshowontop /compt_display
setfield /compt_select/draw/cell \
path {cellpath}/##[TYPE=compartment]
xshowontop /compt_select
xshowontop /compt_lib_form
end
end
if (({strcmp {level} "neuron"}) == 0)
xshowontop /cell_params
end
if (({strcmp {level} "compt"}) == 0)
xshowontop /compt_params
end
if (({strcmp {level} "channel"}) == 0)
xshowontop /channel_params
end
if (({strcmp {analysis_level} "run_neuron"}) == 0)
xshowontop /compt_display
if ((user_symcomps))
setfield /compt_select/draw/cell \
path {cellpath}/##[TYPE=symcompartment]
else
setfield /compt_select/draw/cell \
path {cellpath}/##[TYPE=compartment]
end
xshowontop /compt_select
xshowontop /compt_lib_form
xhide /cell_run_control
xhide /file_IO
xhide {cellpath}xout1
xhide {cellpath}graph1
xhide {cellpath}xout2
xhide {cellpath}graph2
end
if (({strcmp {analysis_level} "neuron"}) == 0)
xhide /cell_params
end
if (({strcmp {analysis_level} "compt"}) == 0)
xhide /compt_params
end
if (({strcmp {analysis_level} "channel"}) == 0)
xhide /channel_params
end
analysis_level = level
end