source: an2_roi_copy_gui.m @ 15

Last change on this file since 15 was 15, checked in by tjniskan, 12 years ago
  • Almost all of the functions used by Analyze2 start now with a prefix

"an2_".

  • Deleted some depricated functions.

M analyze2.m
D cellsprintf.m
M spectrsum.m
A an2_cellsprintf.m
D calc_wait.m
A an2_calc_wait.m
D getnicedialoglocation.m
A an2_getnicedialoglocation.m
A an2_iseven.m
D iseven.m
M an2_revision.m
D checkcthdr.m
A an2_checkcthdr.m
D fitmaps.m
A an2_fitmaps.m
A an2_read_nifti.m
D read_nifti.m
D mrdread.m
A an2_mrdread.m
D res2table.m
A an2_copy_roi.m
D copy_roi.m
D helpabout.m
A an2_helpabout.m
A an2_res2table.m
D readfid.m
A an2_readfid.m
D readtab.m
A an2_readtab.m
A an2_killfigs.m
D killfigs.m
D roi_stats.m
A an2_roi_stats.m
A an2_juigetfiles.m
D juigetfiles.m
A an2_gui_defaults.m
D gui_defaults.m
D errordump.m
A an2_errordump.m
D export_gui.m
A an2_export_gui.m
D check_file_exist.m
A an2_check_file_exist.m
A an2_cellwrite.m
D cellwrite.m
A an2_rot3d.m
A an2_wbar.m
D wbar.m
D readfdf.m
D rot3d.m
A an2_readfdf.m
M b1_map.m
D uigetfiles.m
D viewprocpar.m
D cdata.mat
A an2_viewprocpar.m
A an2_cdata.mat
A an2_readprocpar.m
D readprocpar.m
A an2_data_read.m
D data_read.m
D surread.m
D deblanke.m
A an2_surread.m
D maptool.m
D resviewer.m
A an2_resviewer.m
A an2_maptool.m
D mriread.m
A an2_mriread.m
A an2_inputdlg.m
D roi_copy_gui.m
A an2_roi_copy_gui.m
D setdefaultbutton.m
D readctdata.m
A an2_readctdata.m
D readfidprefs.m
A an2_readfidprefs.m
D roi_inputdlg.m
M addicon.m
D imaread.m
A an2_imaread.m
D saveres.m
A an2_saveres.m
D rotateflip.m
A an2_rotateflip.m
D editstack.m
A an2_editstack.m
D plugins.m
A an2_plugins.m
M makelcmraw.m
D write_nifti.m
A an2_write_nifti.m

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

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