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

📄 fm_axesdlg.m

📁 电力系统分析计算程序
💻 M
📖 第 1 页 / 共 3 页
字号:
    % 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 + -