📄 rri_getsubject_ui.m
字号:
set(slider_hdl,'Enable','On');
else
slider_hdl = findobj(gcf,'Tag','sliderCondition');
set(slider_hdl,'Enable','Off');
end
return; % DisplayConditions
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% UpdateSlider: Set slider's (Min, Max, Value, Sliderstep) based on
% how many rows of image files.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function UpdateSlider()
top_cond_idx = getappdata(gcf,'top_cond_idx');
num_cond = length(getappdata(gcf, 'subj_files_row'));
rows = getappdata(gcf,'NumRows');
total_rows = num_cond + 1; % so, Max-Min = total_rows - 1
slider_hdl = findobj(gcf,'Tag','sliderCondition');
if (num_cond ~= 0) % don't need to update when no cond
set(slider_hdl, 'Min', 1, 'Max', total_rows, ...
'Value', total_rows - top_cond_idx + 1, ...
'Sliderstep', [1/(total_rows-1)-0.00001, 1/(total_rows-1)]);
end
return; % UpdateSlider
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% MoveSlider: Respond to move slider action by changing the top index
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function MoveSlider()
slider_hdl = findobj(gcf,'Tag','sliderCondition');
slider_value = round(get(slider_hdl,'Value'));
total_rows = round(get(slider_hdl,'Max'));
% when slider_value = 1, top_cond_idx will be total_rows
%
top_cond_idx = total_rows - slider_value + 1; % see above fcn
setappdata(gcf,'top_cond_idx',top_cond_idx);
DisplayConditions(0);
return; % MoveSlider
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% UpdateDirectoryList: Respond to go into subdirectory
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function UpdateDirectoryList()
listed_dir = get(gcbo,'String');
selected_dir_idx = get(gcbo,'Value');
if length(selected_dir_idx) > 1
chksubj = getappdata(gcf,'chksubj');
if chksubj
set(findobj(gcf,'Tag','chkSubjConsistency'),'enable','on');
end
selected_dir_name = {listed_dir{selected_dir_idx}};
else
% set(findobj(gcf,'Tag','chkSubjConsistency'),'enable','off');
selected_dir_name = listed_dir{selected_dir_idx};
% selected_dir = [getappdata(gcf,'selected_dir') filesep selected_dir_name];
end
h = findobj(gcf,'Tag','editSelectedDir');
if length(selected_dir_idx) > 1
selected_dir_name = char(selected_dir_name);
grp_selected_dir = [get(h,'String') filesep];
grp_selected_dir = repmat(grp_selected_dir,[length(selected_dir_idx),1]);
grp_selected_dir = [grp_selected_dir selected_dir_name];
grp_selected_dir = (cellstr(grp_selected_dir))';
setappdata(gcf,'grp_selected_dir',grp_selected_dir);
return;
end
selected_dir = [get(h,'String') filesep selected_dir_name];
% go into subdirectory
%
try
cd (selected_dir);
catch
msg = 'ERROR: Cannot access the directory';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
if isempty(pwd)
selected_dir = filesep;
else
selected_dir = pwd;
end
dir_struct = dir(selected_dir);
if isempty(dir_struct)
% msg = 'ERROR: Directory not found!';
msg1 = 'Cannot find directory "';
msg2 = '", please enter full path.';
msg = [msg1,selected_dir,msg2];
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
% preserve old mouse pointer, and make current pointer as 'Busy'
% it is useful to execute slow process
%
old_pointer = get(gcf,'Pointer');
set(gcf,'Pointer','watch');
if (sum([dir_struct.isdir]) < 3) % could be no subdir
set(gcbo,'max',2);
dir_list = dir_struct(find([dir_struct.isdir] == 1));
if (dir_list(1).name == '.' & dir_list(2).name == '..') % no subdir
set(gcbo,'Value',selected_dir_idx);
setappdata(gcf,'selected_dir', selected_dir);
setappdata(gcf,'duplicate_img',0);
saved_map = getappdata(gcf,'saved_map');
% preload saved_map list when reach no subdir situation
if isempty(saved_map) % create saved_map list
num_dir = size(listed_dir,1);
for i = 3:num_dir
selected_dir2 = [get(h,'String') filesep listed_dir{i}];
ListDirectory(selected_dir2,0);
set(gcbo,'user',i);
if i == 3
SetupSubjectImageMap(1,0);
end
SetupSubjectImageMap(1,3);
end
ListDirectory(selected_dir,0);
set(gcbo,'user',get(gcbo,'value'));
SetupSubjectImageMap(1,3);
else % just display subject file
set(gcbo,'user',get(gcbo,'value'));
SetupSubjectImageMap(0,0);
end
DisplayConditions(0);
%msg = 'INFO: No more subdirectory.';
%set(findobj(gcf,'Tag','MessageLine'),'String',msg);
set(gcf,'Pointer',old_pointer);
return;
end
else
set(gcbo,'max',1);
setappdata(gcf,'saved_map',{}); % clean saved subj map list
end
setappdata(gcf,'selected_dir', selected_dir);
h = findobj(gcf,'Tag','editSelectedDir');
set(h,'String',selected_dir);
ListDirectory(selected_dir,1);
setappdata(gcf,'duplicate_img',0);
SetupSubjectImageMap(0,0);
DisplayConditions(0);
set(gcf,'Pointer',old_pointer);
return; % UpdateDirectoryList
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% UpdateImageFilter: Respond to modifying Image Filter Edit
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function UpdateImageFilter()
imgfile_filter = get(findobj(gcf,'Tag','editImageFilter'),'String');
setappdata(gcf,'imgfile_filter', imgfile_filter);
selected_dir = getappdata(gcf,'selected_dir');
ListDirectory(selected_dir,1);
setappdata(gcf,'duplicate_img',0);
setappdata(gcf,'saved_map',{}); % clean saved subj map list
SetupSubjectImageMap(0,0);
DisplayConditions(0);
return; % UpdateImageFilter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% UpdateSelectedDir: Respond to modifying Selected Directory Edit
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function UpdateSelectedDir()
selected_dir = get(findobj(gcf,'Tag','editSelectedDir'),'String');
setappdata(gcf,'selected_dir',selected_dir);
ListDirectory(selected_dir,1);
setappdata(gcf,'duplicate_img',0);
setappdata(gcf,'saved_map',{}); % clean saved subj map list
SetupSubjectImageMap(0,0);
DisplayConditions(0);
return; % UpdateSelectedDir
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% select_imagefile: Respond to the selection of Image File combo box
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function select_imagefile
h1 = findobj(gcf,'Tag','listDirs');
selected_dir_idx = get(h1,'Value');
listed_dir = get(h1,'String');
% Can't select subject file while selecting multiple subject directories
%
if length(selected_dir_idx) > 1
msg = 'For this action, please select one directory only.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
setappdata(gcf,'duplicate_img',0); % reset. added for 'done' check
subj_files_row = getappdata(gcf, 'subj_files_row');
imgfile_hdls = getappdata(gcf, 'imgfile_hlist');
imgfile_filter = getappdata(gcf, 'imgfile_filter');
selected_dir = getappdata(gcf, 'selected_dir');
row_idx = get(gcbo, 'UserData');
cond_idx = str2num(get(imgfile_hdls(row_idx, 1), 'String'));
% get new subject order from dialog box generated by rri_getfile1
%
subject_file = rri_getfile1('Select a Subject', ...
selected_dir, imgfile_filter, get(gcbo, 'string'));
if isempty(subject_file)
return;
end
set(gcbo,'string',subject_file);
subj_files_row{cond_idx} = subject_file;
setappdata(gcf, 'subj_files_row', subj_files_row);
% update saved map with current subject file order
%
saved_map = getappdata(gcf,'saved_map');
saved_map{selected_dir_idx} = subj_files_row;
num_dir = size(listed_dir,1);
h2 = findobj(gcf,'Tag','editSelectedDir');
setappdata(gcf,'saved_map',saved_map); % save subj map list
if get(findobj(gcf,'Tag','chkSubjConsistency'),'value')
% update all saved map, using the above subject order as sample
%
for i = 3:num_dir
selected_dir2 = [get(h2,'String') filesep listed_dir{i}];
ListDirectory(selected_dir2,0);
set(h1,'user',i);
SetupSubjectImageMap(1,selected_dir_idx);
end
% update current set_files_row (inside SetupSubjectImageMap)
%
ListDirectory(selected_dir,0);
h1 = findobj(gcf,'Tag','listDirs');
set(h1,'user',get(h1,'value'));
SetupSubjectImageMap(1,selected_dir_idx);
end
return; % select_imagefile
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% DoneButtonPressed: Respond to the DONE button. This is the place
% to check all user entry, and make sure there is no mistake.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function DoneButtonPressed()
num_subj_init = getappdata(gcf,'num_subj_init');
subj_files = getappdata(gcf,'subj_files');
h = findobj(gcf,'Tag','listDirs');
selected_dir_idx = get(h,'Value');
% the following block executed when user choose multiple subjects
%
if length(selected_dir_idx) > 1
saved_map = getappdata(gcf,'saved_map');
saved_map = saved_map([selected_dir_idx]);
first_select = char(saved_map{1});
first_select = lower(first_select(:,num_subj_init+1:end));
% combine cell to make it look like 'subj_files' field in session_info
%
subj_files_row = {};
for i=1:length(saved_map)
if get(findobj(gcf,'Tag','chkSubjConsistency'),'value')
curr_select = char(saved_map{i});
curr_select = lower(curr_select(:,num_subj_init+1:end));
if ~isequal(curr_select,first_select)
msg = 'Subject file name convention is not consistent.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
end
subj_files_row = [subj_files_row saved_map{i}];
end
selected_dir = getappdata(gcf,'grp_selected_dir');
condnum = size(subj_files_row, 1);
subjnum = size(subj_files_row, 2);
for i = 1:condnum-1
for j = i+1:condnum
for n = 1:subjnum
if length(subj_files_row{i,n}) == length(subj_files_row{j,n}) ...
& subj_files_row{i,n} == subj_files_row{j,n}
setappdata(gcf,'duplicate_img', 1);
msg = 'ERROR: No subject should be duplicated.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
end
end
end
setappdata(gcf,'selected_dir',selected_dir);
setappdata(gcf,'subj_files_row',subj_files_row);
uiresume;
end
if(isempty(getappdata(gcf,'filtered_files'))) % no image file available
msg = 'ERROR: No subject file in the selected directory.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
subj_files_row = getappdata(gcf, 'subj_files_row');
condnum = length(subj_files_row);
for i = 1:condnum-1
for j = i+1:condnum
if isempty(subj_files_row{i}) | isempty(subj_files_row{j})
msg = 'ERROR: All condition need a subject.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
if length(subj_files_row{i}) == length(subj_files_row{j}) ...
& subj_files_row{i} == subj_files_row{j}
setappdata(gcf,'duplicate_img', 1);
msg = 'ERROR: No subject should be duplicated.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
end
end
if get(findobj(gcf,'Tag','chkSubjConsistency'),'value') & ...
~isempty(subj_files)
first_select = char(subj_files(:, 1));
first_select = lower(first_select(:,num_subj_init+1:end));
curr_select = char(subj_files_row(:, 1));
curr_select = lower(curr_select(:,num_subj_init+1:end));
if ~isequal(curr_select,first_select)
msg = 'Subject file name convention is not consistent.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
end
if(getappdata(gcf,'duplicate_img'))
msg = 'ERROR: No subject should be duplicated.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
else
uiresume;
end
return; % DoneButtonPressed
%----------------------------------------------------------------------------
function delete_fig
try
load('pls_profile');
pls_profile = which('pls_profile.mat');
getsubject_pos = get(gcbf,'position');
save(pls_profile, '-append', 'getsubject_pos');
catch
end
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -