function callbacks(ndx, arg) global vars handles switch(ndx) % mainwindow case 1 % membutton set_winvis(handles.memwindow, get(handles.membutton,'Value')); case 2 % chanbutton set_winvis(handles.chanwindow, get(handles.chanbutton,'Value')); case 3 % stimbutton set_winvis(handles.stimwindow, get(handles.stimbutton,'Value')); case 4 % drugbutton set_winvis(handles.drugwindow, get(handles.drugbutton,'Value')); case 5 % stim1button begin_stimulus(handles.stim1); run_system(0); case 6 % stim2button begin_stimulus(handles.stim2); run_system(0); case 7 % clearbutton if (vars.vclampmode==0) vars.clearflag=1; run_system(1); else vc_clear; end case 8 % recallbutton vars.recallflag=1; run_system(1); % stimwindow case 9 % sliders update_stimslider(gcbo); redisplay_stim(str_eval(['handles.stim' int2str(arg)])); case 10 % boxes update_stimbox(gcbo); redisplay_stim(str_eval(['handles.stim' int2str(arg)])); case 11 % reset reset_stimulus(handles.stim1); reset_stimulus(handles.stim2); case 12 % hide set_winvis(gcf,0); set(handles.stimbutton,'Value',0); % run case 13 toggle_winvis(handles.memwindow); case 14 toggle_winvis(handles.chanwindow); case 15 toggle_winvis(handles.stimwindow); case 16 toggle_winvis(handles.drugwindow); % memwindow case 17 % reset reset_memparams; run_system(1); case 18 % hide set_winvis(gcf,0); set(handles.membutton,'Value',0); % setup drugs case 19 % reset reset_drugs; indicate_drugs_active; run_system(1); case 20 % hide set_winvis(gcf,0); set(handles.drugbutton,'Value',0); % setup channels case 21 % reset reset_chanparams; case 22 % hide set_winvis(gcf,0); set(handles.chanbutton,'Value',0); % setup channels case 23 % switch mode newmode=get(handles.modebutton, 'Value')==2; if (vars.vclampmode~=newmode) vars.vclampmode=newmode; switch_mode end % vclamp button case 24 set_winvis(handles.vclampwindow, get(handles.vc_button,'Value')); % vclamp window case 25 % sliders update_stimslider(gcbo); update_vc_userstrings(gcbo); redisplay_voltage(str_eval('handles.vc_curve')); case 26 % boxes update_stimbox(gcbo); update_vc_userstrings(get(gcbo,'UserData')); redisplay_voltage(str_eval('handles.vc_curve')); case 27 % reset reset_voltage; vc_varselect(3); case 28 % hide set_winvis(gcf,0); set(handles.vc_button,'Value',0); % main window vclamp case 29 % run with voltage clamp vc_run % case 30 % voltage plot click % if strcmp(get(handles.cursor,'visible'),'on') % set_cursor_vis('off'); % else % click_point = get(handles.vc_vplot,'CurrentPoint'); % if mod (handles.vc_varselected, 2) % set(handles.vc_varval_box, 'String', ... % num2str(round(click_point(1,2)))); % else % set(handles.vc_varval_box, 'String', ... % num2str(round(click_point(1,1)))); % end % end case 31 % vertical Y-axis zoom in ylims=get(handles.vc_mainplot,'YLim'); %zoom stack for easy zoomout vars.vc_ylims{length(vars.vc_ylims)+1} = ylims; if strcmp(get(handles.cursor,'visible'),'on') cursordata=get(handles.cursor,'userdata'); if (cursordata.line_id<=vars.vc_maxc) yval=cursordata.yval; ylims=ylims+yval; end set(handles.vc_mainplot,'YLim',ylims*0.5); vc_reset_cursor_values(cursordata.line_id, cursordata.index); vc_vertslider_val; else set(handles.vc_mainplot,'YLim',ylims*0.5); vc_vertslider_val; end case 32 % vertical Y-axis zoom out ylims=get(handles.vc_mainplot,'YLim'); %use zoom-in ylims first, if they don't exist, multiply limits by 1.5 if(isempty(vars.vc_ylims)) set(handles.vc_mainplot,'YLim',ylims*1.5); vc_vertslider_val; else set(handles.vc_mainplot,'YLim', vars.vc_ylims{length(vars.vc_ylims)}); temp = cell(1,length(vars.vc_ylims)-1); if(~isempty(temp)) for i = 1:length(temp) temp{i} = vars.vc_ylims{i}; end vars.vc_ylims = temp; else vars.vc_ylims = temp; end vc_vertslider_val; end if strcmp(get(handles.cursor,'visible'),'on') userdata = get(handles.cursor, 'UserData'); vc_reset_cursor_values(userdata.line_id, userdata.index); end case 33 % vc_varval_box updated trim_vc_values; update_vc_box_slider; vc_varselect(handles.vc_varselected); case 34 %translate up ylims = get(handles.vc_mainplot, 'YLim'); diff = ylims(2) - ylims(1); set(handles.vc_mainplot, 'YLim', ylims+(.1*diff)); case 35 %translate up ylims = get(handles.vc_mainplot, 'YLim'); diff = ylims(2) - ylims(1); set(handles.vc_mainplot, 'YLim', ylims-(.1*diff)); case 36 % vertical Y-axis zoom in xlims=get(handles.vc_mainplot,'XLim'); %zoom stack for easy zoomout vars.vc_xlims{length(vars.vc_xlims)+1} = xlims; if strcmp(get(handles.cursor,'visible'),'on') cursordata=get(handles.cursor,'userdata'); if (cursordata.line_id<=vars.vc_maxc) xval=cursordata.xval; xlims=xlims+xval; end set(handles.vc_mainplot,'XLim',xlims*0.5); vc_reset_cursor_values(cursordata.line_id, cursordata.index); else mid = (xlims(2) + xlims(1))/2; xlims = mid+xlims; set(handles.vc_mainplot,'XLim',xlims*0.5); end case 37 xlims = get(handles.vc_mainplot, 'XLim'); if(isempty(vars.vc_xlims)) set(handles.vc_mainplot, 'XLim', xlims*1.05); else set(handles.vc_mainplot,'XLim', vars.vc_xlims{length(vars.vc_xlims)}); temp = cell(1,length(vars.vc_xlims)-1); if(~isempty(temp)) for i = 1:length(temp) temp{i} = vars.vc_xlims{i}; end vars.vc_xlims = temp; else vars.vc_xlims = temp; end end if strcmp(get(handles.cursor,'visible'),'on') userdata = get(handles.cursor, 'UserData'); vc_reset_cursor_values(userdata.line_id, userdata.index); end end function update_vc_userstrings(obj) global handles vars idx=0; for i=1:length(handles.vc_curve.sliders) if (obj==handles.vc_curve.sliders(i)), idx=i; end end if (idx==0), return; end str=handles.vc_curve.user_strings{idx}; nums=str2num(str); nums(1)=get(obj,'Value'); handles.vc_curve.user_strings{idx}=num2str(nums); if (idx==handles.vc_varselected) set(handles.vc_varval_box,'String', handles.vc_curve.user_strings{idx}); set(handles.vc_helpnote1,'String',[handles.vc_labels{idx} ' ' handles.vc_curve.user_strings{idx}]); end function update_vc_box_slider global handles vars varval_str=get(handles.vc_varval_box, 'String'); varval_arr=str2num(varval_str); if (length(varval_arr)<1), varval_arr=[0]; end varval_arr=max(min(varval_arr,100),-90); idx=handles.vc_varselected; set(handles.vc_varval_box,'String',num2str(varval_arr)); set(handles.vc_curve.sliders(idx),'Value',varval_arr(1)); update_stimslider(handles.vc_curve.sliders(idx));