source: an2_resviewer.m @ 53

Last change on this file since 53 was 45, checked in by tjniskan, 11 years ago
  • Changed a small thing in license notices

M an2_export_gui.m
M an2_cellsprintf.m
M an2_getfilefilter.m
M an2_calc_wait.m
M an2_smiswrite.m
M misclib/spectrsum.m
M misclib/shiftind.m
M misclib/nifti4dto3d.m
M misclib/nifti3dto4d.m
M misclib/dcm_info.m
M misclib/addicon.m
M misclib/makelcmraw.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_smisread.m
M an2_resviewer.m
M an2_maptool.m
M aedes.m
M an2_helpabout.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_errordump.m
M an2_update.m
M an2_write_nifti.m

File size: 29.3 KB
Line 
1function an2_resviewer(Res_in)
2% AN2_RESVIEWER - View and convert Aedes statistics results
3%   
4%
5% Synopsis:
6%       an2_resviewer(Res)
7%
8% Description:
9%       The AN2_RESVIEWER function opens a graphical user interface (GUI) for
10%       handling Res-structures or *.res files saved from AEDES. If
11%       the function is called with the optional input argument Res, the
12%       GUI opens in a single-file mode. Multi-file mode is used if the
13%       function is called without input arguments.
14%
15% Examples:
16%       reviewer % Open the user interface
17%
18%       % or
19%
20%       tmp=load('resfile.res','mat'); % Read saved Res-file
21%       Res=tmp.Res;                   
22%       an2_resviewer(Res)                 % Open the loaded Res-structure
23%
24% See also:
25%       AEDES
26
27% This function is a part of Aedes - A graphical tool for analyzing
28% medical images
29%
30% Copyright (C) 2006 Juha-Pekka Niskanen <Juha-Pekka.Niskanen@uku.fi>
31%
32% Department of Physics, Department of Neurobiology
33% University of Kuopio, FINLAND
34%
35% This program may be used under the terms of the GNU General Public
36% License version 2.0 as published by the Free Software Foundation
37% and appearing in the file LICENSE.TXT included in the packaging of
38% this program.
39%
40% This program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
41% WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
42
43
44% Public variables
45H = [];   % Object handles
46Dat = []; % GUI internal variables
47Dat.SingleFileMode = false;
48Dat.Res=[];
49
50% If Res-structure is given as an input argument, go to "single-file" mode
51if nargin==1
52  % Check that the Res structure is valid
53  if isstruct(Res_in) && isfield(Res_in,'Stat') && ...
54        isfield(Res_in,'FileInfo') && isfield(Res_in,'DateTime')
55    Dat.SingleFileMode = true;
56    Dat.Res = Res_in;
57  else
58    error('The Res-structure is not valid!')
59  end
60 
61elseif nargin>1
62  error('Too many input arguments')
63end
64
65l_DrawGUI;
66if Dat.SingleFileMode
67  l_PreviewFile([],[])
68end
69
70%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
71%
72% Draw GUI objects
73%
74%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
75function l_DrawGUI
76 
77%% Load default font and colors
78  GD=an2_gui_defaults;
79 
80  % Position figure to the center of the screen
81  scrsz = get(0,'screensize');
82  fig_w = 600;
83  fig_h = 680;
84  fig_pos = [scrsz(3)/2-fig_w/2 scrsz(4)/2-fig_h/2 fig_w fig_h];
85 
86  %% Main Figure ----------------------------
87  H.MAINFIG = figure('Units','Pixel', ...
88                     'position',fig_pos,...
89                     'Name','Results viewer', ...
90                     'Numbertitle','off', ...
91                     'Tag','resview_fig', ...
92                     'Color',GD.col.mainfig, ...
93                     'Toolbar','none', ...
94                     'Menubar','none', ...
95                     'DoubleBuffer','on', ...
96                     'DockControls','off',...
97                     'renderer','painters',...
98                     'KeyPressFcn','',...
99                     'CloseRequestFcn',@l_Quit,...
100                     'Handlevisibility','off');
101 
102  %% Options uipanel ----------------------------
103  H.MAIN_UIPANEL = uipanel('parent',H.MAINFIG,...
104                           'units','pixel',...
105                           'position',[10 fig_h-290 fig_w-2*10 280],...
106                                                   'backgroundcolor',GD.col.frame);
107 
108  %% Output directory and browse button --------
109  try
110    out_str = getpref('Aedes','PutXLSFileDir');
111  catch
112    out_str = pwd;
113  end
114  if Dat.SingleFileMode
115    edit_str = '';
116    enabled = 'off';
117  else
118    edit_str = out_str;
119    enabled = 'on';
120  end
121  H.OUTDIR_EDIT=uicontrol('parent',H.MAIN_UIPANEL,...
122                          'style','edit',...
123                          'position',[10 230 480 20],...
124                          'backgroundcolor','w',...
125                          'horizontalalign','left',...
126                          'string',edit_str,...
127                          'userdata',out_str,...
128                          'callback',@l_CheckOutputDir,...
129                          'enable',enabled);
130  tmp = get(H.OUTDIR_EDIT,'position');
131  H.OUTDIR_TX = uicontrol('parent',H.MAIN_UIPANEL,...
132                          'style','text',...
133                          'position',[tmp(1) tmp(2)+tmp(4)+2 100 12],...
134                          'string','Output Folder',...
135                          'Horizontalalign','left',...
136                          'enable',enabled,...
137                                                  'backgroundcolor',GD.col.frame);
138  H.OUTPUT_BROWSE = uicontrol('parent',H.MAIN_UIPANEL,...
139                              'style','pushbutton',...
140                              'position',[tmp(1)+tmp(3)+5 tmp(2) 75 20],...
141                              'string','Browse...',...
142                              'callback',@l_BrowseFolders,...
143                              'enable',enabled);
144 
145 
146  %% Export file types uicontrols ----------------------------
147  H.EXPORT_FILETYPES_GRP = uibuttongroup('parent',H.MAIN_UIPANEL,...
148                                 'units','pixel',...
149                                 'position',[10 tmp(2)-70-5 250 70],...
150                                 'title','Export file types',...
151                                                                 'backgroundcolor',GD.col.frame);
152  H.OUTPUTTYPE_XLS = uicontrol('parent',H.EXPORT_FILETYPES_GRP,...
153                               'style','checkbox',...
154                               'position',[10 30 150 15],...
155                               'value',1,...
156                               'string','Excel sheet (XLS)',...
157                                                           'backgroundcolor',GD.col.frame);
158  tmp = get(H.OUTPUTTYPE_XLS,'position');
159  H.OUTPUTTYPE_TXT = uicontrol('parent',H.EXPORT_FILETYPES_GRP,...
160                               'style','checkbox',...
161                               'position',[10 tmp(2)-15-5 150 15],...
162                               'value',1,...
163                               'string','Text file (TXT)',...
164                                                           'backgroundcolor',GD.col.frame);
165 
166  %% Export options ------------------------------------------
167  tmp = get(H.EXPORT_FILETYPES_GRP,'position');
168  H.EXPORT_OPTIONS_GRP = uibuttongroup('parent',H.MAIN_UIPANEL,...
169                                       'units','pixel',...
170                                       'position',[10 tmp(2)-5-110 250 110],...
171                                       'title','Export options',...
172                                                                           'backgroundcolor',GD.col.frame);
173 
174  H.SORTBY_TX = uicontrol('parent',H.EXPORT_OPTIONS_GRP,...
175                          'units','pixel',...
176                          'position',[10 70 45 15],...
177                          'style','text',...
178                          'string','Sort by:',...
179                          'horizontalalign','left',...
180                                                  'backgroundcolor',GD.col.frame);
181  tmp=get(H.SORTBY_TX,'position');
182  H.SORTBY = uicontrol('parent',H.EXPORT_OPTIONS_GRP,...
183                       'units','pixel',...
184                       'position',[250-tmp(1)-10-100 tmp(2)+3 100 15],...
185                       'style','popup',...
186                       'string',{'ROI','File'},...
187                       'value',1,...
188                       'backgroundcolor','w',...
189                       'callback',@l_PreviewFile);
190 
191  H.DECSEPARATOR_TX = uicontrol('parent',H.EXPORT_OPTIONS_GRP,...
192                                'units','pixel',...
193                                'position',[tmp(1) tmp(2)-tmp(4)-10 ...
194                   100 15],...
195                                'style','text',...
196                                'string','Decimal separator:',...
197                                'horizontalalign','left',...
198                                                                'backgroundcolor',GD.col.frame);
199  tmp = get(H.DECSEPARATOR_TX,'position');
200  try
201        val=getpref('Aedes','ResViewerDecSep');
202  catch
203        val=1;
204        setpref('Aedes','ResViewerDecSep',1);
205  end
206  H.DECSEPARATOR = uicontrol('parent',H.EXPORT_OPTIONS_GRP,...
207                             'units','pixel',...
208                             'position',[250-tmp(1)-10-100 tmp(2)+3 100 15],...
209                             'style','popup',...
210                             'string',{', (comma)','. (point)'},...
211                             'value',val,...
212                             'backgroundcolor','w',...
213                             'callback',@l_PreviewFile);
214 
215  H.NUMDEC_TX =  uicontrol('parent',H.EXPORT_OPTIONS_GRP,...
216                                'units','pixel',...
217                                'position',[tmp(1) tmp(2)-tmp(4)-10 ...
218                      100 15],...
219                           'style','text',...
220                           'string','Number of decimals:',...
221                           'horizontalalign','left',...
222                                                   'backgroundcolor',GD.col.frame);
223  tmp = get(H.NUMDEC_TX,'position');
224  H.NUMDEC = uicontrol('parent',H.EXPORT_OPTIONS_GRP,...
225                       'units','pixel',...
226                       'position',[250-tmp(1)-10-100 tmp(2)-1 100 19],...
227                       'style','edit',...
228                       'string','3',...
229                       'backgroundcolor','w',...
230                       'callback',@l_PreviewFile);
231 
232 
233  %% Selected files -listbox ------------------------------------
234 
235  %% Disable multi-file selection in single-file mode
236  if Dat.SingleFileMode
237    isEnabled = 'off';
238  else
239    isEnabled = 'on';
240  end
241  btn_cdata = load('an2_cdata.mat');
242  tmp = get(H.EXPORT_FILETYPES_GRP,'position');
243  H.SELFILES_UIPANEL = uipanel('parent',H.MAIN_UIPANEL,...
244                               'units','pixel',...
245                               'position',[tmp(1)+tmp(3)+10 40 fig_w-2*10-2*10-tmp(1)-tmp(3) ...
246                   185],...
247                               'title','Selected Files',...
248                                                           'backgroundcolor',GD.col.frame);
249  tmp=get(H.SELFILES_UIPANEL,'position');
250  H.SELFILES_LBOX = uicontrol('parent',H.SELFILES_UIPANEL,...
251                              'units','pixel',...
252                              'position',[60 25 tmp(3)-60-20 tmp(4)-45],...
253                              'style','listbox',...
254                              'backgroundcolor','w',...
255                              'callback',@l_ListBoxCallBack,...
256                              'min',0,...
257                              'max',2,...
258                              'Enable',isEnabled);
259  H.SHOWPATH = uicontrol('parent',H.SELFILES_UIPANEL,...
260                         'units','pixel',...
261                         'position',[60 7 tmp(3)-60-20 15],...
262                         'style','checkbox',...
263                         'value',0,...
264                         'string','Show full path',...
265                         'callback',@l_ShowFullPath,...
266                                                 'backgroundcolor',GD.col.frame);
267 
268  H.ADDFILES = uicontrol('parent',H.SELFILES_UIPANEL,...
269                         'units','pixel',...
270                         'position',[10 tmp(4)-20-40 40 40],...
271                         'style','pushbutton',...
272                         'tooltip','Add files to list',...
273                         'CData',btn_cdata.cdata.add,...
274                         'callback',{@l_AddRemoveFiles,'add'},...
275                         'Enable',isEnabled);
276 
277  H.REMFILES = uicontrol('parent',H.SELFILES_UIPANEL,...
278                         'units','pixel',...
279                         'position',[10 tmp(4)-20-2*40-17 40 40],...
280                         'style','pushbutton',...
281                         'tooltip','Remove selected files from list',...
282                         'CData',btn_cdata.cdata.delete,...
283                         'callback',{@l_AddRemoveFiles,'remove'},...
284                         'Enable','off');
285 
286  H.REMALLFILES = uicontrol('parent',H.SELFILES_UIPANEL,...
287                            'units','pixel',...
288                            'position',[10 tmp(4)-20-3*40-2*17 40 40],...
289                            'style','pushbutton',...
290                            'tooltip','Remove all files from list',...
291                            'CData',btn_cdata.cdata.deleteall,...
292                            'callback',{@l_AddRemoveFiles,'remove_all'},...
293                            'Enable','off');
294 
295 
296  %% RESTABLE -----------------------------------
297  %ResTable=an2_res2table('..\ROI_test\t1001001.res');
298  H.RESTABLE = uitable('Parent',H.MAINFIG,'position',[10 10 fig_w-2*10 300]);%,...
299                       %'NumRows',size(ResTable,1),'NumColumns',size(ResTable,2),...
300                       %'Data',ResTable);
301  H.RESFRAME = uicontrol('parent',H.MAINFIG,...
302                         'units','pixel',...
303                         'style','frame',...
304                         'position',[10 10 fig_w-2*10 300],...
305                                                 'backgroundcolor',GD.col.frame);
306  set(H.RESTABLE,'Editable',false,'visible',false)
307  tmp=get(H.RESTABLE,'position');
308  H.RESTABLE_TX = uicontrol('Parent',H.MAINFIG,...
309                            'Units','pixel',...
310                            'style','text',...
311                            'position',[tmp(1) tmp(2)+tmp(4) tmp(3) 15],...
312                            'string','Output preview ("N/A")',...
313                            'horizontalalign','left',...
314                            'fontweig','bold',...
315                            'backgroundcolor',GD.col.mainfig);
316 
317  % Display "Current results" text in single file mode
318  if Dat.SingleFileMode
319    set(H.RESTABLE_TX,'string','Output preview ("Current results")')
320  end
321 
322  %% Export and Cancel buttons ----------------------
323  tmp=get(H.SELFILES_UIPANEL,'position');
324  H.EXPORT = uicontrol('parent',H.MAIN_UIPANEL,...
325                       'units','pixel',...
326                       'position',[tmp(1)+tmp(3)-80 5 80 25],...
327                       'string','Export',...
328                       'callback',@l_Export);
329  tmp = get(H.EXPORT,'position');
330  H.CANCEL = uicontrol('parent',H.MAIN_UIPANEL,...
331                       'units','pixel',...
332                       'position',[tmp(1)-80-5 5 80 25],...
333                       'string','Cancel',...
334                       'callback',@l_Quit);
335   
336  % Some internal variable defaults
337  Dat.ResFileName = '';
338  Dat.OldFigSize = get(H.MAINFIG,'position');
339 
340  % Set resize function
341  set(H.MAINFIG,'resizefcn',@l_Resize)
342 
343end % function l_DrawGUI
344
345%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
346%
347% Resize Function
348%
349%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
350function l_Resize(h,evd)
351
352  fig_pos = get(H.MAINFIG,'position');
353  if fig_pos(4)<400
354    set(H.MAINFIG,'position',Dat.OldFigSize)
355    return
356  end
357  set(H.MAIN_UIPANEL,'position',...
358                    [10 fig_pos(4)-290 fig_pos(3)-2*10 280]);
359  main_panel_pos = get(H.MAIN_UIPANEL,'position');
360  set(H.RESTABLE,'position',[10 10 fig_pos(3)-2*10 fig_pos(4)-290-55]);
361  set(H.RESFRAME,'position',[10 10 fig_pos(3)-2*10 fig_pos(4)-290-55]);
362  tmp=get(H.RESFRAME,'position');
363  set(H.RESTABLE_TX,'position',[tmp(1) tmp(2)+tmp(4) tmp(3) 15])
364  Dat.OldFigSize = fig_pos;
365   
366end % function l_Resize(h,
367
368%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
369%
370% ADD/REMOVE FILES
371%
372%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
373function l_AddRemoveFiles(h,evd,opt)
374   
375  %% Add files -----------------------
376  if strcmpi(opt,'add')
377   
378    [fname,pname]=an2_juigetfiles({'*.res;*.RES','Aedes Res-files (*.res)';...
379                   '*.*','All Files (*.*)'},...
380                              'Select Res-files',pwd);
381    if ~iscell(fname)
382      % Canceled
383      return
384    end
385   
386    %% Add selected files to the list
387    FileList = get(H.SELFILES_LBOX,'string');
388    FileListUD = get(H.SELFILES_LBOX,'userdata');
389    if isempty(FileList)
390      if get(H.SHOWPATH,'value')
391        tmpstr = {};
392        for ii=1:length(fname)
393          tmpstr{ii} = [pname{ii},fname{ii}];
394        end
395        set(H.SELFILES_LBOX,'string',tmpstr);
396      else
397        set(H.SELFILES_LBOX,'string',fname);
398      end
399      FileListNewUD=cell(length(fname),2);
400      FileListNewUD(:,1) = pname(:);
401      FileListNewUD(:,2) = fname(:);
402      set(H.SELFILES_LBOX,'userdata',FileListNewUD)
403    else
404      FileListNewUD=cell(length(fname),2);
405      FileListNewUD(:,1) = pname(:);
406      FileListNewUD(:,2) = fname(:);
407     
408      %% Remove dublicates
409      tmp={FileListUD{all(ismember(FileListUD, ...
410                                         FileListNewUD),2),:}};
411      rm_ind=find(all(ismember(FileListNewUD,tmp),2));
412      if ~isempty(rm_ind)
413        isDublicate = true;
414        DublicateList = FileListNewUD(rm_ind,:);
415        FileListNewUD(rm_ind,:)=[];
416      else
417        isDublicate = false;
418        DublicateList = {};
419      end
420      NewFileList = cell(size(FileListUD,1)+size(FileListNewUD,1),2);
421      NewFileList(1:size(FileListUD,1),:)=FileListUD;
422      NewFileList(size(FileListUD,1)+1:end,:)=FileListNewUD;
423      if get(H.SHOWPATH,'value')
424        FileListNewCell={}
425        for ii=1:size(NewFileList,1)
426          FileListNewCell{ii} = [NewFileList{:,1},NewFileList{:,2}];
427        end
428      else
429        FileListNewCell = {NewFileList{:,2}};
430      end
431      set(H.SELFILES_LBOX,'string',FileListNewCell);
432      set(H.SELFILES_LBOX,'userdata',NewFileList);
433      set(H.SELFILES_LBOX,'value',[]);
434     
435      %% Warn about dublicates that were not added to the list
436      if isDublicate
437        warndlg({'The following dublicate files were ignored:',...
438                 '',DublicateList{:,2}},...
439                'Dublicate files ignored','modal');
440      end
441
442    end
443    % Enable remove buttons
444    set([H.REMFILES,H.REMALLFILES],'enable','on')
445   
446    %% Remove files ------------------
447  elseif strcmpi(opt,'remove')
448   
449    % Ask confirmation
450    resp=questdlg('Remove selected files from list?',...
451                  'Remove selected files?','Yes','No','No');
452    if strcmpi(resp,'No')
453      return
454    end
455   
456    val = get(H.SELFILES_LBOX,'value');
457    str = get(H.SELFILES_LBOX,'string');
458    % Return if files are not selected
459    if isempty(val)
460      return
461    end
462   
463    NewStr = str;
464    NewUD = get(H.SELFILES_LBOX,'userdata');
465    NewStr(val)=[];
466    NewUD(val,:)=[];
467   
468    set(H.SELFILES_LBOX,'value',[],'string',NewStr,...
469                      'userdata',NewUD)
470    if isempty(NewStr)
471      % Disable remove buttons
472      set([H.REMFILES,H.REMALLFILES],'enable','off')
473    end
474
475    % Check if preview needs to be cleared
476    if ~isempty(Dat.ResFileName) && ~isempty(NewUD)
477      [fp,fn,fe]=fileparts(Dat.ResFileName);
478      fp = [fp,filesep];
479      fn = [fn,fe];
480      tmp1 = strcmp(fn,{NewUD{:,2}});
481      tmp2 = strcmp(fp,{NewUD{:,1}});
482      tmp1=tmp1(:);
483      tmp2=tmp2(:);
484      bool=prod(double([tmp2 tmp1]),2);
485      if ~any(bool==1)
486        l_ResetPreview([],[])
487      end
488    else
489      l_ResetPreview([],[])
490    end
491   
492    %% Remove ALL files --------------
493  elseif strcmpi(opt,'remove_all')
494   
495    % Ask confirmation
496    resp=questdlg('Remove ALL files from list?',...
497                  'Remove ALL files?','Yes','No','No');
498    if strcmpi(resp,'No')
499      return
500    end
501   
502    set(H.SELFILES_LBOX,'value',[],'string',{},'userdata',{})
503    set([H.REMFILES,H.REMALLFILES],'enable','off')
504   
505    % Clear preview
506    l_ResetPreview([],[])
507  end
508 
509end % function l_AddRemoveFiles(h,
510
511
512%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
513%
514% LISTBOX CALLBACK
515%
516%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
517function l_ListBoxCallBack(h,evd)
518 
519  % Return immediately if not double-clicked
520  SelType = get(H.MAINFIG,'selectiontype');
521  if ~strcmpi(SelType,'open')
522    return
523  end
524 
525  % Set mouse pointer to hourglass
526  set(H.MAINFIG,'pointer','watch')
527  drawnow
528 
529  % Get file for preview
530  val=get(H.SELFILES_LBOX,'value');
531  if length(val)==0 || length(val)>1
532    set(H.MAINFIG,'pointer','arrow')
533    return
534  end
535  UD = get(H.SELFILES_LBOX,'userdata');
536  fname = [UD{val,1},UD{val,2}];
537 
538  % Try to load Res-file
539  try
540    tmp = load(fname,'-mat');
541  catch
542    errordlg({'Could not open Res-file',fname,...
543              '','Either the file is not a valid Res-file or it is corrupt.'},...
544             'Could not open Res-file','modal');
545    set(H.MAINFIG,'pointer','arrow')
546    return
547  end
548 
549  if ~isfield(tmp,'Res') || ~isfield(tmp.Res,'Stat') || ...
550        ~isfield(tmp.Res,'FileInfo') || ~isfield(tmp.Res,'DateTime')
551    errordlg({'Could not open Res-file',fname,...
552              '','Required fields are missing from the structure!'},...
553             'Could not open Res-file','modal');
554    set(H.MAINFIG,'pointer','arrow')
555    return
556  end
557  Dat.Res = tmp.Res;
558  Dat.ResFileName = fname;
559 
560  % Preview file
561  l_PreviewFile([],[]);
562  set(H.MAINFIG,'pointer','arrow')
563  drawnow
564 
565end % function l_ListBoxCallBack(h,
566
567
568%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
569%
570% PREVIEW FILE
571%
572%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
573function l_PreviewFile(h,evd)
574 
575  if isempty(Dat.Res)
576    return
577  end
578 
579  % Get export options
580  sortbyroi = get(H.SORTBY,'value');
581  if sortbyroi==1
582    sortbyroi = true;
583  else
584    sortbyroi = false;
585  end
586  decsepval = get(H.DECSEPARATOR,'value');
587  setpref('Aedes','ResViewerDecSep',decsepval)
588  if decsepval==1
589    decsep = ',';
590  else
591    decsep = '.';
592  end
593  numdec = get(H.NUMDEC,'string');
594  numdec = str2num(numdec);
595  numdec = floor(numdec);
596  if isempty(numdec) || ~isreal(numdec) || numdec<0
597    errordlg('The "Number of decimals" value must be a positive integer!',...
598             'Error in "Number of decimals" field','modal')
599    return
600  end
601
602  % Generate cell table from Res
603  ResTable = an2_res2table(Dat.Res,'sortbyroi',sortbyroi,...
604                       'decsep',decsep,'numdec',numdec,...
605                       'resfilename',Dat.ResFileName);
606 
607  set(H.RESFRAME,'visible','off')
608  drawnow
609  drawnow
610 
611  % Clear restable
612  set(H.RESTABLE,'NumRows',2,...
613                 'NumColumns',2);
614  drawnow
615  drawnow
616  tmp={'','';'',''};
617  set(H.RESTABLE,'Data',tmp)
618  drawnow
619  drawnow
620 
621  % Update res table
622  set(H.RESTABLE,'visible',true)
623  drawnow
624  drawnow
625  set(H.RESTABLE,'NumRows',size(ResTable,1),...
626                 'NumColumns',size(ResTable,2))
627  drawnow
628  drawnow
629  set(H.RESTABLE,'Data',ResTable);
630  drawnow
631  drawnow
632 
633  %drawnow
634  if ~Dat.SingleFileMode
635    set(H.RESTABLE_TX,'string',['Output preview ("' Dat.ResFileName '")'])
636  end
637
638end % function l_PreviewFiles(h,
639
640
641%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
642%
643% RESET FILE PREVIEW
644%
645%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
646function l_ResetPreview(h,evd)
647 
648  Dat.Res = [];
649  Dat.ReFileName = '';
650  set(H.RESTABLE,'visible',false,...
651                 'Data',[]);
652  set(H.RESFRAME,'visible','on')
653  set(H.RESTABLE_TX,'string','Output preview ("N/A")')
654  drawnow
655end % function l_ResetPreview(h,
656
657%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
658%
659% EXPORT RESULTS
660%
661%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
662function l_Export(h,evd)
663 
664  % Check if there is something to export
665  if ~Dat.SingleFileMode
666    UD = get(H.SELFILES_LBOX,'userdata');
667    if isempty(UD)
668      h=errordlg('Nothing to export!','Error Exporting Files','modal');
669      return
670    end
671  end
672 
673  % Get Export types
674  WriteXLS = get(H.OUTPUTTYPE_XLS,'value');
675  WriteTXT = get(H.OUTPUTTYPE_TXT,'value');
676  if ~WriteXLS && ~WriteTXT
677    h=errordlg('Export file type not selected!','Error Exporting Files','modal');
678    return
679  end
680 
681  % Get export parameters
682  outdir = get(H.OUTDIR_EDIT,'string');
683  if ~isempty(outdir) && outdir(end)~=filesep
684    outdir = [outdir,filesep];
685  end
686  sortbyroi = get(H.SORTBY,'value');
687  if sortbyroi==1
688    sortbyroi = true;
689  else
690    sortbyroi = false;
691  end
692  decsepval = get(H.DECSEPARATOR,'value');
693  if decsepval==1
694    decsep = ',';
695  else
696    decsep = '.';
697  end
698  numdec = get(H.NUMDEC,'string');
699  numdec = str2num(numdec);
700  numdec = floor(numdec);
701  if isempty(numdec) || ~isreal(numdec) || numdec<0
702    errordlg('The "Number of decimals" value must be a positive integer!',...
703             'Error in "Number of decimals" field','modal')
704    return
705  end
706 
707  %% Start Exporting files --------------------------
708  if ~Dat.SingleFileMode
709    wbar_h=an2_wbar(0,{'Processing file','""'});
710    set(get(findall(wbar_h,'type','axes'),'title'),'interpreter','none')
711    nFiles = size(UD,1);
712    success = true(1,nFiles);
713    for ii=1:nFiles
714      resfilename = [UD{ii,1},UD{ii,2}];
715      [fp,fn,fe]=fileparts(UD{ii,2});
716      outfilename = [outdir,fn];
717      an2_wbar(ii/nFiles,wbar_h,{'Processing file',['"',resfilename,'"']});
718     
719      % Open file
720      try
721        tmp = load([UD{ii,1},UD{ii,2}],'-mat');
722      catch
723        success(ii)=false;
724        fprintf(1,'Could not open file "%s". Skipping...\n',resfilename)
725        continue;
726      end
727     
728      if ~isfield(tmp,'Res') || ~isfield(tmp.Res,'Stat') || ...
729            ~isfield(tmp.Res,'FileInfo') || ~isfield(tmp.Res,'DateTime')
730        success(ii)=false;
731        fprintf(1,'Required field(s) missing! Skipping file "%s".\n',...
732                resfilename)
733        continue;
734      end
735     
736      % Generate cell table
737      ResTable = an2_res2table(tmp.Res,'sortbyroi',sortbyroi,...
738                           'decsep',decsep,'numdec',numdec,...
739                           'resfilename',resfilename);
740     
741      % Write XLS
742      if WriteXLS
743        bool = xlswrite([outfilename,'.xls'],ResTable);
744        if ~bool
745          success(ii)=false;
746          fprintf(1,'Could not write "%s". Skipping file...\n',[outfilename,'.xls'])
747        end
748      end
749     
750      % Write TXT
751      if WriteTXT
752        bool = an2_cellwrite(ResTable,[outfilename,'.txt'],...
753                         'delimitter','tab');
754        if ~bool
755          success(ii)=false;
756          fprintf(1,'Could not write "%s". Skipping file...\n',[outfilename,'.txt'])
757        end
758      end
759     
760    end
761    close(wbar_h)
762   
763    if all(success)
764      h=helpdlg(['Successfully exported ',num2str(nFiles),' files!'],...
765                'Export Success');
766    else
767      SkippedFiles={};
768      count=1;
769      for ii=1:nFiles
770        if success(ii)==0
771          SkippedFiles{count} = [UD{ii,1},UD{ii,2}];
772          count=count+1;
773        end
774      end
775      h=warndlg({['Errors occurred while exporting.',...
776                  ' The following files could not be exported:'],'',...
777                 SkippedFiles{:}},'Errors occurred while exporting');
778    end
779   
780    % Save export directory to preferences
781    setpref('Aedes','PutXLSFileDir',outdir);
782   
783  else % Export in single file mode
784   
785    success = true;
786    try
787      outdir = getpref('Aedes','PutXLSFileDir');
788    catch
789      outdir = pwd;
790    end
791   
792    if ~strcmp(outdir(end),filesep)
793      outdir = [outdir,filesep];
794    end
795   
796    [fp,fn,fe]=fileparts(Dat.Res.FileInfo.DataFileName{1});
797   
798    % Ask for a file
799    [fname,fpath,findex]=uiputfile({'*.xls;*.XLS;*.txt;*.TXT',...
800                   'Excel and Text Files (*.xls,*.txt)';...
801                   '*.*','All Files (*.*)'},'Export Results As',...
802                                   [outdir,fn]);
803    if isequal(fname,0) || isequal(fpath,0)
804      % Action cancelled
805      return
806    end
807   
808    % Check filename
809    [fp,fn,fe]=fileparts(fname);
810    if strcmpi(fe,'.xls')
811      xlsfname = [fn,fe];
812      txtfname = [fn,'.txt'];
813    elseif strcmpi(fe,'.txt')
814      xlsfname = [fn,'.xls'];
815      txtfname = [fn,fe];
816    else
817      xlsfname = [fn,fe,'.xls'];
818      txtfname = [fn,fe,'.txt'];
819    end
820   
821    % Generate cell table
822    ResTable = an2_res2table(Dat.Res,'sortbyroi',sortbyroi,...
823                         'decsep',decsep,'numdec',numdec,...
824                         'resfilename','');
825   
826    % Show an2_calc_wait
827    [h,txh]=an2_calc_wait('');
828   
829    % Write XLS
830    if WriteXLS
831      set(txh,'string',{'Writing Excel XLS file',[fpath,xlsfname]})
832      drawnow
833      bool = xlswrite([fpath,xlsfname],ResTable);
834      if ~bool
835        success=false;
836        fprintf(1,'Could not write "%s". Skipping file...\n',[fpath,xlsfname])
837      end
838    end
839     
840    % Write TXT
841    if WriteTXT
842      set(txh,'string',{'Writing TXT file',[fpath,txtfname]})
843      drawnow
844      bool = an2_cellwrite(ResTable,[fpath,txtfname],...
845                       'delimitter','tab');
846      if ~bool
847        success=false;
848        fprintf(1,'Could not write "%s". Skipping file...\n',[fpath,txtfname])
849      end
850    end
851    delete(h);
852   
853    if ~success
854      h=warndlg('Errors occurred while exporting. Export failed.','Export failed!');
855    end
856   
857    % Save export directory to preferences
858    setpref('Aedes','PutXLSFileDir',fpath);
859   
860  end
861 
862 
863 
864end % function l_Export(h,
865
866%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
867%
868% BROWSE FOLDERS
869%
870%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
871function l_BrowseFolders(h,evd)
872 
873  % Get currently selected folder from the edit box
874  OldDir=get(H.OUTDIR_EDIT,'string');
875  if ~isdir(OldDir)
876    OldDir = pwd;
877  end
878 
879  % Show folder selection dialog
880  NewDir = uigetdir(OldDir,'Select output folder');
881  if all(NewDir==0)
882    % Action canceled
883    return
884  end
885 
886  % Update output directory edit box
887  set(H.OUTDIR_EDIT,'string',NewDir,...
888                    'userdata',NewDir)
889 
890end % function l_BrowseFolders(h,
891
892%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
893%
894% CHECK OUTPUT DIRECTORY
895%
896%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
897function l_CheckOutputDir(h,evd) % ---------------------------
898 
899  output_dir = get(H.OUTDIR_EDIT,'string');
900  if ~isdir(output_dir)
901    h=warndlg({'The selected folder',['"' output_dir '"'],...
902               'doesn''t exist.'},'Folder doesn''t exist','modal');
903    set(H.OUTDIR_EDIT,'string',get(H.OUTDIR_EDIT,'userdata'))
904  else
905    set(H.OUTDIR_EDIT,'userdata',output_dir)
906  end
907 
908end % function l_CheckOutputDir(h,
909
910%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
911%
912% QUIT AN2_RESVIEWER
913%
914%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
915function l_Quit(h,evd) % --------------------------------------
916 
917  % Clear public variables
918  fig_h = H.MAINFIG;
919  clear H Dat
920 
921  % Close an2_resviewer window
922  delete(fig_h)
923 
924end % function l_Quit(h,
925
926%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
927%
928% Show/hide full path
929%
930%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
931function l_ShowFullPath(h,evd)
932 
933  UD = get(H.SELFILES_LBOX,'userdata');
934  if isempty(UD)
935    return
936  end
937 
938  % Construct new string to the file listbox
939  NewStr = {};
940  if get(H.SHOWPATH,'value')
941    for ii=1:size(UD,1)
942      NewStr{ii} = [UD{ii,1},UD{ii,2}];
943    end
944  else
945    NewStr = {UD{:,2}};
946  end
947  set(H.SELFILES_LBOX,'string',NewStr)
948 
949end % function l_ShowFullPath(h,
950
951end % function an2_resviewer(Res_in)
952
Note: See TracBrowser for help on using the repository browser.

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