📄 guido.m
字号:
% ---------- getinfo ----------%function [theResult, isOkay] = getinfo(theInfo, theField)% getinfo -- Get field value from an "Info" struct.% getinfo(theInfo, 'theField') returns the current% value of 'theField' in theInfo, a struct that% is compatible with the "uigetinfo" function.% Non-existent fields return the empty-matrix.% [theResult, isOkay] = ... returns isOkay = 0% if an error occurred; otherwise, non-zero.% getinfo(theInfo) returns a struct containing% the fields and current selections of theInfo. % Copyright (C) 1997 Dr. Charles R. Denham, ZYDECO.% All Rights Reserved.% Disclosure without explicit written consent from the% copyright owner does not constitute publication. % Version of 07-Feb-1998 09:45:56.% Updated 15-Dec-1999 23:49:02.if nargout > 0, theResult = []; endif nargin < 1, help(mfilename), return, end% Get current selections, recursively if needed.if nargin < 2 result = theInfo; theFields = fieldnames(result); isOkay = 1; for i = 1:length(theFields) [theValue, okay] = getinfo(theInfo, theFields{i}); isOkay = isOkay & okay; switch class(theValue) case 'struct' [res, okay] = getinfo(theValue); isOkay = isOkay & okay; result = setfield(result, theFields{i}, res); otherwise result = setfield(result, theFields{i}, theValue); end end if nargout > 0 theResult = result; else disp(result) end returnendtheValue = [];isOkay = 1;eval('theValue = getfield(theInfo, theField);', 'isOkay = 0;');result = theValue;if all(isOkay) switch class(theValue) case 'cell' if isequal(theValue{1}, 'checkbox') | ... isequal(theValue{1}, 'radiobutton') if length(theValue) < 2, theValue{2} = 0; end result = theValue{2}; else if ~iscell(theValue{1}), theValue = {theValue{1}}; end if length(theValue) < 2, theValue{2} = 1; end result = theValue{1}{theValue{2}}; end otherwise result = theValue; endendif nargout > 0 theResult = result;else disp(result)end% ---------- setinfo ----------%function [theResult, isOkay] = setinfo(theInfo, theField, theValue)% setinfo -- Set field value in an "Info" struct.% setinfo(theInfo, 'theField', theValue) updates% 'theField' to theValue in theInfo, a struct% that is compatible with the "uigetinfo" function.% If 'theField' does not exist, it will be created% to receive theValue.% [theResult, isOkay] = ... returns isOkay = 0% if an error occurred; otherwise, non-zero.% setinfo(theInfo, 'theField') invokes "getinfo".% setinfo(theInfo) adjusts theInfo to canonical% form. % Copyright (C) 1997 Dr. Charles R. Denham, ZYDECO.% All Rights Reserved.% Disclosure without explicit written consent from the% copyright owner does not constitute publication. % Version of 07-Feb-1998 09:45:56.% Updated 16-Dec-1999 01:20:36.if nargout > 0, theResult = []; endif nargin < 1, help(mfilename), return, end% Put all fields into canonical form.if nargin < 2 result = theInfo; theFields = fieldnames(result); isOkay = 1; for i = 1:length(theFields) theValue = getfield(result, theFields{i}); switch class(theValue) case 'struct' [res, okay] = setinfo(theValue); isOkay = isOkay & okay; result = setfield(result, theFields{i}, res); case 'cell' if length(theValue) == 1 & ... (isequal(theValue{1}, 'radiobutton') | ... isequal(theValue{1}, 'checkbox')) theValue{2} = 0; result = setfield(result, theFields{i}, theValue); elseif length(theValue) == 1 & iscell(theValue{1}) theValue{2} = 1; result = setfield(result, theFields{i}, theValue); elseif ~isequal(theValue{1}, 'radiobutton') & ... ~isequal(theValue{1}, 'checkbox') theValue{1} = {theValue{1}}; theValue{2} = 1; else theValue; end otherwise end end if nargout > 0, theResult = result; end returnend[theVal, isOkay] = getinfo(theInfo, theField);if nargin == 2 if nargout > 0 theResult = theVal; else disp(theVal) end returnendresult = theInfo;if ~all(isOkay) % Create a new field. isOkay = 1; eval('result = setfield(theInfo, theField, theValue);', 'isOkay = 0;');else % Update an existing field. isokay = 1; eval('theVal = getfield(theInfo, theField);', 'isOkay = 0;'); if ~isOkay, theVal = []; end switch class(theVal) case 'cell' if isequal(theVal{1}, 'checkbox') | isequal(theVal{1}, 'radiobutton') % Do nothing. elseif ~iscell(theVal{1}) theVal{1} = {theVal{1}}; theVal{2} = 1; end end switch class(theVal) case 'cell' if isequal(theVal{1}, 'checkbox') | isequal(theVal{1}, 'radiobutton') theVal{2} = any(any(theValue)); else switch class(theValue) case 'double' if theValue > 0 & theValue <= length(theVal{1}) theVal{2} = theValue; end otherwise flag = 0; for i = 1:length(theVal{1}) if isequal(theVal{1}{i}, theValue) theVal{2} = i; flag = 1 end end if ~any(flag) % Append. theVal{1} = [theVal(:); {theValue}]; theVal{2} = length(theVal{1}); end end% else% theVal{1} = [{theValue}; theVal(:)]; end otherwise theVal = theValue; end isOkay = 1; eval('result = setfield(theInfo, theField, theVal);', 'isOkay = 0;');endif nargout > 0 theResult = result;else disp(result)end% ---------- uilayout ----------%function theResult = uilayout(theControls, theLayout, thePosition)% uilayout -- Layout for ui controls.% uilayout(theControls, theLayout) positions theControls% according to theLayout, an array whose entries, taken% in sorted order, define the rectangular extents occupied% by each control. TheLayout defaults to a simple vertical% arrangement of theControls. A one-percent margin is% imposed between controls. To define a layout region% containing no control, use Inf.% uilayout(..., thePosition) confines the controls to the% given normalized position of the figure. This syntax% is useful for embedding controls within a frame.% uilayout (no argument) demonstrates itself. % Copyright (C) 1997 Dr. Charles R. Denham, ZYDECO.% All Rights Reserved.% Disclosure without explicit written consent from the% copyright owner does not constitute publication. % Version of 18-Apr-1997 08:07:54.% Updated 27-Dec-1999 06:03:57.if nargin < 1, theControls = 'demo'; help(mfilename), endif strcmp(theControls, 'demo') theLayout = [1 2; 3 4; 5 Inf; 5 6; 5 Inf; 7 8; 9 10; 11 12; 13 14]; [m, n] = size(theLayout); thePos = get(0, 'DefaultUIControlPosition'); theSize = [n+2 m+2] .* thePos(3:4); theFigure = figure('Name', 'UILayout', ... 'NumberTitle', 'off', ... 'Resize', 'off', ... 'Units', 'pixels'); thePos = get(theFigure, 'Position'); theTop = thePos(2) + thePos(4); thePos = thePos .* [1 1 0 0] + [0 0 theSize]; thePos(2) = theTop - (thePos(2) + thePos(4)); set(theFigure, 'Position', thePos); theFrame = uicontrol('Style', 'frame', ... 'Units', 'normalized', ... 'Position', [0 0 1 1], ... 'BackgroundColor', [0.5 1 1]); theStyles = {'checkbox'; 'text'; ... 'edit'; 'text'; ... 'listbox'; 'text'; ... 'popupmenu'; 'text'; ... 'pushbutton'; 'text'; ... 'radiobutton'; 'text'; ... 'text'; 'text'}; theStrings = {'Anchovies?', '<-- CheckBox --', ... 'Hello World!', '<-- Edit --', ... {'Now', 'Is', 'The' 'Time' 'For' 'All' 'Good', ... 'Men', 'To', 'Come' 'To' 'The' 'Aid' 'Of', ... 'Their' 'Country'}, ... '<-- ListBox --', ... {'Cheetah', 'Leopard', 'Lion', 'Tiger', 'Wildcat'}, ... '<-- PopupMenu --', ... 'Okay', '<-- PushButton --', ... 'Cream?', '<-- RadioButton --', ... 'UILayout', '<-- Text --'}; theControls = zeros(size(theStyles)); for i = 1:length(theStyles) theControls(i) = uicontrol('Style', theStyles{i}, ... 'String', theStrings{i}, ... 'Callback', ... 'disp(int2str(get(gcbo, ''Value'')))'); end set(theControls(1:2:length(theControls)), 'BackGroundColor', [1 1 0.5]) set(theControls(2:2:length(theControls)), 'BackGroundColor', [0.5 1 1]) thePosition = [1 1 98 98] ./ 100; uilayout(theControls, theLayout, thePosition) set(theFrame, 'UserData', theControls) theStyles, theLayout, thePosition if nargout > 0, theResult = theFrame; end returnendif nargin < 2, theLayout = (1:length(theControls)).'; endif nargin < 3, thePosition = [0 0 1 1]; enda = theLayout(:);a = a(finite(a));a = sort(a);a(diff(a) == 0) = [];b = zeros(size(theLayout));for k = 1:length(a) b(theLayout == a(k)) = k;end[m, n] = size(theLayout);set(theControls, 'Units', 'Normalized')theMargin = [1 1 -2 -2] ./ 100;for k = 1:min(length(theControls), length(a)) [i, j] = find(b == k); xmin = (min(j) - 1) ./ n; xmax = max(j) ./ n; ymin = 1 - max(i) ./ m; ymax = 1 - (min(i) - 1) ./ m; thePos = [xmin ymin (xmax-xmin) (ymax-ymin)] + theMargin; thePos = thePos .* thePosition([3 4 3 4]); thePos(1:2) = thePos(1:2) + thePosition(1:2); set(theControls(k), 'Position', thePos);endif nargout > 0, theResult = theControls; end% ---------- hint ----------%function theResult = hint(theText, theFigureName)% hint -- Post a message.% hint('theText', 'theFigureName') posts 'theText' in the% figure named 'theFigureName', which will be created if% it does not already exist. The text can be a string% separated by newlines, or a cell of strings.% hint('demo') demonstrates itself. % Copyright (C) 1999 Dr. Charles R. Denham, ZYDECO.% All Rights Reserved.% Disclosure without explicit written consent from the% copyright owner does not constitute publication. % Version of 17-Dec-1999 11:31:03.% Updated 04-Jan-2000 13:40:41.if nargin < 1, theText = 'demo'; endif isequal(theText, 'demo') hint(help(mfilename), 'Hint Hint') returnendCR = char(13);LF = char(10);CRLF = [CR LF];if nargout > 0, theResult = []; endif nargin < 1 help(mfilename) theText = help(mfilename); for i = 1:3 theText = [theText theText]; endendif nargin < 2, theFigureName = 'Help'; endif min(size(theText)) == 1 theText = theText(:).';endif ischar(theText) & size(theText, 1) == 1 theText = strrep(theText, CRLF, CR); theText = strrep(theText, LF, CR); if theText(end) ~= CR, theText(end+1) = CR; end if theText(1) ~= CR, theText = [CR theText]; end f = find(theText == CR); if any(f) s = cell(length(f)-1, 1); for i = 1:length(f)-1 if f(i)+1 < f(i+1)-1 s{i} = theText(f(i)+1:f(i+1)-1); else s{i} = ' '; end end theText = s; endendtheLineCount = size(theText, 1);theFigure = findobj( ... 'Type', 'figure', ... 'Name', theFigureName, ... 'Tag', [mfilename ' hint'] ... );if isempty(theFigure) theFigures = findobj('Type', 'figure'); if any(theFigures) thePosition = get(gcf, 'Position'); left = thePosition(1); top = thePosition(2) + thePosition(4); end theFigure = figure( ... 'Name', theFigureName, ... 'Tag', mfilename, ... 'Visible', 'off' ... ); if any(theFigures) set(theFigure, 'Position', thePosition + [20 -20 0 0]) endenddelete(get(theFigure, 'Children'))theColor = [9 9 9]/10;theFontName = 'Courier';if any(findstr(lower(computer), 'mac')) theFontName = 'Monaco';endtheFontSize = 12;theListBox = uicontrol( ... theFigure, ... 'Style', 'listbox', ... 'String', theText, ... 'FontName', theFontName, ... 'FontSize', theFontSize, ... 'HorizontalAlignment', 'left', ... 'BackgroundColor', theColor ... );uilayout(theListBox, 1)set(theFigure, 'Visible', 'on')figure(theFigure)if nargout > 0 theResult = theFigure;end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -