source: aedes_resviewer.m @ 146

Last change on this file since 146 was 143, checked in by tjniskan, 9 years ago
  • Fixed a bug in detecting Matlab version in aedes_resviewer.m, which

resulted in a crash in Matlab R2010a and newer.

  • Fixed a bunch of warnings that were generated in aedes_juigetfiles.m with newer Matlab

versions

M aedes_resviewer.m
M aedes_revision.m
M aedes_juigetfiles.m

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

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