source: aedes_resviewer.m @ 80

Last change on this file since 80 was 80, checked in by tjniskan, 10 years ago
  • Changed the historical "an2_" prefix to "aedes_" in all files. NOTE:

Any script or function relying to Aedes functions will be broken
because of this. Just do a search/replace from "an2_" to "aedes_" in
your files and all should be well...

  • Changed the name of an2_readtab.m to a more informative

aedes_readphasetable.m

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

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