0001 function varargout=nic_spm_figure(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199
0200
0201
0202
0203 if (nargin==0), Action = 'Create'; else Action = varargin{1}; end
0204
0205 switch lower(Action), case 'create'
0206
0207
0208
0209 if nargin<4, Visible='on'; else Visible=varargin{4}; end
0210 if nargin<3, Name=''; else, Name=varargin{3}; end
0211 if nargin<2, Tag=''; else Tag=varargin{2}; end
0212
0213 F = nic_spm_figure('CreateWin',Tag,Name,Visible);
0214 nic_spm_figure('CreateBar',F);
0215 nic_spm_figure('FigContextMenu',F);
0216 varargout = {F};
0217
0218
0219 case 'findwin'
0220
0221
0222
0223
0224
0225
0226 if nargin<2, F='Graphics'; else F=varargin{2}; end
0227
0228 if isempty(F)
0229
0230 elseif ischar(F)
0231
0232 Tag=F;
0233 F = findobj(get(0,'Children'),'Flat','Tag',Tag);
0234 if length(F) > 1
0235
0236 close(F(2:end))
0237 F = F(1);
0238 end
0239 else
0240
0241 if ~any(F==get(0,'Children')), F=[]; end
0242 end
0243 varargout = {F};
0244
0245 case 'getwin'
0246
0247
0248
0249 if nargin<2, Tag='Graphics'; else Tag=varargin{2}; end
0250 F = nic_spm_figure('FindWin',Tag);
0251
0252 if isempty(F)
0253 if ischar(Tag)
0254 switch Tag, case 'Graphics'
0255 F = nic_spm_figure('Create','Graphics','Graphics');
0256 case 'Interactive'
0257 F = nic_spm('CreateIntWin');
0258 end
0259 end
0260 else
0261 set(0,'CurrentFigure',F);
0262 end
0263 varargout = {F};
0264
0265 case 'parentfig'
0266
0267
0268 if nargin<2, error('No object specified'), else h=varargin{2}; end
0269 F = get(h(1),'Parent');
0270 while ~strcmp(get(F,'Type'),'figure'), F=get(F,'Parent'); end
0271 varargout = {F};
0272
0273
0274 case 'clear'
0275
0276
0277
0278
0279
0280 if nargin<3, Tags=[]; else Tags=varargin{3}; end
0281 if nargin<2, F=get(0,'CurrentFigure'); else F=varargin{2}; end
0282 F = nic_spm_figure('FindWin',F);
0283 if isempty(F), return, end
0284
0285
0286
0287 if isempty(Tags)
0288
0289 pos = get(F,'Position');
0290 delete(findobj(get(F,'Children'),'flat','HandleVisibility','on'));
0291 drawnow
0292 set(F,'Position',pos);
0293
0294
0295 set(F,'KeyPressFcn','',...
0296 'WindowButtonDownFcn','',...
0297 'WindowButtonMotionFcn','',...
0298 'WindowButtonUpFcn','')
0299
0300 if strcmp(get(F,'Tag'),'Interactive')
0301 set(F,'Name','','UserData',[]), end
0302 else
0303
0304 cSHH = get(0,'ShowHiddenHandles');
0305 set(0,'ShowHiddenHandles','on')
0306 if ischar(Tags); Tags=cellstr(Tags); end
0307 if any(strcmp(Tags(:),'!all'))
0308 delete(get(F,'Children'))
0309 else
0310 for tag = Tags(:)'
0311 delete(findobj(get(F,'Children'),'flat','Tag',tag{:}));
0312 end
0313 end
0314 set(0,'ShowHiddenHandles',cSHH)
0315 end
0316 set(F,'Pointer','Arrow')
0317 movegui(F);
0318
0319
0320 case 'print'
0321
0322
0323
0324
0325 if nargin<2, F='Graphics'; else F=varargin{2}; end
0326
0327
0328
0329 F=nic_spm_figure('FindWin',F);
0330 if isempty(F), F = get(0,'CurrentFigure'); end
0331 if isempty(F), return, end
0332
0333
0334 cF = get(0,'CurrentFigure');
0335 set(0,'CurrentFigure',F)
0336
0337
0338 hNextPage = findobj(F,'Tag','NextPage');
0339 hPrevPage = findobj(F,'Tag','PrevPage');
0340 hPageNo = findobj(F,'Tag','PageNo');
0341 iPaged = ~isempty(hNextPage);
0342
0343
0344
0345
0346
0347
0348
0349 H = findobj(get(F,'Children'),'flat','Type','axes');
0350 if ~isempty(H),
0351 un = cellstr(get(H,'Units'));
0352 set(H,'Units','normalized')
0353 end;
0354
0355
0356
0357 if ~iPaged
0358 nic_spm_print;
0359 else
0360 hPg = get(hNextPage,'UserData');
0361 Cpage = get(hPageNo, 'UserData');
0362 nPages = size(hPg,1);
0363
0364 set([hNextPage,hPrevPage,hPageNo],'Visible','off')
0365 if Cpage~=1
0366 set(hPg{Cpage,1},'Visible','off'), end
0367 for p = 1:nPages
0368 set(hPg{p,1},'Visible','on');
0369 nic_spm_print;
0370 set(hPg{p,1},'Visible','off')
0371 end
0372 set(hPg{Cpage,1},'Visible','on')
0373 set([hNextPage,hPrevPage,hPageNo],'Visible','on')
0374 end
0375 if ~isempty(H), set(H,{'Units'},un); end;
0376 set(0,'CurrentFigure',cF)
0377
0378 case 'newpage'
0379
0380
0381 if nargin<2 || isempty(varargin{2}) error('No handles to paginate')
0382 else h=varargin{2}(:)'; end
0383
0384
0385 F = nic_spm_figure('ParentFig',h(1));
0386
0387 hNextPage = findobj(F,'Tag','NextPage');
0388 hPrevPage = findobj(F,'Tag','PrevPage');
0389 hPageNo = findobj(F,'Tag','PageNo');
0390
0391
0392
0393 if isempty(hNextPage)
0394 WS = nic_spm('WinScale');
0395 FS = nic_spm('FontSizes');
0396 SatFig = findobj('Tag','Satellite');
0397 if ~isempty(SatFig)
0398 SatFigPos = get(SatFig,'Position');
0399 hNextPagePos = [SatFigPos(3)-25 15 15 15];
0400 hPrevPagePos = [SatFigPos(3)-40 15 15 15];
0401 hPageNo = [SatFigPos(3)-40 5 30 10];
0402 else
0403 hNextPagePos = [580 022 015 015].*WS;
0404 hPrevPagePos = [565 022 015 015].*WS;
0405 hPageNo = [550 005 060 015].*WS;
0406 end
0407
0408 hNextPage = uicontrol(F,'Style','Pushbutton',...
0409 'HandleVisibility','on',...
0410 'String','>','FontSize',FS(10),...
0411 'ToolTipString','next page',...
0412 'Callback','nic_spm_figure(''TurnPage'',''+1'',gcbf)',...
0413 'Position',hNextPagePos,...
0414 'ForegroundColor',[0 0 0],...
0415 'Tag','NextPage','UserData',[]);
0416 hPrevPage = uicontrol(F,'Style','Pushbutton',...
0417 'HandleVisibility','on',...
0418 'String','<','FontSize',FS(10),...
0419 'ToolTipString','previous page',...
0420 'Callback','nic_spm_figure(''TurnPage'',''-1'',gcbf)',...
0421 'Position',hPrevPagePos,...
0422 'Visible','on',...
0423 'Enable','off',...
0424 'Tag','PrevPage');
0425 hPageNo = uicontrol(F,'Style','Text',...
0426 'HandleVisibility','on',...
0427 'String','1',...
0428 'FontSize',FS(6),...
0429 'HorizontalAlignment','center',...
0430 'BackgroundColor','w',...
0431 'Position',hPageNo,...
0432 'Visible','on',...
0433 'UserData',1,...
0434 'Tag','PageNo','UserData',1);
0435 end
0436
0437
0438
0439
0440 mVis = strcmp('on',get(h,'Visible'));
0441 hPg = get(hNextPage,'UserData');
0442 if isempty(hPg)
0443 hPg = {h(mVis), h(~mVis)};
0444 else
0445 hPg = [hPg; {h(mVis), h(~mVis)}];
0446 set(h(mVis),'Visible','off','HitTest','off')
0447 end
0448 set(hNextPage,'UserData',hPg)
0449
0450
0451 if nargout>0, varargout = {[hNextPage, hPrevPage, hPageNo]}; end
0452
0453
0454 case 'turnpage'
0455
0456
0457 if nargin<3, F='Graphics'; else F=varargin{3}; end
0458 if nargin<2, move=1; else move=varargin{2}; end
0459 F = nic_spm_figure('FindWin',F);
0460 if isempty(F), error('No Graphics window'), end
0461
0462 hNextPage = findobj(F,'Tag','NextPage');
0463 hPrevPage = findobj(F,'Tag','PrevPage');
0464 hPageNo = findobj(F,'Tag','PageNo');
0465 if isempty(hNextPage), return, end
0466 hPg = get(hNextPage,'UserData');
0467 Cpage = get(hPageNo, 'UserData');
0468 nPages = size(hPg,1);
0469
0470
0471 if ischar(move), Npage = Cpage+eval(move); else Npage = move; end
0472 Npage = max(min(Npage,nPages),1);
0473
0474
0475 set(hPg{Cpage,1},'Visible','off')
0476 set(hPg{Npage,1},'Visible','on')
0477 set(hPageNo,'UserData',Npage,'String',sprintf('%d / %d',Npage,nPages))
0478
0479 for k = 1:length(hPg{Npage,1})
0480 if strcmp(get(hPg{Npage,1}(k),'Type'),'axes')
0481 axes(hPg{Npage,1}(k))
0482 end;
0483 end;
0484
0485
0486 if Npage==1, set(hPrevPage,'Enable','off')
0487 else set(hPrevPage,'Enable','on'), end
0488 if Npage==nPages, set(hNextPage,'Enable','off')
0489 else set(hNextPage,'Enable','on'), end
0490
0491
0492
0493 case 'deletepagecontrols'
0494
0495
0496 if nargin<2, F='Graphics'; else F=varargin{2}; end
0497 F = nic_spm_figure('FindWin',F);
0498 if isempty(F), error('No Graphics window'), end
0499
0500 hNextPage = findobj(F,'Tag','NextPage');
0501 hPrevPage = findobj(F,'Tag','PrevPage');
0502 hPageNo = findobj(F,'Tag','PageNo');
0503
0504 delete([hNextPage hPrevPage hPageNo])
0505
0506
0507 case '#page'
0508
0509
0510 if nargin<2, F='Graphics'; else F=varargin{2}; end
0511 F = nic_spm_figure('FindWin',F);
0512 if isempty(F), error('No Graphics window'), end
0513
0514 hNextPage = findobj(F,'Tag','NextPage');
0515 if isempty(hNextPage)
0516 n = 1;
0517 else
0518 n = size(get(hNextPage,'UserData'),1)+1;
0519 end
0520 varargout = {n};
0521
0522
0523 case 'watermark'
0524
0525
0526 if nargin<6, HVis='on'; else HVis='off'; end
0527 if nargin<5, Angle=-45; else Angle=varargin{5}; end
0528 if nargin<4 || isempty(varargin{4}), Tag = 'WaterMark'; else Tag=varargin{4}; end
0529 if nargin<3 || isempty(varargin{3}), str = 'SPM'; else str=varargin{3}; end
0530 if nargin<2, if any(get(0,'Children')), F=gcf; else F=''; end
0531 else F=varargin{2}; end
0532 F = nic_spm_figure('FindWin',F);
0533 if isempty(F), return, end
0534
0535
0536
0537 Colour = get(F,'Color');
0538
0539 if ~all(Colour==Colour(1)), return, end
0540
0541 Colour = Colour+(2*(Colour(1)<0.9)-1)*0.02;
0542
0543 cF = get(0,'CurrentFigure');
0544 set(0,'CurrentFigure',F)
0545 Units=get(F,'Units');
0546 set(F,'Units','normalized');
0547 h = axes('Position',[0.45,0.5,0.1,0.1],...
0548 'Units','normalized',...
0549 'Visible','off',...
0550 'Tag',Tag);
0551 set(F,'Units',Units)
0552 text(0.5,0.5,str,...
0553 'FontSize',nic_spm('FontSize',80),...
0554 'FontWeight','Bold',...
0555 'FontName',nic_spm_platform('Font','times'),...
0556 'Rotation',Angle,...
0557 'HorizontalAlignment','Center',...
0558 'VerticalAlignment','middle',...
0559 'EraseMode','normal',...
0560 'Color',Colour,...
0561 'ButtonDownFcn',[...
0562 'if strcmp(get(gcbf,''SelectionType''),''open''),',...
0563 'delete(get(gcbo,''Parent'')),',...
0564 'end'])
0565 set(h,'HandleVisibility',HVis)
0566 set(0,'CurrentFigure',cF)
0567
0568
0569 case 'createwin'
0570
0571
0572
0573
0574
0575 if nargin<4 || isempty(varargin{4}), Visible='on'; else Visible=varargin{4}; end
0576 if nargin<3, Name=''; else Name = varargin{3}; end
0577 if nargin<2, Tag=''; else Tag = varargin{2}; end
0578
0579 WS = nic_spm('WinScale');
0580 FS = nic_spm('FontSizes');
0581 PF = nic_spm_platform('fonts');
0582 Rect = nic_spm('WinSize','Graphics','raw').*WS;
0583
0584 F = figure(...
0585 'Tag',Tag,...
0586 'Position',Rect,...
0587 'Resize','off',...
0588 'Color','w',...
0589 'ColorMap',gray(64),...
0590 'DefaultTextColor','k',...
0591 'DefaultTextInterpreter','none',...
0592 'DefaultTextFontName',PF.helvetica,...
0593 'DefaultTextFontSize',FS(10),...
0594 'DefaultAxesColor','w',...
0595 'DefaultAxesXColor','k',...
0596 'DefaultAxesYColor','k',...
0597 'DefaultAxesZColor','k',...
0598 'DefaultAxesFontName',PF.helvetica,...
0599 'DefaultPatchFaceColor','k',...
0600 'DefaultPatchEdgeColor','k',...
0601 'DefaultSurfaceEdgeColor','k',...
0602 'DefaultLineColor','k',...
0603 'DefaultUicontrolFontName',PF.helvetica,...
0604 'DefaultUicontrolFontSize',FS(10),...
0605 'DefaultUicontrolInterruptible','on',...
0606 'PaperType','A4',...
0607 'PaperUnits','normalized',...
0608 'PaperPosition',[.0726 .0644 .854 .870],...
0609 'InvertHardcopy','off',...
0610 'Renderer','painters',...
0611 'Visible','off',...
0612 'Toolbar','none');
0613 if ~isempty(Name)
0614 set(F,'Name',sprintf('%s%s: %s',nic_spm('ver'),...
0615 nic_spm('GetUser',' (%s)'),Name),'NumberTitle','off')
0616 end
0617 set(F,'Visible',Visible)
0618 varargout = {F};
0619
0620
0621 case 'getwinscale'
0622
0623
0624 warning('nic_spm_figure(''GetWinScale''... is Grandfathered: use spm(''WinScale''')
0625 varargout = {nic_spm('WinScale')};
0626
0627
0628 case 'fontsizes'
0629
0630
0631 warning('nic_spm_figure(''FontSizes''... is Grandfathered: use nic_spm(''FontSizes''')
0632 if nargin<2, FS=[08,09,11,13,14,6:36]; else FS=varargin{2}; end
0633 varargout = {round(FS*min(nic_spm('WinScale')))};
0634
0635
0636
0637 case 'createbar'
0638
0639
0640 if nargin<2, if any(get(0,'Children')), F=gcf; else F=''; end
0641 else F=varargin{2}; end
0642 F = nic_spm_figure('FindWin',F);
0643 if isempty(F), return, end
0644
0645 cSHH = get(0,'ShowHiddenHandles');
0646 set(0,'ShowHiddenHandles','on')
0647
0648 t0 = findobj(get(F,'Children'),'Flat','Label','&Help');
0649 if isempty(t0), t0 = uimenu( F,'Label','&Help'); end;
0650
0651 set(findobj(t0,'Position',1),'Separator','on');
0652 uimenu(t0,'Position',1,...
0653 'Label','SPM web',...
0654 'CallBack','web(''http://www.fil.ion.ucl.ac.uk/spm/'');');
0655 uimenu(t0,'Position',1,...
0656 'Label','SPM help','ForegroundColor',[0 1 0],...
0657 'CallBack','spm_help');
0658
0659 t0=uimenu( F,'Label','Colours','HandleVisibility','off');
0660 t1=uimenu(t0,'Label','ColorMap');
0661 uimenu(t1,'Label','Gray', 'CallBack','nic_spm_figure(''ColorMap'',''gray'')');
0662 uimenu(t1,'Label','Hot', 'CallBack','nic_spm_figure(''ColorMap'',''hot'')');
0663 uimenu(t1,'Label','Pink', 'CallBack','nic_spm_figure(''ColorMap'',''pink'')');
0664 uimenu(t1,'Label','Jet','CallBack','nic_spm_figure(''ColorMap'',''jet'')');
0665 uimenu(t1,'Label','Gray-Hot', 'CallBack','nic_spm_figure(''ColorMap'',''gray-hot'')');
0666 uimenu(t1,'Label','Gray-Cool','CallBack','nic_spm_figure(''ColorMap'',''gray-cool'')');
0667 uimenu(t1,'Label','Gray-Pink','CallBack','nic_spm_figure(''ColorMap'',''gray-pink'')');
0668 uimenu(t1,'Label','Gray-Jet', 'CallBack','nic_spm_figure(''ColorMap'',''gray-jet'')');
0669 t1=uimenu(t0,'Label','Effects');
0670 uimenu(t1,'Label','Invert','CallBack','nic_spm_figure(''ColorMap'',''invert'')');
0671 uimenu(t1,'Label','Brighten','CallBack','nic_spm_figure(''ColorMap'',''brighten'')');
0672 uimenu(t1,'Label','Darken','CallBack','nic_spm_figure(''ColorMap'',''darken'')');
0673 uimenu( F,'Label','Clear','HandleVisibility','off','CallBack','nic_spm_figure(''Clear'',gcbf)');
0674
0675 uimenu( F,'Label','SPM-Print','HandleVisibility','off','CallBack','nic_spm_figure(''Print'',gcbf)');
0676
0677
0678
0679
0680
0681 cb = ['global SatWindow,',...
0682 'try,',...
0683 'tmp = get(hReg);,',...
0684 'ResFlag = 1;',...
0685 'catch,',...
0686 'ResFlag = 0;',...
0687 'end,',...
0688 'if SatWindow,',...
0689 'figure(SatWindow),',...
0690 'else,',...
0691 'if ResFlag,',...
0692 'spm_setup_satfig,',...
0693 'end,',...
0694 'end'];
0695 uimenu( F,'Label','Results-Fig','HandleVisibility','off','Callback',cb);
0696
0697
0698
0699 set(0,'ShowHiddenHandles',cSHH)
0700 spm_jobman('pulldown');
0701
0702
0703
0704 case 'figcontextmenu'
0705
0706
0707 if nargin<2
0708 F = get(0,'CurrentFigure');
0709 if isempty(F), error('no figure'), end
0710 else
0711 F = spm_figure('FindWin',varargin{2});
0712 if isempty(F), error('no such figure'), end
0713 end
0714 h = uicontextmenu('Parent',F,'HandleVisibility','CallBack');
0715 cSHH = get(0,'ShowHiddenHandles');
0716 set(0,'ShowHiddenHandles','on')
0717 copy_menu(F,h);
0718 set(0,'ShowHiddenHandles',cSHH)
0719 set(F,'UIContextMenu',h)
0720 varargout = {h};
0721
0722
0723 case 'colormap'
0724
0725
0726 if nargin<3, h=[]; else h=varargin{3}; end
0727 if nargin<2, ColAction='gray'; else ColAction=varargin{2}; end
0728
0729 switch lower(ColAction), case 'gray'
0730 colormap(gray(64))
0731 case 'hot'
0732 colormap(hot(64))
0733 case 'pink'
0734 colormap(pink(64))
0735 case 'jet'
0736 colormap(jet(64))
0737 case 'gray-hot'
0738 tmp = hot(64 + 16); tmp = tmp((1:64) + 16,:);
0739 colormap([gray(64); tmp]);
0740 case 'gray-cool'
0741 cool = [zeros(10,1) zeros(10,1) linspace(0.5,1,10)';
0742 zeros(31,1) linspace(0,1,31)' ones(31,1);
0743 linspace(0,1,23)' ones(23,1) ones(23,1) ];
0744 colormap([gray(64); cool]);
0745 case 'gray-pink'
0746 tmp = pink(64 + 16); tmp = tmp((1:64) + 16,:);
0747 colormap([gray(64); tmp]);
0748 case 'gray-jet'
0749 colormap([gray(64); jet(64)]);
0750 case 'invert'
0751 colormap(flipud(colormap));
0752 case 'brighten'
0753 colormap(brighten(colormap, 0.2));
0754 case 'darken'
0755 colormap(brighten(colormap, -0.2));
0756 otherwise
0757 error('Illegal ColAction specification');
0758 end
0759
0760 case 'graphicshandle'
0761
0762
0763 if nargin<2, F=gcbf; else F=nic_spm_figure('FindWin',varargin{2}); end
0764 if isempty(F), return, end
0765
0766 tmp = get(F,'Name');
0767 set(F,'Name',...
0768 'Handle: Select item to identify, MiddleMouse=parent, RightMouse=canic_el...');
0769 set(F,'Pointer','CrossHair')
0770 waitforbuttonpress;
0771 h = gco(F);
0772 hType = get(h,'Type');
0773 SelnType = get(gcf,'SelectionType');
0774 set(F,'Pointer','Arrow','Name',tmp)
0775
0776 if ~strcmp(SelnType,'alt') && ~isempty(h) && gcf==F
0777 str = sprintf('Selected (%s) object',get(h,'Type'));
0778 if strcmp(SelnType,'normal')
0779 str = sprintf('%s: handle',str);
0780 else
0781 h = get(h,'Parent');
0782 str = sprintf('%s: handle of parent (%s) object',str,get(h,'Type'));
0783 end
0784 if nargout==0
0785 assignin('base','ans',h)
0786 fprintf('\n%s: \n',str)
0787 ans = h
0788 else
0789 varargout={h};
0790 end
0791 else
0792 varargout={[]};
0793 end
0794
0795
0796
0797 otherwise
0798
0799 warning(['Illegal Action string: ',Action])
0800 end
0801 return;
0802
0803
0804
0805
0806 function copy_menu(F,G)
0807
0808 handles = findobj(get(F,'Children'),'Flat','Type','uimenu','Visible','on');
0809 if isempty(handles), return; end;
0810 for F1=handles',
0811 if ~strcmp(get(F1,'Label'),'&Window'),
0812 G1 = uimenu(G,'Label',get(F1,'Label'),...
0813 'CallBack',get(F1,'CallBack'),...
0814 'Position',get(F1,'Position'),...
0815 'Separator',get(F1,'Separator'));
0816 copy_menu(F1,G1);
0817 end;
0818 end;
0819 return;
0820