⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tabfig.m

📁 这个东西是我在网上下的
💻 M
📖 第 1 页 / 共 2 页
字号:
function varargout = tabfig(varargin)
%tabfig建立基于uipanel的tab图形(默认'visible','off')
%   [hfig, sheetPos] = tabfig(...
%       'create',strings,tabDims,callback,sheetDims,offsets,default_page)
%
%   'create' - 建立标识
%
%   strings -  tab字符串
%
%   tabDims - 
%     tabDims{1} -矢量 每个tab的长度(pixels)                  
%
%     tabDims{2} -标量 字符高度 (pixels).
%           
%   callback - 每次按tab时调用的函数名,传给它的参数为:
%              1) 'tabcallbk'     - 标识 'tabcallbk'
%              2) pressedTab      - 选择tab的字符串
%              3) pressedTabNum   - 选择tab号码
%              4) previousTab     - 上一个选择的tab的字符串
%              5) previousTabNum  - 上一个选择的tab的号码
%              6) hfig            - 图形句柄
%
%   sheetDims - [width, height] 底板的宽高(pixels)  
%
%   offsets -底板四个元素的偏置矢量(pixels):  
%            [左边
%             上边
%             右边
%             底边]
%
%   default_page - 默认第几个tab.
%
%  可选参数:
%   font -两元素 cell array (arg 8)
%     {'fontname', fontsize}
%          
%   hfig - 图形的句柄(arg 9)
%     若指定之,arg 8也要指定,若用默认字体用{}
%     hfig用来计算图形大小,可以先设为invisible
%
%   返回:
%     hfig     -所建图形句柄.
%     sheetPos -底板位置.
%
%
%   附加功能
%
%   tabDims = tabfig('tabdims', strings, font)
%
%     例: tabDims = tabfig('tabdims', {'cat', 'bird'});
%         font为可选参数


Action = lower(varargin{1});

switch(Action),

  case 'create',
    [fig, sheetPos] = i_CreateTabbedDialog(varargin{2:end});
    varargout = {fig, sheetPos};

  case 'tabdims',
    varargout =  {i_DetermineTabDims(varargin{2:end})};

  case 'tabpress',
    hfig = varargin{2};
    DialogUserData = i_GetDialogData(hfig);
    previousTabNum = DialogUserData.activeTabNum;
    [DialogUserData, bModified] = ...
      i_ProcessTabPress(hfig, DialogUserData, varargin{3:end});

    if bModified == 1,
      activeTabNum = varargin{end};

      i_SetDialogData(hfig, DialogUserData);
                   
      feval(DialogUserData.callback, ...
        'tabcallbk', ...
        DialogUserData.strings{activeTabNum}, ...
        activeTabNum, ...
        DialogUserData.strings{previousTabNum}, ...
        previousTabNum, ...
        hfig ...
      );
    end
   case  'resize',
      figresize
  otherwise,
     error('Invalid action.');
end


%******************************************************************************
% Function -   从所按tab取得user data                                        ***
%******************************************************************************
function data = i_GetDialogData(dialog),

oldHiddenHandleStatus = get(0, 'ShowHiddenHandles');
set(0, 'ShowHiddenHandles', 'on');

dataContainer = findobj(dialog,...
  'Type',       'uicontrol', ...
  'Style',      'text', ...
  'Tag',        'TMWDlgDat@#' ...     %图形数据在'Style','text','Tag', 'TMWDlgDat@#'的控件中
);

data = get(dataContainer, 'UserData');

set(0, 'ShowHiddenHandles', oldHiddenHandleStatus);


%******************************************************************************
% Function - 为所按tab设置user data                                          ***
%******************************************************************************
function i_SetDialogData(dialog, data),

oldHiddenHandleStatus = get(0, 'ShowHiddenHandles');
set(0, 'ShowHiddenHandles', 'on');

dataContainer = findobj(dialog,...
  'Type',       'uicontrol', ...
  'Style',      'text', ...
  'Tag',        'TMWDlgDat@#' ...
);

if isempty(dataContainer),
  dataContainer = uicontrol(...
    'Parent',           dialog, ...
    'Style',            'text', ...
    'Visible',          'off', ...
    'Tag',              'TMWDlgDat@#' ...
  );
end

set(dataContainer,'UserData', data);

set(0,'ShowHiddenHandles', oldHiddenHandleStatus);


%==============================================================================
% Function - 建立tab图形                                                    
%==============================================================================
function [hfig, sheetPosActual] = i_CreateTabbedDialog( ...
  strings, tabDims, callback, sheetDims, offsets, default_page, font, hfig...
),

%==============================================================================
% 变量检查
%==============================================================================
if nargin >= 7 & ~isempty(font),
  fontsize = font{2};
  fontname = font{1};
else
  fontsize = get(0, 'FactoryUicontrolFontSize');
  fontname = get(0, 'FactoryUicontrolFontName');
end

if nargin ~= 8,
  hfig = -1;
end
  

%==============================================================================
% 建立图形
%==============================================================================
origDefaultUicontrolEnable = get(0, 'DefaultUicontrolEnable');

if hfig == -1,
  hfig = figure( ...
    'Visible',                            'off', ...
    'Color',                              get(0,'FactoryUicontrolBack'), ...
    'Units',                              'pixels', ...
    'Resize',                             'on', ...
    'MenuBar',                            menubar, ...
    'IntegerHandle',                      'off', ...
    'NumberTitle',                        'off', ...
    'DefaultUicontrolUnits',              'pixels', ...
    'DefaultUicontrolEnable',             'inactive' ... 
  );
else,
  set(hfig, ...
    'Color',                              get(0,'FactoryUicontrolBack'), ...
    'Units',                              'pixels', ...
    'Resize',                             'on', ...
    'MenuBar',                            menubar, ...
    'NumberTitle',                        'off', ...
    'DefaultUicontrolUnits',              'pixels', ...
    'DefaultUicontrolEnable',             'inactive' ... 
  );
end

set(hfig,'resizefcn','tabfig(''resize'')');

%==============================================================================
% 计算几何常数
%==============================================================================
stringHeight  = tabDims{2};
tabHeight     = tabDims{2} + 5;
tabWidths     = [0; tabDims{1}(:)];
numTabs       = length(tabWidths) - 1;


switch(computer),

  case 'PCWIN',
    
    leftBevelOffset         = 0;
    rightBevelOffset        = 2;   
    topBevelOffset          = 1;
    selectorHeight          = 2;
    selectorLeftFudgeFactor = 0;
    deltaTabs               = 3;
    selectionHoffset        = 1;
    sheetEnableState        = 'off';

  case 'MAC2',
   
    leftBevelOffset         = 2;
    rightBevelOffset        = 2;
    topBevelOffset          = 2;
    selectorHeight          = 3;
    selectorLeftFudgeFactor = -1;
    deltaTabs               = 1;
    selectionHoffset        = deltaTabs;
    sheetEnableState        = 'inactive';
 
  otherwise,

    leftBevelOffset         = 3;
    rightBevelOffset        = 3;
    topBevelOffset          = 2;
    selectorHeight          = 2;
    selectorLeftFudgeFactor = 0;
    deltaTabs               = 0;
    selectionHoffset        = deltaTabs;
    sheetEnableState        = 'off';

end


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

selectionVoffset = 2;

%==============================================================================
% 设定图形宽高
%==============================================================================
figPos = get(hfig, 'Position');

figHeight = ...
  offsets(4)        + ...
  sheetDims(2)      + ...        
  tabHeight         + ...  
  selectionVoffset  + ...        
  offsets(2);

figWidth = offsets(1) + sheetDims(1) + offsets(3);

figPos(3:4) = [figWidth, figHeight];
set(hfig, 'Position', figPos);
                                 
%==============================================================================
% 计算底板位置
%==============================================================================
sheetPos = [
  offsets(1) + 1
  offsets(4) + 1
  sheetDims(1)
  sheetDims(2)
];

%==============================================================================
% 建立底板
%==============================================================================
sheetPosActual = sheetPos;
sheetPosActual(4) = sheetPosActual(4) + topBevelOffset;
t3(1)=sheetPosActual(1)/figWidth;
t3(2)=sheetPosActual(2)/figHeight;
t3(3)=sheetPosActual(3)/figWidth;
t3(4)=sheetPosActual(4)/figHeight-.003;
sheet = uipanel( ...
  'Parent',             hfig, ...
  'unit',               'norm',...
  'borderwidth',        1,...
  'position',           t3 ...
   );
set(sheet,'visible','on')

%==============================================================================
% 建立tab标签并存贮挡板位置
%==============================================================================
posTab(4) = tabHeight;
posTab(2) = sheetPos(2) + sheetPos(4) - 1;

tabs(numTabs) = 0;
selectorPos   = zeros(numTabs, 4);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -