source: aedes_roi_copy_gui.m

Last change on this file was 155, checked in by tjniskan, 7 years ago
  • Added support for multiple monitor systems

M aedes_inputdlg.m
M aedes_roi_copy_gui.m
A aedes_dialoglocation.m
M aedes_readfidprefs.m
M aedes_rotateflip.m
M aedes_resviewer.m
M aedes.m
M aedes_helpabout.m
M plugins/fat_analysis.m
M plugins/copy_data_to_workspace.m
M aedes_export_gui.m
M aedes_headerbrowser.m
M aedes_revision.m
M aedes_juigetfiles.m
M aedes_editstack.m

File size: 12.0 KB
Line 
1function [slice_ind,dir_ind,roilabel,copytype] = aedes_roi_copy_gui(ROI,roi_ind)
2% AEDES_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, 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=aedes_gui_defaults;
71GD.col.mainfig = FigColor;%[236 233 216]./255;
72fig_h = 415;%395;
73fig_w = 250;
74fig_location = aedes_dialoglocation([fig_w,fig_h]);
75fig_pos = [fig_location(1) fig_location(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)-105-15 240 105],...
138                      'title','Copy Direction',...
139                      'backgroundcolor',GD.col.mainfig);
140H.XRADIO = uicontrol('parent',H.DIRBTNGRP,...
141                     'units','pixel',...
142                     'position',[15 70 150 15],...
143                     'style','radio',...
144                     'string','X direction (slice)',...'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 (column)',...'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 (row)',...'value',0,...
159                     'backgroundcolor',GD.col.mainfig);
160tmp=get(H.ZRADIO,'position');
161H.VRADIO = uicontrol('parent',H.DIRBTNGRP,...
162                     'units','pixel',...
163                     'position',[15 tmp(2)-20 150 15],...
164                     'style','radio',...
165                     'string','V direction (volume)',...'value',0,...
166                     'backgroundcolor',GD.col.mainfig,...
167                                         'enable','off');
168if size(ROI(1).voxels{1},4)>1
169  set(H.VRADIO,'enable','on')
170  set(H.DIRBTNGRP,'SelectedObject',H.VRADIO)
171else
172  set(H.DIRBTNGRP,'SelectedObject',H.XRADIO)
173end
174tmp=get(H.DIRBTNGRP,'position');
175
176
177%% Copy type btngroup
178H.CPTYPEGRP = uibuttongroup('parent',fh,...
179                            'units','pixels',...
180                            'position',[5 tmp(2)-70-10 240 70],...
181                            'title','Copy type',...
182                            'backgroundcolor',GD.col.mainfig);
183H.APPENDRADIO = uicontrol('parent',H.CPTYPEGRP,...
184                          'units','pixel',...
185                          'position',[15 35 150 15],...
186                          'style','radio',...
187                          'string','Append',...
188                          'backgroundcolor',GD.col.mainfig);
189tmp=get(H.APPENDRADIO,'position');
190H.OVERWRITERADIO = uicontrol('parent',H.CPTYPEGRP,...
191                             'units','pixel',...
192                             'position',[15 tmp(2)-25 80 15],...
193                             'style','radio',...
194                             'string','Overwrite',...
195                             'backgroundcolor',GD.col.mainfig);
196set(H.CPTYPEGRP,'SelectedObject',H.APPENDRADIO)
197%if ~isMixedType
198%  set([H.APPENDRADIO,H.OVERWRITERADIO],'enable','off')
199%end
200%% Slice selection btngroup
201tmp=get(H.CPTYPEGRP,'position');
202H.SLBTNGRP = uibuttongroup('parent',fh,...
203                     'units','pixels',...
204                     'position',[5 tmp(2)-70-10 240 70],...
205                     'title','Copy ROI to...',...
206                     'backgroundcolor',GD.col.mainfig);
207
208H.ALLRADIO = uicontrol('parent',H.SLBTNGRP,...
209                       'units','pixel',...
210                       'position',[15 35 150 15],...
211                       'style','radio',...
212                       'string','All slices/volumes',...
213                       'backgroundcolor',GD.col.mainfig);
214tmp=get(H.ALLRADIO,'position');
215
216H.CUSTOMRADIO = uicontrol('parent',H.SLBTNGRP,...
217                          'units','pixel',...
218                          'position',[15 tmp(2)-25 80 15],...
219                          'style','radio',...
220                          'string','Custom',...
221                          'backgroundcolor',GD.col.mainfig);
222tmp=get(H.CUSTOMRADIO,'position');
223H.CUSTOMEDIT = uicontrol('parent',H.SLBTNGRP,...
224                         'units','pixel',...
225                         'position',[85 tmp(2) 145 18],...
226                         'style','edit',...
227                         'backgroundcolor','w',...
228                         'horizontalalign','left',...
229                         'string','1:end',...
230                         'enable','off');
231set(H.SLBTNGRP,'SelectedObject',H.ALLRADIO,...
232               'SelectionChangeFcn',@l_SelectCustom)
233
234tmp=get(H.SLBTNGRP,'position');
235H.CANCELBTN = uicontrol('parent',fh,...
236                        'units','pixel',...
237                        'position',[175 tmp(2)-10-25 70 25],...
238                        'string','Cancel',...
239                        'callback',@l_Cancel);
240H.OKBTN = uicontrol('parent',fh,...
241                    'units','pixel',...
242                    'position',[100 tmp(2)-10-25 70 25],...
243                    'string','OK',...
244                    'callback',@l_CheckValues);
245
246%% If the ROI is for mixed type data, disable Y and Z buttons
247if isMixedType
248  set([H.YRADIO,H.ZRADIO],'enable','off','value',0)
249  set(H.XRADIO,'value',1)
250end
251
252end % function H=l_DrawGUI()
253
254
255%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
256% Select ALL/CUSTOM slices
257%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
258  function l_SelectCustom(h,evd)
259 
260  if evd.NewValue==H.CUSTOMRADIO
261    set(H.CUSTOMEDIT,'enable','on')
262  else
263    set(H.CUSTOMEDIT,'enable','off')
264  end
265 
266  end % function l_SelectCustom(h,
267
268
269%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
270% Check values when OK is pressed
271%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
272  function l_CheckValues(h,evd)
273 
274  %% Get handle to the selected radio button
275  h=get(H.DIRBTNGRP,'SelectedObject');
276 
277  %% Get ROI label
278  roi_vals=get(H.ROILBOX,'value');
279  if isempty(roi_vals)
280    warndlg('No ROI(s) selected! Please, select at least one ROI.',...
281            'Error','modal');
282    return
283  end
284  str=get(H.ROILBOX,'string');
285  roilabel = {str{roi_vals}};
286 
287  %% ROI index
288  %roi_ind=find(strcmp({ROI(:).label},str));
289  roi_ind=1;
290 
291  %% Copy Type
292  hCpType=get(H.CPTYPEGRP,'SelectedObject');
293  if hCpType==H.APPENDRADIO
294    copytype='append';
295  else
296    copytype='overwrite';
297  end
298 
299  %% Determine ROI size in the selected direction
300  if isMixedType
301    sz=length(ROI(roi_ind).voxels);
302  else 
303    if h==H.XRADIO
304      sz=size(ROI(roi_ind).voxels{1},3);
305      dir_ind=1;
306    elseif h==H.YRADIO
307      sz=size(ROI(roi_ind).voxels{1},2);
308      dir_ind=2;
309        elseif h==H.ZRADIO
310      sz=size(ROI(roi_ind).voxels{1},1);
311      dir_ind=3;
312        elseif h==H.VRADIO
313          sz=size(ROI(roi_ind).voxels{1},4);
314      dir_ind=4;
315    end
316  end
317 
318  %% Check if all slices or custom radio button is selected
319  h2=get(H.SLBTNGRP,'SelectedObject');
320 
321  if h2==H.ALLRADIO
322    slice_ind = 1:sz;
323  else %% Parse the custom string
324   
325    %% Get custom string
326    custom_str = get(H.CUSTOMEDIT,'string');
327   
328    %% Check that the string contains only valid characters
329    tmp_ind=ismember(custom_str,'0123456789end:,*+-/');
330    if ~all(tmp_ind)
331      h=warndlg(['The custom text "' custom_str '" contains invalid characters'],...
332                'Invalid expression','modal');
333      uiwait(h)
334      return
335    end
336   
337    % replace 'end' statement with ROI size
338    custom_str=strrep(custom_str,'end','sz');
339   
340    % Try to evaluate the index string
341    try
342      eval(['slice_ind=[' custom_str '];']);
343    catch
344      h=warndlg({['Could not evaluate expression "' custom_str '".'],...
345                 ['Custom string has to be a valid Matlab vector expression.']},...
346                'Could not evaluate expression','modal');
347      uiwait(h)
348      return
349    end
350   
351    % Sort indices and make sure that all indices are unique
352    slice_ind=unique(slice_ind);
353   
354    % Make sure that min>=1 and max<=sz
355    if max(slice_ind)>sz
356      h=warndlg({['Could not evaluate expression "' custom_str '".'],...
357                 'Maximum slice index exceeds the number of slices.'},...
358                'Could not evaluate expression','modal');
359      uiwait(h)
360      return
361    end
362    if min(slice_ind)<1
363      h=warndlg({['Could not evaluate expression "' custom_str '".'],...
364                 ['Slice indices have to be larger than zero.']},...
365                'Could not evaluate expression','modal');
366      uiwait(h)
367      return
368    end
369   
370  end
371 
372  % If this point is reached, all is well and we can exit normally
373  delete(H.FH)
374 
375  end % function l_CheckValues(h,
376
377
378%%%%%%%%%%%%%%%%%%%%%%
379% Cancel is pressed
380%%%%%%%%%%%%%%%%%%%%%%
381  function l_Cancel(h,evd)
382 
383  %% Set the cancel flag and resume with exit
384  cancel=1;
385 
386  delete(H.FH)
387 
388  end % function l_Cancel(h,
389end
Note: See TracBrowser for help on using the repository browser.

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