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

📄 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 + -