0001 function [ix_time_from, ix_time_to, cancelled] = ...
0002 select_time_window_gui(varargin)
0003
0004
0005
0006
0007 key = varargin{1};
0008
0009 switch(key)
0010
0011 case 'init'
0012 fig = openfig(mfilename);
0013 H = guihandles(fig);
0014
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
0024 setappdata(fig, 'H', H);
0025
0026
0027 set_time_window_parameter(parm);
0028
0029
0030 setappdata(fig, 'cancelled', true);
0031
0032
0033 init_display(H);
0034
0035
0036 waitfor(fig, 'Visible', 'off');
0037
0038
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
0050 clear_time_window_parameter;
0051 delete(fig);
0052
0053 case 'exit'
0054 setappdata(gcf, 'cancelled', true);
0055
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
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
0080 setappdata(gcf, 'cancelled', false);
0081 set(gcf, 'Visible', 'off');
0082 end
0083 case H.cancel_push
0084
0085 setappdata(gcf, 'cancelled', true);
0086 set(gcf, 'Visible', 'off');
0087
0088 case { H.time_window_from_edit, H.time_window_to_edit }
0089
0090 editbox_string = get(hObj, 'String');
0091 time_window_msec = str2double(editbox_string);
0092
0093
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
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
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
0128 parm = get_time_window_parameter;
0129
0130
0131
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
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
0147
0148
0149
0150
0151
0152
0153
0154
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
0166
0167
0168
0169
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
0203
0204
0205
0206
0207
0208
0209
0210
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
0224
0225
0226
0227 meg_index_list = parm.ix_range_from:1:parm.ix_range_to;
0228
0229
0230 sampling_length = 1000/SampleFreq;
0231
0232
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
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
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
0257
0258
0259
0260
0261
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
0275
0276
0277
0278 meg_index_list = parm.ix_range_from:1:parm.ix_range_to;
0279
0280
0281 sampling_length = 1000/SampleFreq;
0282
0283
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
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
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;