📄 fm_axesdlg.m
字号:
% get text size ut = uicontrol(tProps,... 'Visible','off',... 'String','Title'); charSize = get(ut,'Extent'); charH = charSize(4); delete(ut); % charOffset = (RowH-charH)/2; editH = charH + 4/fy; uiH = RowH-RowPadH; YTitleRow = figPos(4)-TitleH-TopMarginH-uiH; % Title row charOffset = uiH-charH; uicontrol(tProps,... 'FontWeight','bold',... 'String', 'Title:',... 'Position', ... [ LMarginW YTitleRow + uiH + uiH - charH ... RowLabelW charH]); % Check for similar titles titleHandle = get(ax,{'Title'}); titleString = get([titleHandle{:}],{'String'}); if isempty(titleString{1}) | ... (length(titleString) > 1 & ~isequal(titleString{:})), % use a cell array, so spaces aren't padded out. CommonFlag = 0; titleString = {}; else CommonFlag = 1; titleString=titleString{1}; end titleU = uicontrol(editProps,... 'Tag', 'Title',... 'UserData',CommonFlag, ... 'Callback', '',... 'HorizontalAlignment','center',... 'Max', 2, ... % allow multi line titles 'String', titleString,... 'Position', ... [ XCol(2) YTitleRow ... nCols*ColW+(nCols-1)*ColPadW uiH + uiH]); iGroup=1; localData.LimCheck(iGroup)=titleU; localData.Prop{iGroup} = 'Title'; % put down the row headings rowLabelStrings = {... '','left', 'Label:','right', 'Limits:','right', 'Tick Step:','right', 'Scale:','right', '','right', 'Grid:','right', '','right', }; nRows = size(rowLabelStrings,1); Y = YTitleRow - HeaderH + RowPadH; headingPosition = [LMarginW Y RowLabelW charH]; for iRow = 1:nRows, if ~isempty(rowLabelStrings{iRow,1}) headingPosition(2) = Y; uicontrol(tProps,... 'FontWeight', 'bold',... 'String', rowLabelStrings{iRow,1},... 'HorizontalAlignment', rowLabelStrings{iRow,2},... 'Position', headingPosition); end Y = Y-RowH; end % fill each column cCol = ' XYZ'; for iCol = 2:nCols+1, X = XCol(iCol); col = cCol(iCol); % heading Y = YTitleRow - HeaderH + RowPadH; uicontrol(tProps,... 'Style', 'text',... 'FontWeight', 'bold',... 'HorizontalAlignment', 'center',... 'Position', [X Y-charOffset ColW charH],... 'String', col); % label Y = Y-RowH; % Check for similar labels labelHandle = get(ax,{[col 'Label']}); labelString = get([labelHandle{:}],{'String'}); if isempty(labelString{1}) | ... (length(labelString)>1 & ~isequal(labelString{:})), % use a cell array, so spaces aren't padded out. CommonFlag = 0; labelString = {}; else labelString=labelString{1}; CommonFlag = 1; end if size(labelString,1)>1 % multiline label multiline = 2; else multiline = 1; end labelU = uicontrol(editProps,... 'Enable', 'on',... 'Tag', [col 'Label'],... 'ToolTip', [col 'Label'],... 'UserData',CommonFlag, ... 'Position', [X Y ColW uiH ],... 'String', labelString,... 'Max', multiline,... 'Callback', ''); iGroup = iGroup+1; localData.LimCheck(iGroup) = labelU; localData.Prop{iGroup} = 'Title'; % range Y = Y-RowH; % Check if all axes are manual or auto AllMods = strcmp(get(ax, [col 'LimMode']),'manual'); MultMods = 0; if all(~AllMods) checkProps.Value = 0; elseif all(AllMods) checkProps.Value = 1; else MultMods = 1; checkProps.Value = length(find(AllMods))>=length(find(~AllMods)); end CheckVal = checkProps.Value; clim = uicontrol(checkProps,... 'String', 'Manual',... 'Tag', [col 'LimMode'],... 'ToolTip', [col 'LimMode'],... 'Position', [X Y ColW/2 uiH]); % Add a second checkbox when editing multiple axes if MultMods, % Overwrite the other checkbox, since it's callback will never % be invoked clim2 = uicontrol(checkProps,... 'ButtonDownFcn','fm_axesdlg toggle me', ... 'Enable','off', ... 'Tag', [col 'LimMode'],... 'ToolTip', [col 'LimMode'],... 'UserData',struct('Value',checkProps.Value,'Sibling',clim), ... 'Position', [X Y 3 uiH]); checkProps.Value = 0; set(clim,'UserData',clim2,'Tag','') end % Check for common limits lim = get(ax,{[col 'Lim']}); lim = cat(1,lim{:}); Umin = unique(lim(:,1)); Umax = unique(lim(:,2)); if length(Umin)>1, uminStr = ''; else, uminStr = num2str(Umin); end if length(Umax)>1, umaxStr = ''; else, umaxStr = num2str(Umax); end umin = uicontrol(editProps,... 'Tag', [col 'LimMin'],... 'ToolTip', [col ' Min'],... 'Enable', enable{checkProps.Value+1},... 'String', uminStr,... 'Position', [X+ColW/2 Y ColW/4 uiH]); iGroup=iGroup+1; localData.LimCheck(iGroup) = umin; localData.OldVal{iGroup} = min(lim); umax = uicontrol(editProps,... 'Tag', [col 'LimMax'],... 'Enable', enable{checkProps.Value+1},... 'String', umaxStr,... 'Position', [X+ColW*3/4 Y ColW/4 uiH],... 'ToolTip', [col ' Max']); iGroup = iGroup+1; localData.LimCheck(iGroup) = umax; localData.OldVal{iGroup} = max(lim); iGroup = iGroup+1; localData.LimGroup{iGroup} = [umin umax]; localData.LimCheck(iGroup) = clim; localData.Prop{iGroup} = [col 'LimMode']; if MultMods iGroup = iGroup+1; localData.LimGroup{iGroup} = [umin umax]; localData.LimCheck(iGroup) = clim2; localData.Prop{iGroup} = [col 'LimMode']; end % Check if all axes use a linear scale AllScales = strcmp(get(ax,[col 'Scale']),'linear'); MultScales = 0; if all(~AllScales) linearScale = 0; elseif all(AllScales) linearScale = 1; else MultScales = 1; linearScale=0; end % tickstep Y = Y-RowH; % Check if all TickModes are manual or auto AllMods = strcmp(get(ax, [col 'TickMode']),'manual'); MultMods = 0; if all(~AllMods) checkProps.Value = 0; elseif all(AllMods) checkProps.Value = 1; else MultMods = 1; checkProps.Value = length(find(AllMods))>=length(find(~AllMods)); end CheckVal = checkProps.Value; clim = uicontrol(checkProps,... 'String', 'Manual',... 'Tag', [col 'TickMode'],... 'Enable', enable{linearScale+1},... 'ToolTip', [col 'TickMode'],... 'Position', [X Y ColW/2 uiH]); % Add a second checkbox when editing multiple axes if MultMods, % Overwrite the other checkbox, since it's callback will never % be invoked clim2 = uicontrol(checkProps,... 'ButtonDownFcn','fm_axesdlg toggle me', ... 'Enable','off', ... 'Tag', [col 'TickMode'],... 'ToolTip', [col 'TickMode'],... 'UserData',struct('Value',checkProps.Value,'Sibling',clim), ... 'Position', [X Y 3 uiH]); checkProps.Value = 0; set(clim,'UserData',clim2,'Tag','') end if linearScale editProps.Enable = enable{checkProps.Value+1}; % Check for common tick marks tick = get(ax,{[col 'Tick']}); if (length(tick)>1 & ~isequal(tick{:})) | isempty(tick{1}) | length(tick{1})<2 tickstep = []; else tickstep = tick{1}(2)-tick{1}(1); end else editProps.Enable = enable{0+1}; tickstep = []; end utick = uicontrol(editProps,... 'Tag', [col 'TickStep'],... 'ToolTip', [col ' Tick step size'],... 'HorizontalAlignment','center',... 'String', num2str(min(tickstep)),... 'Position', [X+ColW/2 Y ColW/2 uiH]); iGroup = iGroup+1; localData.LimCheck(iGroup) = utick; localData.OldVal{iGroup} = tickstep; iGroup = iGroup+1; localData.LimGroup{iGroup} = utick; localData.LimCheck(iGroup) = clim; if MultMods, iGroup = iGroup+1; localData.LimGroup{iGroup} = utick; localData.LimCheck(iGroup) = clim2; end % Scale Y = Y-RowH; radioProps.Value = linearScale; rlin = uicontrol(radioProps,... 'Position', [X Y ColW/2 uiH],... 'String', 'Linear',... 'Tag', [col 'ScaleLinear'],... 'ToolTip',[col 'Scale=''linear''']); % Add a second set of radio buttons when editing multiple axes if MultScales, rlin2 = uicontrol(radioProps,... 'ButtonDownFcn','fm_axesdlg radio me', ... 'Enable','off', ... 'Position', [X Y 3 uiH],... 'String', '',... 'Tag', [col 'ScaleLinear'],... 'ToolTip',[col 'Scale=''linear'''], ... 'Value',0); set(rlin,'UserData',rlin2,'Tag',''); end Y = Y-RowH*2/3; rlog = uicontrol(radioProps,... 'Position', [X Y ColW/2 uiH],... 'String', 'Log',... 'Value', ~radioProps.Value,... 'Tag', [col 'ScaleLog'],... 'ToolTip',[col 'Scale=''log''']); % Add a second set of radio buttons when editing multiple axes if MultScales, rlog2 = uicontrol(radioProps,... 'Enable','off', ... 'Position', [X Y 3 uiH],... 'String', '',... 'Value', ~radioProps.Value,... 'Tag', [col 'ScaleLog'],... 'ToolTip',[col 'Scale=''log'''], ... 'Value',0); set(rlog,'UserData',rlog2,'Tag',''); set(rlin2,'UserData',... struct('Value',0,'Sibling',rlin,'OtherRadio',rlog2)); set(rlog2,'UserData',... struct('Value',0,'Sibling',rlog,'OtherRadio',rlin2)); end Y = Y-RowH*1/3; iGroup = iGroup+1; localData.LimGroup{iGroup} = [rlin]; localData.LimCheck(iGroup) = rlog; localData.Enable{iGroup} = []; localData.Disable{iGroup} = struct('Controls',[clim utick], ... 'CheckValue',CheckVal); iGroup = iGroup+1; localData.LimGroup{iGroup} = [rlog]; localData.LimCheck(iGroup) = rlin; localData.Enable{iGroup} = [clim utick]; % checkbox then % other control localData.Disable{iGroup} = []; if MultScales iGroup = iGroup+1; localData.LimGroup{iGroup} = [rlin2]; localData.LimCheck(iGroup) = rlog2; localData.Enable{iGroup} = []; localData.Disable{iGroup} = struct('Controls',[clim utick], ... 'CheckValue',CheckVal); iGroup = iGroup+1; localData.LimGroup{iGroup} = [rlog2]; localData.LimCheck(iGroup) = rlin2; localData.Enable{iGroup} = [clim utick]; % checkbox then % other control localData.Disable{iGroup} = []; end % Direction Y = Y+RowH; % Check if all axes use a normal dirction AllDirs = strcmp(get(ax, [col 'Dir']),'normal'); MultDirs = 0; if all(~AllDirs) radioProps.Value = 0; elseif all(AllDirs) radioProps.Value = 1; else MultDirs= 1; radioProps.Value = 0; end rnormal = uicontrol(radioProps,... 'Position', [X+ColW/2 Y ColW/2 uiH],... 'String', 'Normal',... 'Tag', [col 'DirNormal'],... 'ToolTip',[col 'Dir=''normal''']); if MultDirs rnormal2 = uicontrol(radioProps,... 'ButtonDownFcn','fm_axesdlg radio me', ... 'Enable','off', ... 'Position', [X+ColW/2 Y 3 uiH],... 'String', '',...
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -