source: an2_resviewer.m @ 63

Last change on this file since 63 was 56, checked in by tjniskan, 11 years ago
  • Fixed bug related to the changed syntax of uitable in Matlab R2008a.
  • Removed debug-menu from aedes.m.

M an2_revision.m
M an2_resviewer.m
M aedes.m

File size: 29.5 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  H.RESFRAME = uicontrol('parent',H.MAINFIG,...
300        'units','pixel',...
301        'style','frame',...
302        'position',[10 10 fig_w-2*10 300],...
303        'backgroundcolor',GD.col.frame);
304 
305  % Check Matlab version since uitable properties have changed in R2008a
306  v=version;
307  v=str2num(v(1:3));
308  Dat.MatlabVersion = v;
309  if Dat.MatlabVersion>=7.6
310        set(H.RESTABLE,'Enable','on','visible','off');
311  else
312        set(H.RESTABLE,'Editable',false,'visible',false)
313  end
314 
315  tmp=get(H.RESTABLE,'position');
316  H.RESTABLE_TX = uicontrol('Parent',H.MAINFIG,...
317                            'Units','pixel',...
318                            'style','text',...
319                            'position',[tmp(1) tmp(2)+tmp(4) tmp(3) 15],...
320                            'string','Output preview ("N/A")',...
321                            'horizontalalign','left',...
322                            'fontweig','bold',...
323                            'backgroundcolor',GD.col.mainfig);
324 
325  % Display "Current results" text in single file mode
326  if Dat.SingleFileMode
327    set(H.RESTABLE_TX,'string','Output preview ("Current results")')
328  end
329 
330  %% Export and Cancel buttons ----------------------
331  tmp=get(H.SELFILES_UIPANEL,'position');
332  H.EXPORT = uicontrol('parent',H.MAIN_UIPANEL,...
333                       'units','pixel',...
334                       'position',[tmp(1)+tmp(3)-80 5 80 25],...
335                       'string','Export',...
336                       'callback',@l_Export);
337  tmp = get(H.EXPORT,'position');
338  H.CANCEL = uicontrol('parent',H.MAIN_UIPANEL,...
339                       'units','pixel',...
340                       'position',[tmp(1)-80-5 5 80 25],...
341                       'string','Cancel',...
342                       'callback',@l_Quit);
343   
344  % Some internal variable defaults
345  Dat.ResFileName = '';
346  Dat.OldFigSize = get(H.MAINFIG,'position');
347 
348  % Set resize function
349  set(H.MAINFIG,'resizefcn',@l_Resize)
350 
351end % function l_DrawGUI
352
353%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
354%
355% Resize Function
356%
357%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
358function l_Resize(h,evd)
359
360  fig_pos = get(H.MAINFIG,'position');
361  if fig_pos(4)<400
362    set(H.MAINFIG,'position',Dat.OldFigSize)
363    return
364  end
365  set(H.MAIN_UIPANEL,'position',...
366                    [10 fig_pos(4)-290 fig_pos(3)-2*10 280]);
367  main_panel_pos = get(H.MAIN_UIPANEL,'position');
368  set(H.RESTABLE,'position',[10 10 fig_pos(3)-2*10 fig_pos(4)-290-55]);
369  set(H.RESFRAME,'position',[10 10 fig_pos(3)-2*10 fig_pos(4)-290-55]);
370  tmp=get(H.RESFRAME,'position');
371  set(H.RESTABLE_TX,'position',[tmp(1) tmp(2)+tmp(4) tmp(3) 15])
372  Dat.OldFigSize = fig_pos;
373   
374end % function l_Resize(h,
375
376%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
377%
378% ADD/REMOVE FILES
379%
380%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
381function l_AddRemoveFiles(h,evd,opt)
382   
383  %% Add files -----------------------
384  if strcmpi(opt,'add')
385   
386    [fname,pname]=an2_juigetfiles({'*.res;*.RES','Aedes Res-files (*.res)';...
387                   '*.*','All Files (*.*)'},...
388                              'Select Res-files',pwd);
389    if ~iscell(fname)
390      % Canceled
391      return
392    end
393   
394    %% Add selected files to the list
395    FileList = get(H.SELFILES_LBOX,'string');
396    FileListUD = get(H.SELFILES_LBOX,'userdata');
397    if isempty(FileList)
398      if get(H.SHOWPATH,'value')
399        tmpstr = {};
400        for ii=1:length(fname)
401          tmpstr{ii} = [pname{ii},fname{ii}];
402        end
403        set(H.SELFILES_LBOX,'string',tmpstr);
404      else
405        set(H.SELFILES_LBOX,'string',fname);
406      end
407      FileListNewUD=cell(length(fname),2);
408      FileListNewUD(:,1) = pname(:);
409      FileListNewUD(:,2) = fname(:);
410      set(H.SELFILES_LBOX,'userdata',FileListNewUD)
411    else
412      FileListNewUD=cell(length(fname),2);
413      FileListNewUD(:,1) = pname(:);
414      FileListNewUD(:,2) = fname(:);
415     
416      %% Remove dublicates
417      tmp={FileListUD{all(ismember(FileListUD, ...
418                                         FileListNewUD),2),:}};
419      rm_ind=find(all(ismember(FileListNewUD,tmp),2));
420      if ~isempty(rm_ind)
421        isDublicate = true;
422        DublicateList = FileListNewUD(rm_ind,:);
423        FileListNewUD(rm_ind,:)=[];
424      else
425        isDublicate = false;
426        DublicateList = {};
427      end
428      NewFileList = cell(size(FileListUD,1)+size(FileListNewUD,1),2);
429      NewFileList(1:size(FileListUD,1),:)=FileListUD;
430      NewFileList(size(FileListUD,1)+1:end,:)=FileListNewUD;
431      if get(H.SHOWPATH,'value')
432        FileListNewCell={}
433        for ii=1:size(NewFileList,1)
434          FileListNewCell{ii} = [NewFileList{:,1},NewFileList{:,2}];
435        end
436      else
437        FileListNewCell = {NewFileList{:,2}};
438      end
439      set(H.SELFILES_LBOX,'string',FileListNewCell);
440      set(H.SELFILES_LBOX,'userdata',NewFileList);
441      set(H.SELFILES_LBOX,'value',[]);
442     
443      %% Warn about dublicates that were not added to the list
444      if isDublicate
445        warndlg({'The following dublicate files were ignored:',...
446                 '',DublicateList{:,2}},...
447                'Dublicate files ignored','modal');
448      end
449
450    end
451    % Enable remove buttons
452    set([H.REMFILES,H.REMALLFILES],'enable','on')
453   
454    %% Remove files ------------------
455  elseif strcmpi(opt,'remove')
456   
457    % Ask confirmation
458    resp=questdlg('Remove selected files from list?',...
459                  'Remove selected files?','Yes','No','No');
460    if strcmpi(resp,'No')
461      return
462    end
463   
464    val = get(H.SELFILES_LBOX,'value');
465    str = get(H.SELFILES_LBOX,'string');
466    % Return if files are not selected
467    if isempty(val)
468      return
469    end
470   
471    NewStr = str;
472    NewUD = get(H.SELFILES_LBOX,'userdata');
473    NewStr(val)=[];
474    NewUD(val,:)=[];
475   
476    set(H.SELFILES_LBOX,'value',[],'string',NewStr,...
477                      'userdata',NewUD)
478    if isempty(NewStr)
479      % Disable remove buttons
480      set([H.REMFILES,H.REMALLFILES],'enable','off')
481    end
482
483    % Check if preview needs to be cleared
484    if ~isempty(Dat.ResFileName) && ~isempty(NewUD)
485      [fp,fn,fe]=fileparts(Dat.ResFileName);
486      fp = [fp,filesep];
487      fn = [fn,fe];
488      tmp1 = strcmp(fn,{NewUD{:,2}});
489      tmp2 = strcmp(fp,{NewUD{:,1}});
490      tmp1=tmp1(:);
491      tmp2=tmp2(:);
492      bool=prod(double([tmp2 tmp1]),2);
493      if ~any(bool==1)
494        l_ResetPreview([],[])
495      end
496    else
497      l_ResetPreview([],[])
498    end
499   
500    %% Remove ALL files --------------
501  elseif strcmpi(opt,'remove_all')
502   
503    % Ask confirmation
504    resp=questdlg('Remove ALL files from list?',...
505                  'Remove ALL files?','Yes','No','No');
506    if strcmpi(resp,'No')
507      return
508    end
509   
510    set(H.SELFILES_LBOX,'value',[],'string',{},'userdata',{})
511    set([H.REMFILES,H.REMALLFILES],'enable','off')
512   
513    % Clear preview
514    l_ResetPreview([],[])
515  end
516 
517end % function l_AddRemoveFiles(h,
518
519
520%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
521%
522% LISTBOX CALLBACK
523%
524%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
525function l_ListBoxCallBack(h,evd)
526 
527  % Return immediately if not double-clicked
528  SelType = get(H.MAINFIG,'selectiontype');
529  if ~strcmpi(SelType,'open')
530    return
531  end
532 
533  % Set mouse pointer to hourglass
534  set(H.MAINFIG,'pointer','watch')
535  drawnow
536 
537  % Get file for preview
538  val=get(H.SELFILES_LBOX,'value');
539  if length(val)==0 || length(val)>1
540    set(H.MAINFIG,'pointer','arrow')
541    return
542  end
543  UD = get(H.SELFILES_LBOX,'userdata');
544  fname = [UD{val,1},UD{val,2}];
545 
546  % Try to load Res-file
547  try
548    tmp = load(fname,'-mat');
549  catch
550    errordlg({'Could not open Res-file',fname,...
551              '','Either the file is not a valid Res-file or it is corrupt.'},...
552             'Could not open Res-file','modal');
553    set(H.MAINFIG,'pointer','arrow')
554    return
555  end
556 
557  if ~isfield(tmp,'Res') || ~isfield(tmp.Res,'Stat') || ...
558        ~isfield(tmp.Res,'FileInfo') || ~isfield(tmp.Res,'DateTime')
559    errordlg({'Could not open Res-file',fname,...
560              '','Required fields are missing from the structure!'},...
561             'Could not open Res-file','modal');
562    set(H.MAINFIG,'pointer','arrow')
563    return
564  end
565  Dat.Res = tmp.Res;
566  Dat.ResFileName = fname;
567 
568  % Preview file
569  l_PreviewFile([],[]);
570  set(H.MAINFIG,'pointer','arrow')
571  drawnow
572 
573end % function l_ListBoxCallBack(h,
574
575
576%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
577%
578% PREVIEW FILE
579%
580%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
581function l_PreviewFile(h,evd)
582 
583  if isempty(Dat.Res)
584    return
585  end
586 
587  % Get export options
588  sortbyroi = get(H.SORTBY,'value');
589  if sortbyroi==1
590    sortbyroi = true;
591  else
592    sortbyroi = false;
593  end
594  decsepval = get(H.DECSEPARATOR,'value');
595  setpref('Aedes','ResViewerDecSep',decsepval)
596  if decsepval==1
597    decsep = ',';
598  else
599    decsep = '.';
600  end
601  numdec = get(H.NUMDEC,'string');
602  numdec = str2num(numdec);
603  numdec = floor(numdec);
604  if isempty(numdec) || ~isreal(numdec) || numdec<0
605    errordlg('The "Number of decimals" value must be a positive integer!',...
606             'Error in "Number of decimals" field','modal')
607    return
608  end
609
610  % Generate cell table from Res
611  ResTable = an2_res2table(Dat.Res,'sortbyroi',sortbyroi,...
612                       'decsep',decsep,'numdec',numdec,...
613                       'resfilename',Dat.ResFileName);
614 
615  set(H.RESFRAME,'visible','off')
616  drawnow
617  drawnow
618 
619  % Clear restable
620  if Dat.MatlabVersion>=7.6
621        set(H.RESTABLE,'data',[])
622        set(H.RESTABLE,'Data',ResTable,...
623          'visible','on')
624  else
625        set(H.RESTABLE,'NumRows',2,...
626          'NumColumns',2);
627        drawnow
628        drawnow
629        tmp={'','';'',''};
630        set(H.RESTABLE,'Data',tmp)
631        drawnow
632        drawnow
633       
634        % Update res table
635        set(H.RESTABLE,'visible',true)
636        drawnow
637        drawnow
638        set(H.RESTABLE,'NumRows',size(ResTable,1),...
639          'NumColumns',size(ResTable,2))
640        drawnow
641        drawnow
642        set(H.RESTABLE,'Data',ResTable);
643        drawnow
644        drawnow
645  end
646 
647 
648 
649  %drawnow
650  if ~Dat.SingleFileMode
651    set(H.RESTABLE_TX,'string',['Output preview ("' Dat.ResFileName '")'])
652  end
653
654end % function l_PreviewFiles(h,
655
656
657%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
658%
659% RESET FILE PREVIEW
660%
661%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
662function l_ResetPreview(h,evd)
663 
664  Dat.Res = [];
665  Dat.ReFileName = '';
666  if Dat.MatlabVersion>=7.6
667        set(H.RESTABLE,'visible','off',...
668          'Data',[]);
669  else
670        set(H.RESTABLE,'visible',false,...
671          'Data',[]);
672  end
673  set(H.RESFRAME,'visible','on')
674  set(H.RESTABLE_TX,'string','Output preview ("N/A")')
675  drawnow
676end % function l_ResetPreview(h,
677
678%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
679%
680% EXPORT RESULTS
681%
682%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
683function l_Export(h,evd)
684 
685  % Check if there is something to export
686  if ~Dat.SingleFileMode
687    UD = get(H.SELFILES_LBOX,'userdata');
688    if isempty(UD)
689      h=errordlg('Nothing to export!','Error Exporting Files','modal');
690      return
691    end
692  end
693 
694  % Get Export types
695  WriteXLS = get(H.OUTPUTTYPE_XLS,'value');
696  WriteTXT = get(H.OUTPUTTYPE_TXT,'value');
697  if ~WriteXLS && ~WriteTXT
698    h=errordlg('Export file type not selected!','Error Exporting Files','modal');
699    return
700  end
701 
702  % Get export parameters
703  outdir = get(H.OUTDIR_EDIT,'string');
704  if ~isempty(outdir) && outdir(end)~=filesep
705    outdir = [outdir,filesep];
706  end
707  sortbyroi = get(H.SORTBY,'value');
708  if sortbyroi==1
709    sortbyroi = true;
710  else
711    sortbyroi = false;
712  end
713  decsepval = get(H.DECSEPARATOR,'value');
714  if decsepval==1
715    decsep = ',';
716  else
717    decsep = '.';
718  end
719  numdec = get(H.NUMDEC,'string');
720  numdec = str2num(numdec);
721  numdec = floor(numdec);
722  if isempty(numdec) || ~isreal(numdec) || numdec<0
723    errordlg('The "Number of decimals" value must be a positive integer!',...
724             'Error in "Number of decimals" field','modal')
725    return
726  end
727 
728  %% Start Exporting files --------------------------
729  if ~Dat.SingleFileMode
730    wbar_h=an2_wbar(0,{'Processing file','""'});
731    set(get(findall(wbar_h,'type','axes'),'title'),'interpreter','none')
732    nFiles = size(UD,1);
733    success = true(1,nFiles);
734    for ii=1:nFiles
735      resfilename = [UD{ii,1},UD{ii,2}];
736      [fp,fn,fe]=fileparts(UD{ii,2});
737      outfilename = [outdir,fn];
738      an2_wbar(ii/nFiles,wbar_h,{'Processing file',['"',resfilename,'"']});
739     
740      % Open file
741      try
742        tmp = load([UD{ii,1},UD{ii,2}],'-mat');
743      catch
744        success(ii)=false;
745        fprintf(1,'Could not open file "%s". Skipping...\n',resfilename)
746        continue;
747      end
748     
749      if ~isfield(tmp,'Res') || ~isfield(tmp.Res,'Stat') || ...
750            ~isfield(tmp.Res,'FileInfo') || ~isfield(tmp.Res,'DateTime')
751        success(ii)=false;
752        fprintf(1,'Required field(s) missing! Skipping file "%s".\n',...
753                resfilename)
754        continue;
755      end
756     
757      % Generate cell table
758      ResTable = an2_res2table(tmp.Res,'sortbyroi',sortbyroi,...
759                           'decsep',decsep,'numdec',numdec,...
760                           'resfilename',resfilename);
761     
762      % Write XLS
763      if WriteXLS
764        bool = xlswrite([outfilename,'.xls'],ResTable);
765        if ~bool
766          success(ii)=false;
767          fprintf(1,'Could not write "%s". Skipping file...\n',[outfilename,'.xls'])
768        end
769      end
770     
771      % Write TXT
772      if WriteTXT
773        bool = an2_cellwrite(ResTable,[outfilename,'.txt'],...
774                         'delimitter','tab');
775        if ~bool
776          success(ii)=false;
777          fprintf(1,'Could not write "%s". Skipping file...\n',[outfilename,'.txt'])
778        end
779      end
780     
781    end
782    close(wbar_h)
783   
784    if all(success)
785      h=helpdlg(['Successfully exported ',num2str(nFiles),' files!'],...
786                'Export Success');
787    else
788      SkippedFiles={};
789      count=1;
790      for ii=1:nFiles
791        if success(ii)==0
792          SkippedFiles{count} = [UD{ii,1},UD{ii,2}];
793          count=count+1;
794        end
795      end
796      h=warndlg({['Errors occurred while exporting.',...
797                  ' The following files could not be exported:'],'',...
798                 SkippedFiles{:}},'Errors occurred while exporting');
799    end
800   
801    % Save export directory to preferences
802    setpref('Aedes','PutXLSFileDir',outdir);
803   
804  else % Export in single file mode
805   
806    success = true;
807    try
808      outdir = getpref('Aedes','PutXLSFileDir');
809    catch
810      outdir = pwd;
811    end
812   
813    if ~strcmp(outdir(end),filesep)
814      outdir = [outdir,filesep];
815    end
816   
817    [fp,fn,fe]=fileparts(Dat.Res.FileInfo.DataFileName{1});
818   
819    % Ask for a file
820    [fname,fpath,findex]=uiputfile({'*.xls;*.XLS;*.txt;*.TXT',...
821                   'Excel and Text Files (*.xls,*.txt)';...
822                   '*.*','All Files (*.*)'},'Export Results As',...
823                                   [outdir,fn]);
824    if isequal(fname,0) || isequal(fpath,0)
825      % Action cancelled
826      return
827    end
828   
829    % Check filename
830    [fp,fn,fe]=fileparts(fname);
831    if strcmpi(fe,'.xls')
832      xlsfname = [fn,fe];
833      txtfname = [fn,'.txt'];
834    elseif strcmpi(fe,'.txt')
835      xlsfname = [fn,'.xls'];
836      txtfname = [fn,fe];
837    else
838      xlsfname = [fn,fe,'.xls'];
839      txtfname = [fn,fe,'.txt'];
840    end
841   
842    % Generate cell table
843    ResTable = an2_res2table(Dat.Res,'sortbyroi',sortbyroi,...
844                         'decsep',decsep,'numdec',numdec,...
845                         'resfilename','');
846   
847    % Show an2_calc_wait
848    [h,txh]=an2_calc_wait('');
849   
850    % Write XLS
851    if WriteXLS
852      set(txh,'string',{'Writing Excel XLS file',[fpath,xlsfname]})
853      drawnow
854      bool = xlswrite([fpath,xlsfname],ResTable);
855      if ~bool
856        success=false;
857        fprintf(1,'Could not write "%s". Skipping file...\n',[fpath,xlsfname])
858      end
859    end
860     
861    % Write TXT
862    if WriteTXT
863      set(txh,'string',{'Writing TXT file',[fpath,txtfname]})
864      drawnow
865      bool = an2_cellwrite(ResTable,[fpath,txtfname],...
866                       'delimitter','tab');
867      if ~bool
868        success=false;
869        fprintf(1,'Could not write "%s". Skipping file...\n',[fpath,txtfname])
870      end
871    end
872    delete(h);
873   
874    if ~success
875      h=warndlg('Errors occurred while exporting. Export failed.','Export failed!');
876    end
877   
878    % Save export directory to preferences
879    setpref('Aedes','PutXLSFileDir',fpath);
880   
881  end
882 
883 
884 
885end % function l_Export(h,
886
887%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
888%
889% BROWSE FOLDERS
890%
891%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
892function l_BrowseFolders(h,evd)
893 
894  % Get currently selected folder from the edit box
895  OldDir=get(H.OUTDIR_EDIT,'string');
896  if ~isdir(OldDir)
897    OldDir = pwd;
898  end
899 
900  % Show folder selection dialog
901  NewDir = uigetdir(OldDir,'Select output folder');
902  if all(NewDir==0)
903    % Action canceled
904    return
905  end
906 
907  % Update output directory edit box
908  set(H.OUTDIR_EDIT,'string',NewDir,...
909                    'userdata',NewDir)
910 
911end % function l_BrowseFolders(h,
912
913%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
914%
915% CHECK OUTPUT DIRECTORY
916%
917%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
918function l_CheckOutputDir(h,evd) % ---------------------------
919 
920  output_dir = get(H.OUTDIR_EDIT,'string');
921  if ~isdir(output_dir)
922    h=warndlg({'The selected folder',['"' output_dir '"'],...
923               'doesn''t exist.'},'Folder doesn''t exist','modal');
924    set(H.OUTDIR_EDIT,'string',get(H.OUTDIR_EDIT,'userdata'))
925  else
926    set(H.OUTDIR_EDIT,'userdata',output_dir)
927  end
928 
929end % function l_CheckOutputDir(h,
930
931%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
932%
933% QUIT AN2_RESVIEWER
934%
935%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
936function l_Quit(h,evd) % --------------------------------------
937 
938  % Clear public variables
939  fig_h = H.MAINFIG;
940  clear H Dat
941 
942  % Close an2_resviewer window
943  delete(fig_h)
944 
945end % function l_Quit(h,
946
947%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
948%
949% Show/hide full path
950%
951%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
952function l_ShowFullPath(h,evd)
953 
954  UD = get(H.SELFILES_LBOX,'userdata');
955  if isempty(UD)
956    return
957  end
958 
959  % Construct new string to the file listbox
960  NewStr = {};
961  if get(H.SHOWPATH,'value')
962    for ii=1:size(UD,1)
963      NewStr{ii} = [UD{ii,1},UD{ii,2}];
964    end
965  else
966    NewStr = {UD{:,2}};
967  end
968  set(H.SELFILES_LBOX,'string',NewStr)
969 
970end % function l_ShowFullPath(h,
971
972end % function an2_resviewer(Res_in)
973
Note: See TracBrowser for help on using the repository browser.

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