source: an2_roi_copy_gui.m @ 41

Last change on this file since 41 was 39, checked in by tjniskan, 11 years ago
  • Added "Recent Files" quick access menu in File-menu
  • Fixed a bug in plugins/copy_data_to_workspace.m that made writing a

new name for a variable difficult

  • Fixed a bug in the file prefix editbox in an2_export_gui.m
  • Changed references to Analyze 2.0 in all license notices to Aedes.

The name change should now be complete...

M an2_export_gui.m
M an2_cellsprintf.m
M an2_calc_wait.m
M an2_check_file_exist.m
M an2_iseven.m
M an2_cellwrite.m
M an2_wbar.m
M an2_rot3d.m
M an2_readfdf.m
M an2_revision.m
M an2_viewprocpar.m
M an2_checkcthdr.m
M an2_readprocpar.m
M an2_fitmaps.m
M an2_read_nifti.m
M an2_data_read.m
M an2_resviewer.m
M an2_maptool.m
M aedes.m
M an2_res2table.m
M an2_copy_roi.m
M plugins/save_roi_as_mask.m
M plugins/write_difference_images.m
M plugins/plot_profile.m
M plugins/calculate_t2_map.m
M plugins/calculate_t1r_map.m
M plugins/view_kspace.m
M plugins/copy_data_to_workspace.m
M plugins/take_snapshot.m
M an2_inputdlg.m
M an2_roi_copy_gui.m
M an2_readctdata.m
M an2_readfid.m
M an2_readfidprefs.m
M an2_readtab.m
M an2_check_updates.m
M an2_killfigs.m
M an2_roi_stats.m
M an2_saveres.m
M an2_rotateflip.m
M an2_juigetfiles.m
M an2_gui_defaults.m
M an2_editstack.m
M an2_update.m
M an2_write_nifti.m

File size: 11.4 KB
Line 
1function [slice_ind,dir_ind,roilabel,copytype] = an2_roi_copy_gui(ROI,roi_ind)
2% AN2_ROI_COPY_GUI -
3%   
4%
5% Synopsis:
6%
7% Description:
8%
9% Examples:
10%
11% See also:
12%
13
14% This function is a part of Aedes - A graphical tool for analyzing
15% medical images
16%
17% Copyright (C) 2006 Juha-Pekka Niskanen <Juha-Pekka.Niskanen@uku.fi>
18%
19% Department of Physics, (or Department of Neurobiology)
20% University of Kuopio, FINLAND
21%
22% This program may be used under the terms of the GNU General Public
23% License version 2.0 as published by the Free Software Foundation
24% and appearing in the file LICENSE.TXT included in the packaging of
25% this program.
26%
27% This program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
28% WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
29
30
31% Initialize public variables
32H = [];
33slice_ind=[];
34roilabel = [];
35copytype=[];
36dir_ind = [];
37cancel=0;
38
39%% Determine if ROI is for normal or mixed type data
40if length(ROI(1).voxels)>1
41  isMixedType = true;
42else
43  isMixedType = false;
44end
45
46H = l_DrawGUI(ROI,roi_ind);
47fig_h = H.FH;
48
49%% Wait for exit
50waitfor(fig_h)
51if cancel
52  slice_ind=[];
53  roilabel=[];
54  dir_ind=[];
55end
56clear H
57return
58
59%%%%%%%%%%%%%%%%%%%%%%%%%
60% Draw GUI
61%%%%%%%%%%%%%%%%%%%%%%%%%
62function H=l_DrawGUI(ROI,roi_ind)
63
64%% Parse ROI structure
65roi_labels = {ROI(:).label};
66
67
68%% Load default font and colors
69FigColor=get(0,'DefaultUicontrolBackgroundcolor');
70GD=an2_gui_defaults;
71GD.col.mainfig = FigColor;%[236 233 216]./255;
72fig_h = 395;
73fig_w = 250;
74scrsz = get(0,'screensize');
75fig_pos = [scrsz(3)/2-fig_w/2 scrsz(4)/2-fig_h/2 fig_w fig_h];
76
77
78%% The main figure
79H.FH = figure('position',fig_pos,...
80              'Units','Pixel', ...
81              'Name','Copy ROI', ...
82              'Numbertitle','off', ...
83              'Tag','roi_copy_fig', ...
84              'Color',FigColor,...%[236 233 216]./255, ...
85              'Toolbar','none', ...
86              'Menubar','none', ...
87              'DoubleBuffer','on', ...
88              'DockControls','off',...
89              'renderer','painters',...
90              'KeyPressFcn','',...
91              'resize','off',...
92              'windowstyle','modal');
93fh = H.FH;
94
95%% Select ROI text
96h1 = uicontrol('parent',fh,...
97               'units','pixels',...
98               'position',[10 fig_h-10-15 170 15],...
99               'style','text',...
100               'horizontalalign','left',...
101               'backgroundcolor',FigColor,...[236 233 216]./255,...
102               'string','Select ROI(s) to be copied');
103
104%% ROI label popupmenu
105tmp=get(h1,'extent');
106H.ROILBOX = uicontrol('parent',fh,...
107                      'units','pixels',...
108                      'position',[10 fig_h-25-65 230 65],...
109                      'style','listbox',...
110                      'string',roi_labels,...
111                      'value',roi_ind,...
112                      'min',0,'max',2,...
113                      'backgroundcolor','w');
114
115
116tmp=get(H.ROILBOX,'position');
117%% Source select popup
118% $$$ H.SOURCEPOPUP = uicontrol('parent',fh,...
119% $$$                           'units','pixels',...
120% $$$                           'position',[tmp(1) tmp(2)-tmp(4)-5 tmp(3) tmp(4)],...
121% $$$                           'style','popup',...
122% $$$                           'string',,...
123% $$$                           'value',1,...
124% $$$                           'backgroundcolor','w');
125
126%% Direction uipanel
127% $$$ h1 = uipanel('parent',fh,...
128% $$$              'units','pixels',...
129% $$$              'position',[5 tmp(2)-90-15 240 90],...
130% $$$              'title','Direction',...
131% $$$              'backgroundcolor',GD.col.mainfig);
132% $$$ tmp=get(h1,'position');
133
134%% Button group for direction radiobuttons
135H.DIRBTNGRP = uibuttongroup('parent',fh,...
136                      'units','pixels',...
137                      'position',[5 tmp(2)-85-15 240 85],...
138                      'title','Copy Direction',...
139                      'backgroundcolor',GD.col.mainfig);
140H.XRADIO = uicontrol('parent',H.DIRBTNGRP,...
141                     'units','pixel',...
142                     'position',[15 50 150 15],...
143                     'style','radio',...
144                     'string','X direction',...'value',1,...
145                     'backgroundcolor',GD.col.mainfig);
146tmp=get(H.XRADIO,'position');
147H.YRADIO = uicontrol('parent',H.DIRBTNGRP,...
148                     'units','pixel',...
149                     'position',[15 tmp(2)-20 150 15],...
150                     'style','radio',...
151                     'string','Y direction',...'value',0,...
152                     'backgroundcolor',GD.col.mainfig);
153tmp=get(H.YRADIO,'position');
154H.ZRADIO = uicontrol('parent',H.DIRBTNGRP,...
155                     'units','pixel',...
156                     'position',[15 tmp(2)-20 150 15],...
157                     'style','radio',...
158                     'string','Z direction',...'value',0,...
159                     'backgroundcolor',GD.col.mainfig);
160set(H.DIRBTNGRP,'SelectedObject',H.XRADIO)
161tmp=get(H.DIRBTNGRP,'position');
162
163
164%% Copy type btngroup
165H.CPTYPEGRP = uibuttongroup('parent',fh,...
166                            'units','pixels',...
167                            'position',[5 tmp(2)-70-10 240 70],...
168                            'title','Copy type',...
169                            'backgroundcolor',GD.col.mainfig);
170H.APPENDRADIO = uicontrol('parent',H.CPTYPEGRP,...
171                          'units','pixel',...
172                          'position',[15 35 150 15],...
173                          'style','radio',...
174                          'string','Append',...
175                          'backgroundcolor',GD.col.mainfig);
176tmp=get(H.APPENDRADIO,'position');
177H.OVERWRITERADIO = uicontrol('parent',H.CPTYPEGRP,...
178                             'units','pixel',...
179                             'position',[15 tmp(2)-25 80 15],...
180                             'style','radio',...
181                             'string','Overwrite',...
182                             'backgroundcolor',GD.col.mainfig);
183set(H.CPTYPEGRP,'SelectedObject',H.APPENDRADIO)
184if ~isMixedType
185  set([H.APPENDRADIO,H.OVERWRITERADIO],'enable','off')
186end
187%% Slice selection btngroup
188tmp=get(H.CPTYPEGRP,'position');
189H.SLBTNGRP = uibuttongroup('parent',fh,...
190                     'units','pixels',...
191                     'position',[5 tmp(2)-70-10 240 70],...
192                     'title','Copy ROI to...',...
193                     'backgroundcolor',GD.col.mainfig);
194
195H.ALLRADIO = uicontrol('parent',H.SLBTNGRP,...
196                       'units','pixel',...
197                       'position',[15 35 150 15],...
198                       'style','radio',...
199                       'string','All slices',...
200                       'backgroundcolor',GD.col.mainfig);
201tmp=get(H.ALLRADIO,'position');
202
203H.CUSTOMRADIO = uicontrol('parent',H.SLBTNGRP,...
204                          'units','pixel',...
205                          'position',[15 tmp(2)-25 80 15],...
206                          'style','radio',...
207                          'string','Custom',...
208                          'backgroundcolor',GD.col.mainfig);
209tmp=get(H.CUSTOMRADIO,'position');
210H.CUSTOMEDIT = uicontrol('parent',H.SLBTNGRP,...
211                         'units','pixel',...
212                         'position',[85 tmp(2) 145 18],...
213                         'style','edit',...
214                         'backgroundcolor','w',...
215                         'horizontalalign','left',...
216                         'string','1:end',...
217                         'enable','off');
218set(H.SLBTNGRP,'SelectedObject',H.ALLRADIO,...
219               'SelectionChangeFcn',@l_SelectCustom)
220
221tmp=get(H.SLBTNGRP,'position');
222H.CANCELBTN = uicontrol('parent',fh,...
223                        'units','pixel',...
224                        'position',[175 tmp(2)-10-25 70 25],...
225                        'string','Cancel',...
226                        'callback',@l_Cancel);
227H.OKBTN = uicontrol('parent',fh,...
228                    'units','pixel',...
229                    'position',[100 tmp(2)-10-25 70 25],...
230                    'string','OK',...
231                    'callback',@l_CheckValues);
232
233%% If the ROI is for mixed type data, disable Y and Z buttons
234if isMixedType
235  set([H.YRADIO,H.ZRADIO],'enable','off','value',0)
236  set(H.XRADIO,'value',1)
237end
238
239end % function H=l_DrawGUI()
240
241
242%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
243% Select ALL/CUSTOM slices
244%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
245  function l_SelectCustom(h,evd)
246 
247  if evd.NewValue==H.CUSTOMRADIO
248    set(H.CUSTOMEDIT,'enable','on')
249  else
250    set(H.CUSTOMEDIT,'enable','off')
251  end
252 
253  end % function l_SelectCustom(h,
254
255
256%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
257% Check values when OK is pressed
258%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
259  function l_CheckValues(h,evd)
260 
261  %% Get handle to the selected radio button
262  h=get(H.DIRBTNGRP,'SelectedObject');
263 
264  %% Get ROI label
265  roi_vals=get(H.ROILBOX,'value');
266  if isempty(roi_vals)
267    warndlg('No ROI(s) selected! Please, select at least one ROI.',...
268            'Error','modal');
269    return
270  end
271  str=get(H.ROILBOX,'string');
272  roilabel = {str{roi_vals}};
273 
274  %% ROI index
275  %roi_ind=find(strcmp({ROI(:).label},str));
276  roi_ind=1;
277 
278  %% Copy Type
279  hCpType=get(H.CPTYPEGRP,'SelectedObject');
280  if hCpType==H.APPENDRADIO
281    copytype='append';
282  else
283    copytype='overwrite';
284  end
285 
286  %% Determine ROI size in the selected direction
287  if isMixedType
288    sz=length(ROI(roi_ind).voxels);
289  else 
290    if h==H.XRADIO
291      sz=size(ROI(roi_ind).voxels{1},3);
292      dir_ind=1;
293    elseif h==H.YRADIO
294      sz=size(ROI(roi_ind).voxels{1},2);
295      dir_ind=2;
296    else
297      sz=size(ROI(roi_ind).voxels{1},1);
298      dir_ind=3;
299    end
300  end
301 
302  %% Check if all slices or custom radio button is selected
303  h2=get(H.SLBTNGRP,'SelectedObject');
304 
305  if h2==H.ALLRADIO
306    slice_ind = 1:sz;
307  else %% Parse the custom string
308   
309    %% Get custom string
310    custom_str = get(H.CUSTOMEDIT,'string');
311   
312    %% Check that the string contains only valid characters
313    tmp_ind=ismember(custom_str,'0123456789end:,*+-/');
314    if ~all(tmp_ind)
315      h=warndlg(['The custom text "' custom_str '" contains invalid characters'],...
316                'Invalid expression','modal');
317      uiwait(h)
318      return
319    end
320   
321    % replace 'end' statement with ROI size
322    custom_str=strrep(custom_str,'end','sz');
323   
324    % Try to evaluate the index string
325    try
326      eval(['slice_ind=[' custom_str '];']);
327    catch
328      h=warndlg({['Could not evaluate expression "' custom_str '".'],...
329                 ['Custom string has to be a valid Matlab vector expression.']},...
330                'Could not evaluate expression','modal');
331      uiwait(h)
332      return
333    end
334   
335    % Sort indices and make sure that all indices are unique
336    slice_ind=unique(slice_ind);
337   
338    % Make sure that min>=1 and max<=sz
339    if max(slice_ind)>sz
340      h=warndlg({['Could not evaluate expression "' custom_str '".'],...
341                 'Maximum slice index exceeds the number of slices.'},...
342                'Could not evaluate expression','modal');
343      uiwait(h)
344      return
345    end
346    if min(slice_ind)<1
347      h=warndlg({['Could not evaluate expression "' custom_str '".'],...
348                 ['Slice indices have to be larger than zero.']},...
349                'Could not evaluate expression','modal');
350      uiwait(h)
351      return
352    end
353   
354  end
355 
356  % If this point is reached, all is well and we can exit normally
357  delete(H.FH)
358 
359  end % function l_CheckValues(h,
360
361
362%%%%%%%%%%%%%%%%%%%%%%
363% Cancel is pressed
364%%%%%%%%%%%%%%%%%%%%%%
365  function l_Cancel(h,evd)
366 
367  %% Set the cancel flag and resume with exit
368  cancel=1;
369 
370  delete(H.FH)
371 
372  end % function l_Cancel(h,
373end
Note: See TracBrowser for help on using the repository browser.

Powered by Trac 1.0.9.Copyright © Juha-Pekka Niskanen 2008