📄 makeshow.m
字号:
SlideShowcmdS = char(SlideShowcmdS);
else
SlideShowcmdS='';
end
SlideShowcmdNum=size(SlideShowcmdS);
SlideShowtextStr=slideData.slide(SlideShowi).text;
if length(SlideShowtextStr)==0
SlideShowtextStr='';
end
% set up comments for text window, command window and slide label
LocalSetTexts(slideData, SlideShowcmdS, SlideShowtextStr,'Text Window');
sHndl=findobj(gcf, 'Type', 'uicontrol', 'Tag', 'slide');
set(sHndl, 'String', ['Slide ', num2str(SlideShowi)]);
% take comments out of the commands before eval them
SlideShowNoCmt=SlideShowcmdS;
if ~isempty(SlideShowcmdS)
SlideShowNoCmt=LocalNoComments(SlideShowcmdS);
end
SlideShowerrorFlag=0;
% add ',' at the end of each command
SlideShowcmdStemp=[SlideShowNoCmt char(','*ones(size(SlideShowcmdS,1),1))];
% make SlideShowcmdStemp in one line for eval (it has to be that way with 'for' or 'if')
SlideShowcmdStemp=SlideShowcmdStemp';
% evaluate the whole command window's code
eval(SlideShowcmdStemp(:)', 'SlideShowerrorFlag=1;');
if SlideShowerrorFlag,
LocalErrorProc(slideData, SlideShowcmdS);
end
slideData.index=SlideShowi;
set(gcf, 'UserData', slideData);
% clear all makeshow specific variables
clear SlideShowVars SlideShowcmdS SlideShowNoCmt SlideShowcmdStemp numSlides SlideShowi ichange
clear SlideShown SlideShowtextStr slideData SlideShowcmdNum
% put variables into UserData workspace
vars=who;
for SlideShown=1:size(vars,1),
vars{SlideShown,2}=eval(vars{SlideShown,1});
end
slideData=get(gcf, 'UserData');
slideData.param(slideData.index).vars=vars;
set(gcf, 'UserData', slideData);
%==================================================
function NoComments=LocalNoComments(SlideShowcmdS)
% take out comments from command window commands
SlideShowNoCmt=SlideShowcmdS;
for SlideShowj=1:size(SlideShowcmdS,1)
SlideShowCmt=find(SlideShowcmdS(SlideShowj,:)=='%');
if ~isempty(SlideShowCmt)
if SlideShowCmt(1)==1
SlideShowNoCmt(SlideShowj,:)=';';
else
% check whether '%' is inside quotes
SlideShowQut=find(SlideShowcmdS(SlideShowj,:)=='''');
if ~isempty(SlideShowQut)
str=SlideShowcmdS(SlideShowj,:); %to find out % inside '',
a=(str=='''');
b=1-rem(cumsum(a),2);
c=(str=='%');
d=b.*c;
SlideShowCmt=find(d==1);
if isempty(SlideShowCmt),
SlideShowCmt(1)=length(SlideShowcmdS(SlideShowj,:))+1;
end
end
SlideShowNoCmt(SlideShowj,1:(SlideShowCmt(1)-1))=SlideShowcmdS(SlideShowj, 1:(SlideShowCmt(1)-1));
SlideShowNoCmt(SlideShowj,SlideShowCmt(1):end)=' ';
end
else
SlideShowNoCmt(SlideShowj,:)=SlideShowcmdS(SlideShowj, :);
end
end
NoComments=SlideShowNoCmt;
%==================================================
function LocalSaveCallBack
% Callback for save button
slideData=get(gcf,'UserData');
numSlides=size(slideData.slide);
[fname, fpath]=uiputfile;
if isstr(fpath)&isstr(fname)
fid=fopen([fpath, fname],'w');
if fid~=-1
fprintf(fid, 'function slide=%s\n', fname(1:end-2));
fprintf(fid, '%% This is a slideshow file for use with playshow.m and makeshow.m\n');
fprintf(fid, '%% To see it run, type ''playshow %s'', \n\n', fname(1:end-2));
fprintf(fid, '%% Copyright (c) 1984-98 by The MathWorks, Inc.\n');
fprintf(fid, 'if nargout<1,\n playshow %s\nelse', fname(1:end-2));
for j=1:numSlides(2)
str=char(slideData.slide(j).code);
target='''';
totalen=size(str);
fprintf(fid, '\n %%========== Slide %d ==========\n\n', j);
fprintf(fid, ' slide(%d).code={\n', j);
if totalen(1)>0
for k=1:totalen(1)-1
tempstr=str(k,:);
outstr=LocalDoubleQuote(tempstr, target);
fprintf(fid, ' ''%s'',\n', deblank(outstr));
end
tempstr=str(totalen(1),:);
outstr=LocalDoubleQuote(tempstr, target);
fprintf(fid, ' ''%s'' ', deblank(outstr));
end
fprintf(fid, '};\n');
str=char(slideData.slide(j).text);
totalen=size(str);
fprintf(fid, ' slide(%d).text={\n', j);
if totalen(1)>0
for k=1:totalen(1)-1
tempstr=str(k,:);
fprintf(fid, ' ''%s'',\n', deblank(LocalDoubleQuote(tempstr, target))');
end
tempstr=str(totalen(1),:);
fprintf(fid, ' ''%s''', deblank(LocalDoubleQuote(tempstr, target))');
end
fprintf(fid, '};\n');
end
fprintf(fid, 'end');
status=fclose(fid);
else
disp(['can not save file ' fname ' file was not saved']);
end
end
%==================================================
function outStr=LocalDoubleQuote(inStr, target)
% add double quote to quoted string
outStr=inStr(sort([1:length(inStr) find(inStr==target)]));
%==================================================
function LocalCmdChange(idx, slideData)
% Callback when command is changed
cmdHndl=findobj('Type', 'uicontrol', 'Tag', 'cmds');
cmdHndl=slideData.cmdHandle;
newcmd=get(cmdHndl, 'String');
slideData.slide(idx).code={newcmd};
set(gcf, 'UserData', slideData);
LocalEnableBtns(idx, slideData);
%==================================================
function LocalTxtChange(idx, slideData)
% Callback when text is changed
txtHndl=slideData.txthandle;
newtext=get(txtHndl, 'String');
slideData.slide(idx).text=newtext;
set(gcf, 'UserData', slideData);
LocalEnableBtns(idx, slideData);
%==================================================
function LocalEnableBtns(i, slideData)
% control the enable property for Next and Prev. buttons
numSlides=length(slideData.slide);
nextHndl=slideData.nextHandle;
backHndl=slideData.backHandle;
delHndl=slideData.delhandle;
if numSlides>0,
set(delHndl, 'Enable', 'on');
else
set(delHndl, 'Enable', 'off');
end
if i==numSlides,
set(nextHndl, 'Enable', 'off');
set(backHndl, 'Enable', 'on');
elseif i==1,
set(backHndl, 'Enable', 'off');
set(nextHndl, 'Enable', 'on');
else
set(nextHndl, 'Enable', 'on');
set(backHndl, 'Enable', 'on');
end
%==================================================
function LocalSetTexts(slideData, str1, str2, str3)
% set comments for text window, command window and label
mcwHndl=slideData.cmdHandle;
textHndl=slideData.txthandle;
lableHndl=slideData.lblhandle;
set(mcwHndl,'String',str1);
set(textHndl, 'String', str2);
set(lableHndl, 'String', str3);
%==================================================
function uiHandle=LocalBuildUi(uiPos, uiStyle, uiCallback, promptStr, uiTag)
% build editable text
uiHandle=uicontrol( ...
'Style',uiStyle, ...
'HorizontalAlignment','left', ...
'Units','normalized', ...
'Max',20, ...
'BackgroundColor',[1 1 1], ...
'Position',uiPos, ...
'Callback',uiCallback, ...
'Tag', uiTag, ...
'String',promptStr);
%==================================================
function frmHandle=LocalBuildFrmTxt(frmPos, txtStr, uiStyle, txtTag)
% build frame and label
frmHandle=uicontrol( ...
'Style', uiStyle, ...
'Units','normalized', ...
'Position',frmPos, ...
'BackgroundColor',[0.50 0.50 0.50], ...
'ForegroundColor',[1 1 1], ... %generates an edge
'String', txtStr, ...
'Tag', txtTag);
%==================================================
function btHandle=LocalBuildBtns(btnNumber, labelStr, callbackStr, uiTag)
% build buttons or check boxes on the right panel
labelColor=[0.8 0.8 0.8];
top=0.9;
left=0.80;
btnWid=0.15;
btnHt=0.06;
bottom=0.05;
% Spacing between the button and the next command's label
spacing=0.03;
yPos=top-(btnNumber-1)*(btnHt+spacing);
if strcmp(labelStr, 'Close')==1
yPos= bottom;
elseif strcmp(labelStr, 'Info')==1
yPos= bottom+btnHt+spacing;
else
yPos=top-(btnNumber-1)*(btnHt+spacing)-btnHt;
end
% Generic button information
btnPos=[left yPos btnWid btnHt];
btHandle=uicontrol( ...
'Style','pushbutton', ...
'Units','normalized', ...
'Position',btnPos, ...
'String',labelStr, ...
'Tag', uiTag, ...
'Callback',callbackStr);
%==================================================
function LocalErrorProc(slideData, oldCmds)
% error processing
editHndl=slideData.cmdHandle;
set(editHndl,'ForegroundColor',[1 0 0]);
% Pad "lasterr" with spaces for consistency
lasterrStr=[32 lasterr];
lasterrStr=strrep(lasterrStr,10,[13 10 32]);
errorStr=str2mat(' Error Detected:',lasterrStr,' Resetting Input');
set(editHndl,'String',errorStr);
pause(3);
set(editHndl,'String', oldCmds);
set(editHndl,'ForegroundColor',[0 0 0]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -