NIFTI_20090325/view_nii_menu.m
87b08fd7
 %  Imbed Zoom, Interp, and Info menu to view_nii window.
 %
 %  Usage: view_nii_menu(fig);
 %
 
 %  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
 %
 %--------------------------------------------------------------------
 function menu_hdl = view_nii_menu(fig, varargin)
 
    if isnumeric(fig)
       menu_hdl = init(fig);
       return;
    end
 
    menu_hdl = [];
 
    switch fig
    case 'interp'
       if nargin > 1
          fig = varargin{1};
       else
          fig = gcbf;
       end
 
       nii_menu = getappdata(fig, 'nii_menu');
       interp_on_state = get(nii_menu.Minterp,'Userdata');
 
       if (interp_on_state == 1)
          opt.useinterp = 1;
          view_nii(fig,opt);
          set(nii_menu.Minterp,'Userdata',0,'Label','Interp off');
          reset_zoom(fig);
       else
          opt.useinterp = 0;
          view_nii(fig,opt);
          set(nii_menu.Minterp,'Userdata',1,'Label','Interp on');
          reset_zoom(fig);
       end
    case 'reset_zoom'
       if nargin > 1
          fig = varargin{1};
       else
          fig = gcbf;
       end
 
       reset_zoom(fig);
    case 'orient'
       orient;
    case 'img_info'
       img_info;
    case 'save_disp'
       save_disp;
    end
 
    return					% view_nii_menu
 
 
 %--------------------------------------------------------------------
 function menu_hdl = init(fig)
 
    %  search for edit, view menu
    %
    nii_menu.Mfile = [];
    nii_menu.Medit = [];
    nii_menu.Mview = [];
    menuitems = findobj(fig, 'type', 'uimenu');
 
    for i=1:length(menuitems)
       filelabel = get(menuitems(i),'label');
 
       if strcmpi(strrep(filelabel, '&', ''), 'file')
          nii_menu.Mfile = menuitems(i);
       end
 
       editlabel = get(menuitems(i),'label');
 
       if strcmpi(strrep(editlabel, '&', ''), 'edit')
          nii_menu.Medit = menuitems(i);
       end
 
       viewlabel = get(menuitems(i),'label');
 
       if strcmpi(strrep(viewlabel, '&', ''), 'view')
          nii_menu.Mview = menuitems(i);
       end
    end
 
    set(fig, 'menubar', 'none');
 
    if isempty(nii_menu.Mfile)
       nii_menu.Mfile = uimenu('Parent',fig, ...
    	   'Label','File');
 
       nii_menu.Mfile_save = uimenu('Parent',nii_menu.Mfile, ...
    	   'Label','Save displayed image as ...', ...
            'Callback','view_nii_menu(''save_disp'');');
    else
       nii_menu.Mfile_save = uimenu('Parent',nii_menu.Mfile, ...
    	   'Label','Save displayed image as ...', ...
            'separator','on', ...
            'Callback','view_nii_menu(''save_disp'');');
    end
 
    if isempty(nii_menu.Medit)
       nii_menu.Medit = uimenu('Parent',fig, ...
    	   'Label','Edit');
 
       nii_menu.Medit_orient = uimenu('Parent',nii_menu.Medit, ...
    	   'Label','Convert to RAS orientation', ...
            'Callback','view_nii_menu(''orient'');');
    else
       nii_menu.Medit_orient = uimenu('Parent',nii_menu.Medit, ...
    	   'Label','Convert to RAS orientation', ...
            'separator','on', ...
            'Callback','view_nii_menu(''orient'');');
    end
 
    if isempty(nii_menu.Mview)
       nii_menu.Mview = uimenu('Parent',fig, ...
    	   'Label','View');
 
       nii_menu.Mview_info = uimenu('Parent',nii_menu.Mview, ...
    	   'Label','Image Information', ...
            'Callback','view_nii_menu(''img_info'');');
    else
       nii_menu.Mview_info = uimenu('Parent',nii_menu.Mview, ...
    	   'Label','Image Information', ...
            'separator','on', ...
            'Callback','view_nii_menu(''img_info'');');
    end
 
    nii_menu.Mzoom = rri_zoom_menu(fig);
 
    nii_menu.Minterp = uimenu('Parent',fig, ...
    	   'Label','Interp on', ...
 	   'Userdata', 1, ...
            'Callback','view_nii_menu(''interp'');');
 
    setappdata(fig,'nii_menu',nii_menu);
    menu_hdl = nii_menu.Minterp;
 
    return					% init
 
 
 %----------------------------------------------------------------
 function reset_zoom(fig)
 
    old_handle_vis = get(fig, 'HandleVisibility');
    set(fig, 'HandleVisibility', 'on');
 
    nii_view = getappdata(fig, 'nii_view');
    nii_menu = getappdata(fig, 'nii_menu');
 
    set(nii_menu.Mzoom,'Userdata',1,'Label','Zoom on');
    set(fig,'pointer','arrow');
    zoom off;
 
    axes(nii_view.handles.axial_axes);
    setappdata(get(gca,'zlabel'), 'ZOOMAxesData', ...
 			[get(gca, 'xlim') get(gca, 'ylim')])
 %   zoom reset;
  %  zoom getlimits;
    zoom out;
 
    axes(nii_view.handles.coronal_axes);
    setappdata(get(gca,'zlabel'), 'ZOOMAxesData', ...
 			[get(gca, 'xlim') get(gca, 'ylim')])
 %   zoom reset;
  %  zoom getlimits;
    zoom out;
 
    axes(nii_view.handles.sagittal_axes);
    setappdata(get(gca,'zlabel'), 'ZOOMAxesData', ...
 			[get(gca, 'xlim') get(gca, 'ylim')])
 %   zoom reset;
  %  zoom getlimits;
    zoom out;
 
    set(fig, 'HandleVisibility', old_handle_vis);
 
    return;					% reset_zoom
 
 
 %----------------------------------------------------------------
 function img_info
 
    nii_view = getappdata(gcbf, 'nii_view');
    hdr = nii_view.nii.hdr;
 
    max_value = num2str(double(max(nii_view.nii.img(:))));
    min_value = num2str(double(min(nii_view.nii.img(:))));
 
    dim = sprintf('%d  %d  %d', double(hdr.dime.dim(2:4)));
    vox = sprintf('%.3f  %.3f  %.3f', double(hdr.dime.pixdim(2:4)));
 
    if double(hdr.dime.datatype) == 1
       type = '1-bit binary';
    elseif double(hdr.dime.datatype) == 2
       type = '8-bit unsigned integer';
    elseif double(hdr.dime.datatype) == 4
       type = '16-bit signed integer';
    elseif double(hdr.dime.datatype) == 8
       type = '32-bit signed integer';
    elseif double(hdr.dime.datatype) == 16
       type = '32-bit single float';
    elseif double(hdr.dime.datatype) == 64
       type = '64-bit double precision';
    elseif double(hdr.dime.datatype) == 128
       type = '24-bit RGB true color';
    elseif double(hdr.dime.datatype) == 256
       type = '8-bit signed integer';
    elseif double(hdr.dime.datatype) == 511
       type = '96-bit RGB true color';
    elseif double(hdr.dime.datatype) == 512
       type = '16-bit unsigned integer';
    elseif double(hdr.dime.datatype) == 768
       type = '32-bit unsigned integer';
    elseif double(hdr.dime.datatype) == 1024
       type = '64-bit signed integer';
    elseif double(hdr.dime.datatype) == 1280
       type = '64-bit unsigned integer';
    end
 
    msg = {};
    msg = [msg {''}];
    msg = [msg {['Dimension:  [', dim, ']']}];
    msg = [msg {''}];
    msg = [msg {['Voxel Size:  [', vox, ']']}];
    msg = [msg {''}];
    msg = [msg {['Data Type:  [', type, ']']}];
    msg = [msg {''}];
    msg = [msg {['Max Value:  [', max_value, ']']}];
    msg = [msg {''}];
    msg = [msg {['Min Value:  [', min_value, ']']}];
    msg = [msg {''}];
 
    if isfield(nii_view.nii, 'fileprefix')
       if isfield(nii_view.nii, 'filetype') & nii_view.nii.filetype == 2
          msg = [msg {['File Name:  [', nii_view.nii.fileprefix, '.nii]']}];
          msg = [msg {''}];
       elseif isfield(nii_view.nii, 'filetype')
          msg = [msg {['File Name:  [', nii_view.nii.fileprefix, '.img]']}];
          msg = [msg {''}];
       else
          msg = [msg {['File Prefix:  [', nii_view.nii.fileprefix, ']']}];
          msg = [msg {''}];
       end
    end
 
    h = msgbox(msg, 'Image Information', 'modal');
    set(h,'color',[1 1 1]);
 
    return;					% img_info
 
 
 %----------------------------------------------------------------
 function orient
 
    fig = gcbf;
    nii_view = getappdata(fig, 'nii_view');
    nii = nii_view.nii;
 
    old_pointer = get(fig,'Pointer');
    set(fig,'Pointer','watch');
 
    [nii orient] = rri_orient(nii);
 
    if isequal(orient, [1 2 3])		% do nothing
       set(fig,'Pointer',old_pointer);
       return;
    end
 
    oldopt = view_nii(fig);
    opt.setarea = oldopt.area;
    opt.usecolorbar = oldopt.usecolorbar;
    opt.usecrosshair = oldopt.usecrosshair;
    opt.usestretch = oldopt.usestretch;
    opt.useimagesc = oldopt.useimagesc;
    opt.useinterp = oldopt.useinterp;
    opt.command = 'updatenii';
 
    view_nii(fig, nii, opt);
    set(fig,'Pointer',old_pointer);
    reset_zoom(fig);
 
    return;					% orient
 
 
 %----------------------------------------------------------------
 function save_disp
 
    [filename pathname] = uiputfile('*.*', 'Save displayed image as (*.nii or *.img)');
 
    if isequal(filename,0) | isequal(pathname,0)
       return;
    else
       out_imgfile = fullfile(pathname, filename);	% original image file
    end
 
    old_pointer = get(gcbf,'Pointer');
    set(gcbf,'Pointer','watch');
 
    nii_view = getappdata(gcbf, 'nii_view');
    nii = nii_view.nii;
 
    try
       save_nii(nii, out_imgfile);
    catch
       msg = 'File can not be saved.';
       msgbox(msg, 'File write error', 'modal');
    end
 
    set(gcbf,'Pointer',old_pointer);
 
    return;					% save_disp