source: aedes_resviewer.m

Last change on this file was 213, checked in by tjniskan, 3 years ago
  • Fixed Aedes for Handle Graphics version 2 (HG2).

M aedes.m
M aedes_createmosaic.m
M aedes_export_gui.m
M aedes_gui_defaults.m
M aedes_headerbrowser.m
M aedes_helpabout.m
M aedes_inputdlg.m
M aedes_juigetfiles.m
M aedes_readfidprefs.m
M aedes_resviewer.m
M aedes_revision.m

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

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