source: aedes_resviewer.m @ 151

Last change on this file since 151 was 150, checked in by tjniskan, 9 years ago
  • Fixed a small figure resize bug in aedes_resviewer
  • Added a quick hack for disabling mouse wheel zooming, which

apparently has some issues in OSX with magic mouse. Zooming can be
disabled by setting the DisableMouseWheel? preference to true, i.e.
setpref('Aedes','DisableMouseWheel?',true)

M aedes_resviewer.m
M aedes.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
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','aedes_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  tmp=get(H.MAIN_UIPANEL,'position');
476  set(H.MAIN_UIPANEL,'position',[tmp(1) fig_pos(4)-tmp(4)-10 tmp(3:4)]);
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.06
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    'ColumnFormat',repmat({'char'},1,7),...
779    'ColumnName',[])
780  else
781        set(H.RESTABLE,'NumRows',2,...
782          'NumColumns',2);
783        drawnow
784        drawnow
785        tmp={'','';'',''};
786        set(H.RESTABLE,'Data',tmp)
787        drawnow
788        drawnow
789       
790        % Update res table
791        set(H.RESTABLE,'visible',true)
792        drawnow
793        drawnow
794        set(H.RESTABLE,'NumRows',size(ResTable,1),...
795          'NumColumns',size(ResTable,2))
796        drawnow
797        drawnow
798        set(H.RESTABLE,'Data',ResTable);
799        drawnow
800        drawnow
801  end
802 
803 
804 
805  %drawnow
806  if ~Dat.SingleFileMode
807    set(H.RESTABLE_TX,'string',['Output preview ("' Dat.ResFileName '")'])
808  end
809
810end % function l_PreviewFiles(h,
811
812
813%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
814%
815% RESET FILE PREVIEW
816%
817%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
818function l_ResetPreview(h,evd)
819 
820  Dat.Res = [];
821  Dat.ReFileName = '';
822  if Dat.MatlabVersion>=7.06
823        set(H.RESTABLE,'visible','off',...
824          'Data',[]);
825  else
826        set(H.RESTABLE,'visible',false,...
827          'Data',[]);
828  end
829  set(H.RESFRAME,'visible','on')
830  set(H.RESTABLE_TX,'string','Output preview ("N/A")')
831  drawnow
832end % function l_ResetPreview(h,
833
834%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
835%
836% EXPORT RESULTS
837%
838%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
839function l_Export(h,evd)
840 
841  % Check if there is something to export
842  if ~Dat.SingleFileMode
843    UD = get(H.SELFILES_LBOX,'userdata');
844    if isempty(UD)
845      h=errordlg('Nothing to export!','Error Exporting Files','modal');
846      return
847    end
848  end
849 
850  % Get Export types
851  WriteXLS = get(H.OUTPUTTYPE_XLS,'value');
852  WriteTXT = get(H.OUTPUTTYPE_TXT,'value');
853  if ~WriteXLS && ~WriteTXT
854    h=errordlg('Export file type not selected!','Error Exporting Files','modal');
855    return
856  end
857 
858  % Save values to preferences
859  setpref('Aedes','ResViewerWriteXLS',WriteXLS)
860  setpref('Aedes','ResViewerWriteTXT',WriteTXT)
861 
862  % Get export parameters
863  outdir = get(H.OUTDIR_EDIT,'string');
864  if ~isempty(outdir) && outdir(end)~=filesep
865    outdir = [outdir,filesep];
866  end
867  sortbyroi = get(H.SORTBY,'value');
868  if sortbyroi==1
869    sortbyroi = true;
870  else
871    sortbyroi = false;
872  end
873  decsepval = get(H.DECSEPARATOR,'value');
874  if decsepval==1
875    decsep = ',';
876  else
877    decsep = '.';
878  end
879  numdec = get(H.NUMDEC,'string');
880  numdec = str2num(numdec);
881  numdec = floor(numdec);
882  if isempty(numdec) || ~isreal(numdec) || numdec<0
883    errordlg('The "Number of decimals" value must be a positive integer!',...
884             'Error in "Number of decimals" field','modal')
885    return
886  end
887 
888  %% Start Exporting files --------------------------
889  if ~Dat.SingleFileMode
890    wbar_h=aedes_wbar(0,{'Processing file','""'});
891    set(get(findall(wbar_h,'type','axes'),'title'),'interpreter','none')
892    nFiles = size(UD,1);
893    success = true(1,nFiles);
894    for ii=1:nFiles
895      resfilename = [UD{ii,1},UD{ii,2}];
896      [fp,fn,fe]=fileparts(UD{ii,2});
897      outfilename = [outdir,fn];
898      aedes_wbar(ii/nFiles,wbar_h,{'Processing file',['"',resfilename,'"']});
899     
900      % Open file
901      try
902        tmp = load([UD{ii,1},UD{ii,2}],'-mat');
903      catch
904        success(ii)=false;
905        fprintf(1,'Could not open file "%s". Skipping...\n',resfilename)
906        continue;
907      end
908     
909      if ~isfield(tmp,'Res') || ~isfield(tmp.Res,'Stat') || ...
910            ~isfield(tmp.Res,'FileInfo') || ~isfield(tmp.Res,'DateTime')
911        success(ii)=false;
912        fprintf(1,'Required field(s) missing! Skipping file "%s".\n',...
913                resfilename)
914        continue;
915      end
916     
917      % Generate cell table
918      ResTable = aedes_res2table(tmp.Res,'sortbyroi',sortbyroi,...
919                           'decsep',decsep,'numdec',numdec,...
920                           'resfilename',resfilename,...
921                           'dirs',Dat.dirs);
922     
923      % Write XLS
924      if WriteXLS
925        bool = xlswrite([outfilename,'.xls'],ResTable);
926        if ~bool
927          success(ii)=false;
928          fprintf(1,'Could not write "%s". Skipping file...\n',[outfilename,'.xls'])
929        end
930      end
931     
932      % Write TXT
933      if WriteTXT
934        bool = aedes_cellwrite(ResTable,[outfilename,'.txt'],...
935                         'delimitter','tab');
936        if ~bool
937          success(ii)=false;
938          fprintf(1,'Could not write "%s". Skipping file...\n',[outfilename,'.txt'])
939        end
940      end
941     
942    end
943    close(wbar_h)
944   
945    if all(success)
946      h=helpdlg(['Successfully exported ',num2str(nFiles),' files!'],...
947                'Export Success');
948    else
949      SkippedFiles={};
950      count=1;
951      for ii=1:nFiles
952        if success(ii)==0
953          SkippedFiles{count} = [UD{ii,1},UD{ii,2}];
954          count=count+1;
955        end
956      end
957      h=warndlg({['Errors occurred while exporting.',...
958                  ' The following files could not be exported:'],'',...
959                 SkippedFiles{:}},'Errors occurred while exporting');
960    end
961   
962    % Save export directory to preferences
963    setpref('Aedes','PutXLSFileDir',outdir);
964   
965  else % Export in single file mode
966   
967    success = true;
968    try
969      outdir = getpref('Aedes','PutXLSFileDir');
970    catch
971      outdir = pwd;
972    end
973   
974    if ~strcmp(outdir(end),filesep)
975      outdir = [outdir,filesep];
976    end
977   
978    %[fp,fn,fe]=fileparts(Dat.Res.FileInfo.DataFileName{1});
979   
980    % Ask for a file
981    [fname,fpath,findex]=uiputfile({'*.xls;*.XLS;*.txt;*.TXT',...
982                   'Excel and Text Files (*.xls,*.txt)';...
983                   '*.*','All Files (*.*)'},'Export Results As',...
984                                   [outdir,Dat.ResFileName]);
985    if isequal(fname,0) || isequal(fpath,0)
986      % Action cancelled
987      return
988    end
989   
990    % Check filename
991    CheckXLS = true;
992    CheckTXT = true;
993    [fp,fn,fe]=fileparts(fname);
994    if strcmpi(fe,'.xls')
995      CheckXLS = false;
996      xlsfname = [fn,fe];
997      txtfname = [fn,'.txt'];
998    elseif strcmpi(fe,'.txt')
999      CheckTXT = false;
1000      xlsfname = [fn,'.xls'];
1001      txtfname = [fn,fe];
1002    else
1003      xlsfname = [fn,fe,'.xls'];
1004      txtfname = [fn,fe,'.txt'];
1005    end
1006   
1007    % Check if files exist
1008    if WriteXLS && CheckXLS
1009      if exist(xlsfname,'file')==2
1010        resp = questdlg({'File',['"',xlsfname,'"'],'already exists. Overwrite?'},...
1011          'Overwrite file?','Yes','No','No');
1012        if isempty(resp) || strcmpi(resp,'No')
1013          return
1014        end
1015      end
1016    end
1017    if WriteTXT && CheckTXT
1018      if exist(txtfname,'file')==2
1019        resp = questdlg({'File',['"',txtfname,'"'],'already exists. Overwrite?'},...
1020          'Overwrite file?','Yes','No','No');
1021        if isempty(resp) || strcmpi(resp,'No')
1022          return
1023        end
1024      end
1025    end
1026   
1027    % Generate cell table
1028    ResTable = aedes_res2table(Dat.Res,'sortbyroi',sortbyroi,...
1029                         'decsep',decsep,'numdec',numdec,...
1030                         'resfilename',Dat.ResFileName,...
1031                         'dirs',Dat.dirs);
1032   
1033    % Show aedes_calc_wait
1034    [h,txh]=aedes_calc_wait('');
1035   
1036    % Write XLS
1037    if WriteXLS
1038      set(txh,'string',{'Writing Excel XLS file',[fpath,xlsfname]})
1039      drawnow
1040      bool = xlswrite([fpath,xlsfname],ResTable);
1041      if ~bool
1042        success=false;
1043        fprintf(1,'Could not write "%s". Skipping file...\n',[fpath,xlsfname])
1044      end
1045    end
1046     
1047    % Write TXT
1048    if WriteTXT
1049      set(txh,'string',{'Writing TXT file',[fpath,txtfname]})
1050      drawnow
1051      bool = aedes_cellwrite(ResTable,[fpath,txtfname],...
1052                       'delimitter','tab');
1053      if ~bool
1054        success=false;
1055        fprintf(1,'Could not write "%s". Skipping file...\n',[fpath,txtfname])
1056      end
1057    end
1058    delete(h);
1059   
1060    if ~success
1061      h=warndlg('Errors occurred while exporting. Export failed.','Export failed!');
1062    end
1063   
1064    % Save export directory to preferences
1065    setpref('Aedes','PutXLSFileDir',fpath);
1066   
1067  end
1068 
1069 
1070 
1071end % function l_Export(h,
1072
1073%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1074%
1075% BROWSE FOLDERS
1076%
1077%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1078function l_BrowseFolders(h,evd)
1079 
1080  % Get currently selected folder from the edit box
1081  OldDir=get(H.OUTDIR_EDIT,'string');
1082  if ~isdir(OldDir)
1083    OldDir = pwd;
1084  end
1085 
1086  % Show folder selection dialog
1087  NewDir = uigetdir(OldDir,'Select output folder');
1088  if all(NewDir==0)
1089    % Action canceled
1090    return
1091  end
1092 
1093  % Update output directory edit box
1094  set(H.OUTDIR_EDIT,'string',NewDir,...
1095                    'userdata',NewDir)
1096 
1097end % function l_BrowseFolders(h,
1098
1099%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1100%
1101% CHECK OUTPUT DIRECTORY
1102%
1103%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1104function l_CheckOutputDir(h,evd) % ---------------------------
1105 
1106  output_dir = get(H.OUTDIR_EDIT,'string');
1107  if ~isdir(output_dir)
1108    h=warndlg({'The selected folder',['"' output_dir '"'],...
1109               'doesn''t exist.'},'Folder doesn''t exist','modal');
1110    set(H.OUTDIR_EDIT,'string',get(H.OUTDIR_EDIT,'userdata'))
1111  else
1112    set(H.OUTDIR_EDIT,'userdata',output_dir)
1113  end
1114 
1115end % function l_CheckOutputDir(h,
1116
1117%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1118%
1119% QUIT AEDES_RESVIEWER
1120%
1121%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1122function l_Quit(h,evd) % --------------------------------------
1123 
1124  % Clear public variables
1125  fig_h = H.MAINFIG;
1126  clear H Dat
1127 
1128  % Close aedes_resviewer window
1129  delete(fig_h)
1130 
1131end % function l_Quit(h,
1132
1133%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1134%
1135% Show/hide full path
1136%
1137%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1138function l_ShowFullPath(h,evd)
1139 
1140  UD = get(H.SELFILES_LBOX,'userdata');
1141  if isempty(UD)
1142    return
1143  end
1144 
1145  % Construct new string to the file listbox
1146  NewStr = {};
1147  if get(H.SHOWPATH,'value')
1148    for ii=1:size(UD,1)
1149      NewStr{ii} = [UD{ii,1},UD{ii,2}];
1150    end
1151  else
1152    NewStr = {UD{:,2}};
1153  end
1154  set(H.SELFILES_LBOX,'string',NewStr)
1155 
1156end % function l_ShowFullPath(h,
1157
1158end % function aedes_resviewer(Res_in)
1159
Note: See TracBrowser for help on using the repository browser.

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