function hh = uitabdemo(option)
% UITABDEMO This script demostrates the use of UITABPANEL.
% Author: Shiying Zhao (zhao@arch.umsl.edu)
% Version: 1.0
% First created: May 02, 2006
% Last modified: May 20, 2006
if nargin<1, option = 1; end
switch option
case 1
style1 = 'popup';
style2 = 'lefttop';
style3 = 'rightbottom';
case 2
style1 = 'popup';
style2 = 'righttop';
style3 = 'leftbottom';
otherwise
style1 = 'popup';
style2 = 'centertop';
style3 = 'centerbottom';
end
width = 0;
hfig = figure(...
'Name','uitabpanel demo',...
'NumberTitle','off', ...
'Menubar','none',...
'Toolbar','none');
%--------------------------------------------------------------------------
% Creating the tabs
%--------------------------------------------------------------------------
htab(1) = uitabpanel(...
'Parent',hfig,...
'Style',style1,...
'Units','normalized',...
'Position',[0,0,0.3,1],...
'FrameBackgroundColor',[0.4314,0.5882,0.8431],...
'FrameBorderType','etchedin',...
'Title',{'This is popup tab','Click me!','See also','About'},...
'PanelHeights',[8,30,10,10],...
'HorizontalAlignment','left',...
'FontWeight','bold',...
'TitleBackgroundColor',[0.9255 0.9490 0.9765],...
'TitleForegroundColor',[0.1294,0.3647,0.8510],...
'PanelBackgroundColor',[0.7725,0.8431,0.9608],...
'PanelBorderType','line',...
'CreateFcn',@CreateTab1);
htab(2) = uitabpanel(...
'Parent',hfig,...
'TabPosition',style2,...
'Position',[0.3,0.5,0.7,0.5],...
'Margins',{[0,-1,1,0],'pixels'},...
'PanelBorderType','line',...
'Title',{'Introduction','Syntax','Features','Todo'},...
'CreateFcn',@CreateTab2);
htab(3) = uitabpanel(...
'Parent',hfig,...
'TitlePosition',style3,...
'Position',[0.3,0,0.7,0.5],...
'Margins',{[0,1,1,0],'pixels'},...
'Title',{'The Earth','The Globe','More Styles'},...
'CreateFcn',@CreateTab3,...
'SelectedItem',3);
if nargout, hh = htab; end
%--------------------------------------------------------------------------
function CreateTab1(htab,evdt,hpanel,hstatus)
uicontrol(...
'Parent',hpanel(1),...
'Units','normalized',...
'Position',[.1,.1,.9,.8],...
'BackgroundColor',get(hpanel(3),'BackgroundColor'),...
'HorizontalAlignment','left',...
'Style','text',...
'String',[...
'Popup panel is another '
'type of UITABPANEL '
'with the ''Style'' '
'property set to ''Popup''. '
'Click on its title bar '
'toggle open/close of the '
'popup panel. ']);
uicontrol(...
'Parent',hpanel(2),...
'Units','normalized',...
'Position',[.1,.02,.8,.95],...
'BackgroundColor',get(hpanel(3),'BackgroundColor'),...
'HorizontalAlignment','left',...
'Style','text',...
'String',[...
'Here is a long panel. '
'Using the vertical '
'slider to scroll up '
'and down for the rest '
'of content in this '
'popup panel. '
' '
'All popup panels have '
'the same vertical '
'layout. '
' '
'The length of each '
'panel in the group can'
'be specified using the'
'the property '
'''PanelHeights'' at '
'creation time, which '
'should be a numeric '
'array with the same '
'length of ''Title'' in '
'the unit of '
'''Characters''. '
' '
'Interactive change of '
'the length of a panel '
'in the group can only '
'be done when it is '
'deactivated. ']);
uicontrol(...
'Parent',hpanel(3),...
'Units','normalized',...
'Position',[.1,.1,.8,.82],...
'BackgroundColor',get(hpanel(3),'BackgroundColor'),...
'HorizontalAlignment','left',...
'Style','text',...
'String',[...
'tabpanel, by Dirk Tenne '
'Tab panel example, by '
' Bill York '
'TabPanel Constructor '
' v1.3, by Elmar Tarajan'
'Tab Panel (Yet another '
' one), by Laine Berhane'
' Kahsay '
'in File Exchange Site. ']);
uicontrol(...
'Parent',hpanel(4),...
'Units','normalized',...
'Position',[.1,.1,.8,.76],...
'BackgroundColor',get(hpanel(3),'BackgroundColor'),...
'Style','text',...
'String',[...
' UITABPANEL '
' version 1.0 '
' '
' Created by '
' Shiying Zhao '
'(zhao@arch.umsl.edu)'
' '
' May 20, 2006 ']);
uicontrol(...
'Parent',hstatus,...
'Units','normalized',...
'Position',[0,0,1,.3],...
'BackgroundColor',get(hstatus,'BackgroundColor'),...
'ForegroundColor',[0.6,1,1],...
'HitTest','off',...
'Style','text',...
'String',[...
' Copyright(c) 2006 '
' Shiying Zhao '
'All rights reserved.']);
set(htab,'ResizeFcn',@TabResize1);
end
%--------------------------------------------------------------------------
function CreateTab2(htab,evdt,hpanel,hstatus)
uicontrol(...
'Parent',hpanel(1),...
'Units','normalized',...
'Position',[.1,.1,.8,.8],...
'BackgroundColor',get(hpanel(1),'BackgroundColor'),...
'ForegroundColor','w',...
'HorizontalAlignment','left',...
'FontSize',12,...
'Style','text',...
'String',[ ...
'UITABPANEL creates a group of tabbed '
'panels with a consistent look and feel to'
'the builtin MATLAB UI objects. '
' '
'A special type of UITABPANEL is the '
'popup tabpanel as shown on the left-hand '
'side of this figure. ']);
uicontrol(...
'Parent',hpanel(2),...
'Units','normalized',...
'Position',[.1,.1,.8,.8],...
'BackgroundColor','w',...
'HorizontalAlignment','left',...
'Style','text',...
'String',[...
' '
' The syntax of using UITABPANEL is the same as '
' UIPANEL except a few property changes. For a complete '
' description, see the online help of UITABPANEL and the '
' MATLAB script of this demo. Examples: '
' '
' htab = uitabpanel( ''Title'',{''A'',''B'',''C'',''D''} ) '
' htab = uitabpanel( ''Title'',{''A'',''B''},''Style'',''righttop'' ) '
' htab = uitabpanel( ''Title'',{''A'',''B'',''C''},''Position'',my_pos,'
' ''CreateFcn'',@my_fun1,''ResizeFcn'',@my_fun2) ']);
uicontrol(...
'Parent',hpanel(3),...
'Units','normalized',...
'Position',[.1,.1,.8,.8],...
'BackgroundColor','w',...
'HorizontalAlignment','left',...
'Style','text',...
'String',[...
' '
' The following is a brief summary of some advanced features'
' of the current implementation of UITABPANEL: '
' 1. UITABPANEL can be resizable if ''ResizeFcn'' is set. '
' 2. A callback routine ''SelectionChangeFcn'' can be defined '
' through ''set/getappdata'', which will be executed when '
' the selected tab changes. '
' 3. An empty UICONTAINER in each UITABPANEL is '
' designed mainly for a functional purpose, but is can be'
' used by users for other purposes in a number of ways. ']);
uicontrol(...
'Parent',hpanel(4),...
'Units','normalized',...
'Position',[.1,.1,.8,.8],...
'BackgroundColor','w',...
'HorizontalAlignment','left',...
'Style','text',...
'String',[...
' '
' Although the current implementation of UITABPANEL works '
' well for small number of tabs, many improvements and new '
' features are still desirable. '
' '
' An immediate task is to add more styles, such as vertical'
' tabs and multi-row tabs. However, the most desirable '
' improvement to me is to rewrite UITABPANEL as a '
' MATLAB class, so that it will behave in the same way as '
' the builtin MATLAB user interface (UI) objects. ']);
uicontrol(...
'Parent',hstatus,...
'Units','normalized',...
'Position',[0,0.1,1,.68],...
'BackgroundColor',get(hstatus,'BackgroundColor'),...
'ForegroundColor','k',...
'HitTest','off',...
'Style','text',...
'String',['This is ',style2,' tab']);
setappdata(htab,'SelectionChangeFcn',@TabStatus2);
set(htab,'ResizeFcn',{@TabResize2,[0.5,0.5]});
end
%--------------------------------------------------------------------------
function CreateTab3(htab,evdt,hpanel,hstatus)
uicontrol(...
'Parent',hpanel(3),...
'Units','normalized',...
'Position',[.3,.1,.6,.6],...
'BackgroundColor',get(hpanel(1),'BackgroundColor'),...
'ForegroundColor','w',...
'HorizontalAlignment','left',...
'FontSize',12,...
'Style','text',...
'String',[...
'Run this demo with the optional '
'argument 1, 2, and 3 to view all'
'implemented styles. ']);
load('topo.mat','topo','topomap1');
axes('Parent',hpanel(1));
PlotTheEarth(topo,topomap1);
axes('Parent',hpanel(2),'Position',[0,.1,.8,.8]);
axis square off
uicontrol(...
'Parent',hpanel(2),...
'Units','normalized',...
'Position',[0.7,.4,.2,.1],...
'Style','pushbutton',...
'Callback',{@PlotTheGlobel,topo},...
'String','Create it!');
uicontrol(...
'Parent',hpanel(2),...
'Units','normalized',...
'Position',[0.7,.2,.2,.1],...
'Style','pushbutton',...
'Callback','cla',...
'String','Remove it!');
uicontrol(...
'Parent',hstatus,...
'Units','normalized',...
'Position',[0,0.1,1,.68],...
'BackgroundColor',get(hstatus,'BackgroundColor'),...
'ForegroundColor','k',...
'HitTest','off',...
'Style','text',...
'String',['This is ',style3,' tab']);
set(htab,'ResizeFcn',{@TabResize2,[0,0.5]});
end
%--------------------------------------------------------------------------
function TabResize1(hobj,evdt)
figpos = get(hfig,'Position');
tabpos = get(hobj,'Position');
tabpos(4) = figpos(4);
set(hobj,'Position',tabpos);
width = tabpos(3)/figpos(3);
end
%--------------------------------------------------------------------------
function TabResize2(hobj,evdt,ysiz)
figpos = get(hfig,'Position');
tabpos = get(hobj,'Position');
tabpos([1,3]) = [width,1-width]*figpos(3)+[1,0];
tabpos([2,4]) = ysiz*figpos(4)+[1,0];
set(hobj,'Position',tabpos);
end
%--------------------------------------------------------------------------
function TabStatus2(hobj,evdt)
set(get(evdt.Status,'Children'),'String',['page ',num2str(evdt.NewValue)]);
end
%--------------------------------------------------------------------------
function PlotTheEarth(topo,topomap1)
contour(0:359,-89:90,topo,[0 0],'b')
axis equal
box on
set(gca,'XLim',[0 360],'YLim',[-90 90], ...
'XTick',[0 60 120 180 240 300 360], ...
'YTick',[-90 -60 -30 0 30 60 90]);
hold on
image([0 360],[-90 90],topo,'CDataMapping', 'scaled');
colormap(topomap1);
end
%--------------------------------------------------------------------------
function PlotTheGlobel(hobj,evdt,topo)
[x,y,z] = sphere(50);
props.AmbientStrength = 0.1;
props.DiffuseStrength = 1;
props.SpecularColorReflectance = .5;
props.SpecularExponent = 20;
props.SpecularStrength = 1;
props.FaceColor= 'texture';
props.EdgeColor = 'none';
props.FaceLighting = 'phong';
props.Cdata = topo;
surface(x,y,z,props);
light('position',[-1 0 1]);
light('position',[-1.5 0.5 -0.5], 'color', [.6 .2 .2]);
end
%--------------------------------------------------------------------------
end