Home > functions > job > job_select_area_dir > select_time_window_gui.m

select_time_window_gui

PURPOSE ^

SYNOPSIS ^

function [ix_time_from, ix_time_to, cancelled] =select_time_window_gui(varargin)

DESCRIPTION ^

 Copyright (C) 2011, ATR All Rights Reserved.
 License : New BSD License(see VBMEG_LICENSE.txt)

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function [ix_time_from, ix_time_to, cancelled] = ...
0002                 select_time_window_gui(varargin)
0003 %
0004 % Copyright (C) 2011, ATR All Rights Reserved.
0005 % License : New BSD License(see VBMEG_LICENSE.txt)
0006 
0007 key = varargin{1};
0008 
0009 switch(key)
0010 
0011     case 'init'
0012         fig = openfig(mfilename);
0013         H = guihandles(fig);
0014         % Time window parameters
0015         parm = struct;
0016         parm.ix_origin = varargin{2};
0017         parm.ix_range_from = varargin{3};
0018         parm.ix_range_to = varargin{4};
0019         parm.sampling_freq = varargin{5};
0020         parm.ix_initial_from = varargin{6};
0021         parm.ix_initial_to = varargin{7};
0022 
0023         % save GUI component handles
0024         setappdata(fig, 'H', H);
0025 
0026         % save time window parameters
0027         set_time_window_parameter(parm);
0028 
0029         % GUI close by CANCEL button or 'x' button.
0030         setappdata(fig, 'cancelled', true);
0031         
0032         % Initialize screen display.
0033         init_display(H);
0034 
0035         % into blocking till figure property visible off
0036         waitfor(fig, 'Visible', 'off');
0037 
0038         % get output values
0039         cancelled = getappdata(fig, 'cancelled');
0040         if cancelled
0041             ix_time_from = 0;
0042             ix_time_to = 0;
0043         else
0044             [parm] = get_time_window_parameter;
0045             ix_time_from = parm.ix_time_from;
0046             ix_time_to   = parm.ix_time_to;
0047         end
0048 
0049         % delete figure
0050         clear_time_window_parameter;
0051         delete(fig);
0052 
0053     case 'exit'
0054         setappdata(gcf, 'cancelled', true);
0055         % exit blocking
0056         set(gcf, 'Visible', 'off');
0057 
0058     case 'callback'
0059        H = getappdata(gcf, 'H');
0060        hObj = varargin{2};
0061        callback(H, hObj);
0062 end
0063 
0064 function callback(H, hObj)
0065 
0066 switch(hObj)
0067     case H.ok_push
0068         [ix_time_from, ix_time_to, err] = get_time_window_from_gui(H);
0069         if err || (ix_time_from > ix_time_to)
0070             errordlg('Time window is invalid.', 'error');
0071             return;
0072         else
0073             % set return parameter
0074             parm = get_time_window_parameter;
0075             parm.ix_time_from = ix_time_from;
0076             parm.ix_time_to   = ix_time_to;
0077             set_time_window_parameter(parm);
0078 
0079             % exit blocking
0080             setappdata(gcf, 'cancelled', false);
0081             set(gcf, 'Visible', 'off');
0082         end
0083     case H.cancel_push
0084         % exit blocking
0085         setappdata(gcf, 'cancelled', true);
0086         set(gcf, 'Visible', 'off'); 
0087 
0088     case { H.time_window_from_edit, H.time_window_to_edit }
0089         % get input
0090         editbox_string = get(hObj, 'String');
0091         time_window_msec = str2double(editbox_string);
0092         
0093         % convert time to index
0094         [index, err] = vb_time_to_index(time_window_msec);
0095         if err
0096             if hObj == H.time_window_from_edit
0097                 rollback_time_window('start', H);
0098             elseif hObj == H.time_window_to_edit
0099                 rollback_time_window('end', H);
0100             end
0101             errordlg('Invalid time was specified.', 'error');
0102             return;
0103         end
0104         
0105         % convert index to time
0106         [time, err]  = vb_index_to_time(index);
0107         if err
0108             if hObj == H.time_window_from_edit
0109                 rollback_time_window('start', H);
0110             elseif hObj == H.time_window_to_edit
0111                 rollback_time_window('end', H);
0112             end
0113             errordlg('Invalid time was specified.', 'error');
0114             return;
0115         end
0116 
0117         % set Time window
0118         if hObj == H.time_window_from_edit
0119             set_time_window('start', time, H);
0120         elseif hObj == H.time_window_to_edit
0121             set_time_window('end', time, H);
0122         end
0123 end
0124 
0125 function init_display(H)
0126 
0127     % get window parameter
0128     parm = get_time_window_parameter;
0129     
0130     %
0131     % --- Set Range
0132     %
0133     time = vb_index_to_time(parm.ix_range_from);
0134     set(H.range_from_edit, 'String', sprintf('%.2f', time));
0135     time = vb_index_to_time(parm.ix_range_to);
0136     set(H.range_to_edit, 'String', sprintf('%.2f', time));
0137 
0138     %
0139     % --- Set initial Time window
0140     time = vb_index_to_time(parm.ix_initial_from);
0141     set_time_window('start', time, H);
0142     time = vb_index_to_time(parm.ix_initial_to);
0143     set_time_window('end', time, H);
0144     
0145 function set_time_window(key, time, H)
0146 % This function sets time window to GUI and data store.
0147 % [IN]
0148 %    key  : Time window type.  'start' or 'end'
0149 %    time : Time(msec)
0150 %    H    : GUI handles
0151 %
0152     % 比較時に問題が出るので、エディットボックスに表示している値は使用しない。
0153     % index_to_timeで変換された値をfigureに保存する
0154     %      : setappdata(H.fig, 'time_window_xxx_edit', time)
0155     switch(key)
0156         case 'start'
0157             set(H.time_window_from_edit, 'String', sprintf('%.2f', time));
0158             setappdata(H.fig, 'time_window_from_edit', time);
0159         case 'end'
0160             set(H.time_window_to_edit, 'String', sprintf('%.2f', time));
0161             setappdata(H.fig, 'time_window_to_edit', time);
0162     end
0163 
0164 function rollback_time_window(key, H)
0165 % This function rollback time window GUI.
0166 %
0167 % [IN]
0168 %    key  : Time window type.  'start' or 'end'
0169 %    H    : GUI handles
0170 %
0171     switch(key)
0172         case 'start'
0173             time = getappdata(H.fig, 'time_window_from_edit');
0174             set_time_window('start', time, H);
0175         case 'end'
0176             time = getappdata(H.fig, 'time_window_to_edit');
0177             set_time_window('end', time, H);
0178     end
0179             
0180 function [ix_time_from, ix_time_to, err] = get_time_window_from_gui(H)
0181     err = false;
0182     ix_time_from = 0;
0183     ix_time_to = 0;
0184 
0185     time_window_from_msec = getappdata(gcf, 'time_window_from_edit');
0186     if isempty(time_window_from_msec)
0187         err = true;
0188         return;
0189     end
0190     time_window_to_msec   = getappdata(gcf, 'time_window_to_edit');
0191     if isempty(time_window_to_msec)
0192         err = true;
0193         return;
0194     end
0195     
0196     [ix_time_from, err] = vb_time_to_index(time_window_from_msec);
0197     if err, return; end
0198     [ix_time_to,   err] = vb_time_to_index(time_window_to_msec);
0199     if err, return; end
0200 
0201 function [meg_index, err] = vb_time_to_index(time)
0202 % This function returns nearest rounded up sampling index from
0203 % specified time.
0204 % [IN]
0205 %      time       : time point(msec)
0206 %      SampleFreq : Sampling frequency
0207 %
0208 % [OUT]
0209 %      meg_index : nearest rounded up sampling index from specified time.
0210 %      err       : true or false(true means something error occured.)
0211 
0212     err = false;
0213     meg_index = [];
0214 
0215     parm = get_time_window_parameter;
0216     SampleFreq = parm.sampling_freq;
0217     ix_origin     = parm.ix_origin;
0218     ix_range_from = parm.ix_range_from;
0219     ix_range_to   = parm.ix_range_to;
0220 
0221     try
0222         %
0223         % --- make table (meg_index_list, time_list)
0224         %
0225         
0226         % meg index list
0227         meg_index_list = parm.ix_range_from:1:parm.ix_range_to;
0228 
0229         % sampling length(msec).
0230         sampling_length = 1000/SampleFreq;
0231 
0232         % time list of sample points(msec)
0233         start_point = ix_range_from - ix_origin;
0234         end_point = ix_range_to - ix_origin;
0235         time_list = sampling_length * start_point : ...
0236                             sampling_length : ...
0237                             sampling_length * end_point;
0238 
0239         for k=1:length(time)
0240             % repaired out of range input
0241             if time(k) < min(time_list)
0242                 time(k) = min(time_list);
0243             elseif time(k) > max(time_list)
0244                 time(k) = max(time_list);
0245             end
0246 
0247             % Index of MEG data
0248             table_ix = min(find(time_list>=time(k)));
0249             meg_index(k) = meg_index_list(table_ix);
0250         end
0251     catch
0252         err = true;
0253     end
0254 
0255 function [time, err] = vb_index_to_time(meg_index)
0256 % This function returns time that corresponds to sampling data index.
0257 % [IN]
0258 %      meg_index : index of meg data.
0259 % [OUT]
0260 %      time      : time that corresponds to sampling data index.
0261 %      err       : true or false(true means something error occured.)
0262 
0263     err = false;
0264     time = [];
0265 
0266     parm = get_time_window_parameter;
0267     SampleFreq = parm.sampling_freq;
0268     ix_origin     = parm.ix_origin;
0269     ix_range_from = parm.ix_range_from;
0270     ix_range_to   = parm.ix_range_to;
0271 
0272     try
0273         %
0274         % --- make table (meg_index_list, time_list)
0275         %
0276 
0277         % meg index list
0278         meg_index_list = parm.ix_range_from:1:parm.ix_range_to;
0279         
0280         % sampling length(msec).
0281         sampling_length = 1000/SampleFreq;
0282 
0283         % time list for index points(msec)
0284         start_point = ix_range_from - ix_origin;
0285         end_point = ix_range_to - ix_origin;
0286         time_list = sampling_length * start_point : ...
0287                             sampling_length : ...
0288                             sampling_length * end_point;
0289         
0290        for k=1:length(meg_index)
0291             % array over flow check
0292             if meg_index(k) > ix_range_to
0293                 meg_index(k) = ix_range_to;
0294             end
0295             if meg_index(k) < ix_range_from
0296                 meg_index(k) = ix_range_from;
0297             end
0298             % return time
0299             table_ix(k) = find(meg_index_list == meg_index);
0300             time(k) = time_list(table_ix(k));
0301         end
0302     catch
0303         err = true;
0304         return;
0305     end
0306 
0307 function set_time_window_parameter(parm)
0308     global select_time_window_gui_abc123;
0309     select_time_window_gui_abc123 = parm;
0310 function [parm] = get_time_window_parameter;
0311     global select_time_window_gui_abc123;
0312     parm = select_time_window_gui_abc123;
0313 function clear_time_window_parameter;
0314     global select_time_window_gui_abc123;
0315     clear select_time_window_gui_abc123;

Generated on Tue 27-Aug-2013 11:46:04 by m2html © 2005