📄 fm_linedlg.m
字号:
function fm_linedlg(varargin)
%SCRIBELINEDLG Line property dialog helper function for Plot Editor
%
% Copyright 1984-2001 The MathWorks, Inc.
% $Revision: 1.19 $ $Date: 2001/04/15 12:00:41 $
%
%Modified by: Federico Milano
%Date: 11-Nov-2002
%Version: 1.0.0
%
%E-mail: fmilano@thunderbox.uwaterloo.ca
%Web-site: http://thunderbox.uwaterloo.ca/~fmilano
%
% Copyright (C) 2002-2006 Federico Milano
persistent localData;
global Theme
switch nargin
case 1
arg1 = varargin{1};
if isempty(arg1) | ishandle(arg1(1)) | isa(arg1(1), 'scribehandle')
localData = LInitFig(arg1,localData);
return
elseif ischar(arg1(1))
action = arg1;
parameter = [];
end
case 2
action = varargin{1};
parameter = varargin{2};
end
if strcmp(parameter,'me')
parameter = gcbo;
end
localData = feval(action,parameter,localData);
%%%%%%
function localData = LInitFig(objectV,localData)
global Theme
if isempty(objectV)
LNoLineError;
return
end
try
if ishandle(objectV)
fig = get(get(objectV(1),'Parent'),'Parent');
else
% might be any selected object
fig = get(objectV(1),'Figure');
end
catch
fm_disp(['Unable to edit line properties: invalid line handles']);
return
end
oldPointer = get(fig,'Pointer');
set(fig,'Pointer','watch');
try
if ishandle(objectV)
LineVector = [];
ArrowVector = [];
for aHG = objectV
if strcmp(get(aHG,'Type'),'line')
LineVector(end+1) = aHG;
end
end
else
% pick out the line objects from the list
LineVector = scribehandle([]);
ArrowVector = scribehandle([]);
for aObj = objectV
if isa(aObj,'editline'),
LineVector = [LineVector aObj];
% LineVector(end+1) = aObj;
elseif isa(aObj,'arrowline')
ArrowVector = [ArrowVector aObj];
% ArrowVector(end+1) = aObj;
end
end
end
if isempty(LineVector)
IndLine = [];
else
IndLine = [1:length(LineVector)];
end
HG = [LineVector ArrowVector];
catch
set(fig,'Pointer',oldPointer);
fm_disp(['Unable to open line properties dialog. ' ...
'Selection list is invalid:' ...
10 lasterr],2);
return
end
if isempty(HG)
LNoLineError;
set(fig,'Pointer',oldPointer);
return
end
%--temporary: redirect to Property Editor
%propedit(get(HG,'MyHGHandle'));
%set(fig,'Pointer',oldPointer);
%return
%---Set enable flag for marker boxes
if isequal(length(ArrowVector),length(HG)),
MarkerEnable='off';
else
MarkerEnable='on';
end
%---Get all object data
for ctHG = 1:length(HG)
GetData(ctHG) = struct('Selected',get(HG(ctHG),'Selected'), ...
'Parent',get(HG(ctHG),'Parent'), ...
'LineStyle',get(HG(ctHG),'LineStyle'), ...
'LineWidth',get(HG(ctHG),'LineWidth'), ...
'Marker',get(HG(ctHG),'Marker'), ...
'MarkerSize',get(HG(ctHG),'MarkerSize'), ...
'Color',get(HG(ctHG),'Color'));
% turn off selection so we can see changes in marker style
set(HG(ctHG),'Selected','off');
end % for ctHG
localData = struct('CommonWidth',1,'CommonStyle',1,'CommonSize',1, ...
'CommonMarker',1,'CommonColor',1);
localData.Selected = {GetData(:).Selected};
try
% adjustment factors for character units
% work in character units.
fx = 5;
fy = 13;
figWidth = 360/fx;
figHeight = 220/fy;
callerPosition = get(fig,'Position');
callerUnits = get(fig,'Units');
bgcolor = get(0,'DefaultUIControlBackgroundColor');
if bgcolor==[0 0 0]
fgcolor = [1 1 1];
else
fgcolor = get(0,'DefaultUIControlForegroundColor');
end
fProps = struct(...
'Units', callerUnits,...
'Color', Theme.color01,...
'NumberTitle', 'off',...
'IntegerHandle', 'off',...
'Pointer','watch', ...
'Resize', 'on',...
'Visible', 'off',...
'KeyPressFcn', 'fm_linedlg keypress',...
'HandleVisibility', 'callback',...
'WindowStyle', 'modal',...
'CloseRequestFcn', 'fm_linedlg button close',...
'Name', 'Edit Line Properties',...
'Position', callerPosition);
f = figure(fProps);
set(f,'Units','character');
figPos = get(f,'Position');
figPos(1:2) = figPos(1:2) + (figPos(3:4)-[figWidth, figHeight])/2;
figPos(3:4) = [figWidth, figHeight];
set(f,'Position',figPos);
ut = uicontrol('Style' , 'text',...
'Units' , 'character',...
'Parent' , f,...
'Visible' , 'off',...
'String' , 'Title');
charSize = get(ut,'Extent');
charH = charSize(4);
delete(ut);
% geometry
LMarginW = 25/fx;
RMarginW = 25/fx;
ColPadW = 10/fx;
RowLabelW = 65/fx;
ColW = (figPos(3)-2*RowLabelW-LMarginW-RMarginW-3*ColPadW)/2;
TopMarginH = 20/fy;
BotMarginH = 20/fy;
RowH = 30/fy;
RowPadH = 8/fy;
uiH = RowH-RowPadH;
buttonW = 72/fx;
buttonH = RowH-RowPadH;
buttonPad = 7/fx;
charOffset = uiH-charH;
% property defaults
editProps = struct(...
'Style', 'edit',...
'Parent' , f,...
'Units', 'character',...
'BackgroundColor', Theme.color04,...
'ForegroundColor', Theme.color05,...
'FontName',Theme.font01, ...
'HorizontalAlignment', 'left');
tProps = struct(...
'Style','text',...
'Parent' , f,...
'Units', 'character',...
'HorizontalAlignment', 'right',...
'BackgroundColor', Theme.color01,...
'ForegroundColor', fgcolor);
prompt = {...
'Line Width:'
'Line Style:'
''
'Color:'
'Marker Size:'
'Marker:'
};
properties = {...
'edit' 'fm_linedlg verifyposnumber me' 'LineWidth'
'popupmenu' '' 'LineStyle'
'' '' ''
'frame' '' ''
'edit' 'fm_linedlg verifyposnumber me' 'MarkerSize'
'popupmenu' '' 'Marker'
};
linestyles = {'-' '--' ':' '-.' 'none'};
markers = {'none' '+' 'o' '*' '.' 'x' 'square' 'diamond' ...
'v' '^' '>' '<' 'pentagram' 'hexagram'};
% Find common LineWidth and MarkerSize
CommonWidth = unique([GetData(:).LineWidth]);
if length(CommonWidth)>1,
widthStr = '';
localData.CommonWidth = 0;
else, widthStr = num2str(CommonWidth);
end
CommonSize = unique([GetData(IndLine).MarkerSize]);
if length(CommonSize)>1,
sizeStr = '';
localData.CommonSize = 0;
else, sizeStr = num2str(CommonSize);
end
% Find Common LineStyle
CommonStyle = unique({GetData(:).LineStyle});
if length(CommonStyle)==1,
styleVal = find(strcmp(CommonStyle{1},linestyles));
linestr = {'solid (-)' 'dash (--)' 'dot (:)' 'dash-dot (-.)' 'none'};
else
styleVal = 1;
localData.CommonStyle = 0;
linestyles = [{'Current'},linestyles];
linestr = {'Current' 'solid (-)' 'dash (--)' 'dot (:)' 'dash-dot (-.)' 'none'};
end
% Find Common Marker
markerVal = 1;
if ~isempty(IndLine),
CommonMarker = unique({GetData(IndLine).Marker});
if length(CommonMarker)==1,
markerVal = find(strcmp(CommonMarker{1},markers));
else
localData.CommonMarker = 0;
markers = [{'Current'},markers];
end
end
strings = {...
widthStr
linestr
''
''
sizeStr
markers
};
values = {...
0
styleVal
0
0
0
markerVal
};
enables = {...
'on'
'on'
'on'
'on'
MarkerEnable
MarkerEnable
};
data = {...
''
linestyles
''
''
''
markers
};
nRows = length(prompt);
% lay down prompts
Y = figPos(4)-TopMarginH-charOffset;
headingPosition = [LMarginW Y RowLabelW uiH];
for iRow=1:nRows
if iRow==5 % start new column
Y = figPos(4)-TopMarginH-charOffset;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -