source: aedes_resviewer.m @ 132

Last change on this file since 132 was 132, checked in by tjniskan, 9 years ago
  • Added read support for SWIFT reconstruction files (*.sgl)
  • Changed the layout of results viewer GUI. Also added more options

and all options should now be "remembered"

M aedes_getfilefilter.m
A aedes_readswiftsgl.m
M aedes_data_read.m
M aedes_resviewer.m
M aedes.m
M aedes_revision.m
M aedes_saveres.m
M aedes_getdataformat.m

File size: 34.2 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  v=version;
410  v=str2num(v(1:3));
411  Dat.MatlabVersion = v;
412  if Dat.MatlabVersion>=7.6
413        set(H.RESTABLE,'Enable','on','visible','off');
414  else
415        set(H.RESTABLE,'Editable',false,'visible',false)
416  end
417 
418  tmp=get(H.RESTABLE,'position');
419  H.RESTABLE_TX = uicontrol('Parent',H.MAINFIG,...
420    'Units','pixel',...
421    'style','text',...
422    'position',[tmp(1) tmp(2)+tmp(4) tmp(3) 15],...
423    'string','Output preview ("N/A")',...
424    'horizontalalign','left',...
425    'fontweig','bold',...
426    'backgroundcolor',GD.col.mainfig);
427 
428  % Display "Current results" text in single file mode
429  if Dat.SingleFileMode
430    set(H.RESTABLE_TX,'string','Output preview ("Current results")')
431  end
432 
433  %% Export and Cancel buttons ----------------------
434  tmp=get(H.SELFILES_UIPANEL,'position');
435  H.EXPORT = uicontrol('parent',H.MAIN_UIPANEL,...
436                       'units','pixel',...
437                       'position',[tmp(1)+tmp(3)-80 5 80 25],...
438                       'string','Export',...
439                       'callback',@l_Export);
440  tmp = get(H.EXPORT,'position');
441  H.CANCEL = uicontrol('parent',H.MAIN_UIPANEL,...
442                       'units','pixel',...
443                       'position',[tmp(1)-80-5 5 80 25],...
444                       'string','Close',...
445                       'callback',@l_Quit);
446   
447  % Some internal variable defaults
448  if isfield(Dat.Res,'Stat') && Dat.Res.Stat(1).isMixed==0
449    if strcmpi(Dat.Res.FileInfo.DataFileName{1},'fid')
450      [fp,fn,fe]=fileparts(Dat.Res.FileInfo.DataPathName{1}(1:end-1));
451      Dat.ResFileName = fn;
452    else
453      Dat.ResFileName = Dat.Res.FileInfo.DataFileName{1};
454    end
455  else
456    Dat.ResFileName = '';
457  end
458  Dat.OldFigSize = get(H.MAINFIG,'position');
459 
460  % Set resize function
461  set(H.MAINFIG,'resizefcn',@l_Resize)
462 
463end % function l_DrawGUI
464
465%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
466%
467% Resize Function
468%
469%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
470function l_Resize(h,evd)
471
472  fig_pos = get(H.MAINFIG,'position');
473  if fig_pos(4)<400 || fig_pos(3)<400
474    set(H.MAINFIG,'position',Dat.OldFigSize)
475    return
476  end
477  set(H.MAIN_UIPANEL,'position',...
478                    [10 10 300 fig_pos(4)-2*10]);
479  main_panel_pos = get(H.MAIN_UIPANEL,'position');
480  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]);
481  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]);
482  tmp=get(H.RESFRAME,'position');
483  set(H.RESTABLE_TX,'position',[tmp(1) tmp(2)+tmp(4) tmp(3) 15])
484 
485  % Reposition uipanels
486  tmp=get(H.MAIN_UIPANEL,'position');
487  set(H.OUTDIR_EDIT,'position',[10 tmp(4)-20-20 240 20])
488  tmp = get(H.OUTDIR_EDIT,'position');
489  set(H.OUTDIR_TX,'position',[tmp(1) tmp(2)+tmp(4)+2 100 12])
490  set(H.OUTPUT_BROWSE,'position',[tmp(1)+tmp(3)+5 tmp(2) 35 20])
491 
492  tmp = get(H.OUTDIR_EDIT,'position');
493  set(H.SELFILES_UIPANEL,'position',[tmp(1) tmp(2)-10-185 280 185])
494  tmp = get(H.SELFILES_UIPANEL,'position');
495  set(H.EXPORT_FILETYPES_GRP,'position',[10 tmp(2)-70-10 280 70])
496  tmp = get(H.EXPORT_FILETYPES_GRP,'position');
497  set(H.EXPORT_OPTIONS_GRP,'position',[10 tmp(2)-10-220 280 220])
498 
499  Dat.OldFigSize = fig_pos;
500   
501end % function l_Resize(h,
502
503%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
504%
505% ADD/REMOVE FILES
506%
507%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
508function l_AddRemoveFiles(h,evd,opt)
509   
510  %% Add files -----------------------
511  if strcmpi(opt,'add')
512   
513    [fname,pname]=aedes_juigetfiles({'*.res;*.RES','Aedes Res-files (*.res)';...
514                   '*.*','All Files (*.*)'},...
515                              'Select Res-files',pwd);
516    if ~iscell(fname)
517      % Canceled
518      return
519    end
520   
521    %% Add selected files to the list
522    FileList = get(H.SELFILES_LBOX,'string');
523    FileListUD = get(H.SELFILES_LBOX,'userdata');
524    if isempty(FileList)
525      if get(H.SHOWPATH,'value')
526        tmpstr = {};
527        for ii=1:length(fname)
528          tmpstr{ii} = [pname{ii},fname{ii}];
529        end
530        set(H.SELFILES_LBOX,'string',tmpstr);
531      else
532        set(H.SELFILES_LBOX,'string',fname);
533      end
534      FileListNewUD=cell(length(fname),2);
535      FileListNewUD(:,1) = pname(:);
536      FileListNewUD(:,2) = fname(:);
537      set(H.SELFILES_LBOX,'userdata',FileListNewUD)
538    else
539      FileListNewUD=cell(length(fname),2);
540      FileListNewUD(:,1) = pname(:);
541      FileListNewUD(:,2) = fname(:);
542     
543      %% Remove dublicates
544      tmp={FileListUD{all(ismember(FileListUD, ...
545                                         FileListNewUD),2),:}};
546      rm_ind=find(all(ismember(FileListNewUD,tmp),2));
547      if ~isempty(rm_ind)
548        isDublicate = true;
549        DublicateList = FileListNewUD(rm_ind,:);
550        FileListNewUD(rm_ind,:)=[];
551      else
552        isDublicate = false;
553        DublicateList = {};
554      end
555      NewFileList = cell(size(FileListUD,1)+size(FileListNewUD,1),2);
556      NewFileList(1:size(FileListUD,1),:)=FileListUD;
557      NewFileList(size(FileListUD,1)+1:end,:)=FileListNewUD;
558      if get(H.SHOWPATH,'value')
559        FileListNewCell={}
560        for ii=1:size(NewFileList,1)
561          FileListNewCell{ii} = [NewFileList{:,1},NewFileList{:,2}];
562        end
563      else
564        FileListNewCell = {NewFileList{:,2}};
565      end
566      set(H.SELFILES_LBOX,'string',FileListNewCell);
567      set(H.SELFILES_LBOX,'userdata',NewFileList);
568      set(H.SELFILES_LBOX,'value',[]);
569     
570      %% Warn about dublicates that were not added to the list
571      if isDublicate
572        warndlg({'The following dublicate files were ignored:',...
573                 '',DublicateList{:,2}},...
574                'Dublicate files ignored','modal');
575      end
576
577    end
578    % Enable remove buttons
579    set([H.REMFILES,H.REMALLFILES],'enable','on')
580   
581    %% Remove files ------------------
582  elseif strcmpi(opt,'remove')
583   
584    % Ask confirmation
585    resp=questdlg('Remove selected files from list?',...
586                  'Remove selected files?','Yes','No','No');
587    if strcmpi(resp,'No')
588      return
589    end
590   
591    val = get(H.SELFILES_LBOX,'value');
592    str = get(H.SELFILES_LBOX,'string');
593    % Return if files are not selected
594    if isempty(val)
595      return
596    end
597   
598    NewStr = str;
599    NewUD = get(H.SELFILES_LBOX,'userdata');
600    NewStr(val)=[];
601    NewUD(val,:)=[];
602   
603    set(H.SELFILES_LBOX,'value',[],'string',NewStr,...
604                      'userdata',NewUD)
605    if isempty(NewStr)
606      % Disable remove buttons
607      set([H.REMFILES,H.REMALLFILES],'enable','off')
608    end
609
610    % Check if preview needs to be cleared
611    if ~isempty(Dat.ResFileName) && ~isempty(NewUD)
612      [fp,fn,fe]=fileparts(Dat.ResFileName);
613      fp = [fp,filesep];
614      fn = [fn,fe];
615      tmp1 = strcmp(fn,{NewUD{:,2}});
616      tmp2 = strcmp(fp,{NewUD{:,1}});
617      tmp1=tmp1(:);
618      tmp2=tmp2(:);
619      bool=prod(double([tmp2 tmp1]),2);
620      if ~any(bool==1)
621        l_ResetPreview([],[])
622      end
623    else
624      l_ResetPreview([],[])
625    end
626   
627    %% Remove ALL files --------------
628  elseif strcmpi(opt,'remove_all')
629   
630    % Ask confirmation
631    resp=questdlg('Remove ALL files from list?',...
632                  'Remove ALL files?','Yes','No','No');
633    if strcmpi(resp,'No')
634      return
635    end
636   
637    set(H.SELFILES_LBOX,'value',[],'string',{},'userdata',{})
638    set([H.REMFILES,H.REMALLFILES],'enable','off')
639   
640    % Clear preview
641    l_ResetPreview([],[])
642  end
643 
644end % function l_AddRemoveFiles(h,
645
646
647%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
648%
649% LISTBOX CALLBACK
650%
651%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
652function l_ListBoxCallBack(h,evd)
653 
654  % Return immediately if not double-clicked
655  SelType = get(H.MAINFIG,'selectiontype');
656  if ~strcmpi(SelType,'open')
657    return
658  end
659 
660  % Set mouse pointer to hourglass
661  set(H.MAINFIG,'pointer','watch')
662  drawnow
663 
664  % Get file for preview
665  val=get(H.SELFILES_LBOX,'value');
666  if length(val)==0 || length(val)>1
667    set(H.MAINFIG,'pointer','arrow')
668    return
669  end
670  UD = get(H.SELFILES_LBOX,'userdata');
671  fname = [UD{val,1},UD{val,2}];
672 
673  % Try to load Res-file
674  try
675    tmp = load(fname,'-mat');
676  catch
677    errordlg({'Could not open Res-file',fname,...
678              '','Either the file is not a valid Res-file or it is corrupt.'},...
679             'Could not open Res-file','modal');
680    set(H.MAINFIG,'pointer','arrow')
681    return
682  end
683 
684  if ~isfield(tmp,'Res') || ~isfield(tmp.Res,'Stat') || ...
685        ~isfield(tmp.Res,'FileInfo') || ~isfield(tmp.Res,'DateTime')
686    errordlg({'Could not open Res-file',fname,...
687              '','Required fields are missing from the structure!'},...
688             'Could not open Res-file','modal');
689    set(H.MAINFIG,'pointer','arrow')
690    return
691  end
692  Dat.Res = tmp.Res;
693  Dat.ResFileName = fname;
694 
695  % Preview file
696  l_PreviewFile([],[]);
697  set(H.MAINFIG,'pointer','arrow')
698  drawnow
699 
700end % function l_ListBoxCallBack(h,
701
702
703%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
704%
705% PREVIEW FILE
706%
707%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
708function l_PreviewFile(h,evd)
709 
710  if isempty(Dat.Res)
711    return
712  end
713 
714  % Get export options
715  sortbyroi = get(H.SORTBY,'value');
716  if sortbyroi==1
717    sortbyroi = true;
718  else
719    sortbyroi = false;
720  end
721  decsepval = get(H.DECSEPARATOR,'value');
722  setpref('Aedes','ResViewerDecSep',decsepval)
723  if decsepval==1
724    decsep = ',';
725  else
726    decsep = '.';
727  end
728  numdec = get(H.NUMDEC,'string');
729  numdec = str2num(numdec);
730  numdec = floor(numdec);
731  if isempty(numdec) || ~isreal(numdec) || numdec<0
732    errordlg('The "Number of decimals" value must be a positive integer!',...
733             'Error in "Number of decimals" field','modal')
734    return
735  end
736 
737  % Get print directions
738  Dat.dirs = '';
739  if get(H.PRINT_TOTAL,'value')
740    Dat.dirs(end+1) = 'T';
741  end
742  if get(H.PRINT_XDIR,'value')
743    Dat.dirs(end+1) = 'X';
744  end
745  if get(H.PRINT_YDIR,'value')
746    Dat.dirs(end+1) = 'Y';
747  end
748  if get(H.PRINT_ZDIR,'value')
749    Dat.dirs(end+1) = 'Z';
750  end
751  if get(H.PRINT_VDIR,'value')
752    Dat.dirs(end+1) = 'V';
753  end
754 
755  % Save number of decimals
756  setpref('Aedes','ResViewerNumDec',numdec)
757 
758  % Save printed directions
759  setpref('Aedes','StatPrintDirs',Dat.dirs)
760 
761  % Generate cell table from Res
762  ResTable = aedes_res2table(Dat.Res,'sortbyroi',sortbyroi,...
763                       'decsep',decsep,'numdec',numdec,...
764                       'resfilename',Dat.ResFileName,...
765                       'dirs',Dat.dirs);
766 
767  set(H.RESFRAME,'visible','off')
768  drawnow
769  drawnow
770 
771  % Clear restable
772  if Dat.MatlabVersion>=7.6
773        set(H.RESTABLE,'data',[])
774        set(H.RESTABLE,'Data',ResTable,...
775          'visible','on',...
776    'ColumnWidth',...
777    {140,80,80,80,80,80,80})
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.6
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