wshowdrv.m
上传用户:haiyisale
上传日期:2013-01-09
资源大小:3246k
文件大小:30k
源码类别:

波变换

开发平台:

Matlab

  1. function varargout = wshowdrv(action,varargin);
  2. % WSHOWDRV Wavelet toolbox slide show helper.
  3. %   WSHOWDRV filename plays slide show from file filename.
  4. %   Slide shows can be created using MAKESHOW.
  5. %    
  6. %   See also MAKESHOW, PLAYSHOW.
  7. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  8. %   Last Revision: 09-Sep-2003.
  9. %   Copyright 1995-2004 The MathWorks, Inc.
  10. % $Revision: 1.17.4.2 $
  11. if nargin<1,
  12.    disp('You need to assign a name for script, for example: wshowdrv intro');
  13.    return
  14. else
  15.    if strmatch('#',action) 
  16.    action = action(2:end);
  17.    if nargin<2 , figHandle = gcbf; else , figHandle = varargin{1}; end
  18.    if ishandle(figHandle)
  19.    oldVisibility = get(figHandle,'HandleVisibility');
  20.    set(figHandle,'HandleVisibility','on');
  21.    end
  22.    else
  23.    funDemoName = action;
  24.    action = 'initialize';
  25.    end;
  26. end;
  27. switch action
  28. case 'initialize',
  29.    figHandle = wfindobj('figure','tag',funDemoName);
  30.    makeFIG   = isempty(figHandle);
  31.    if makeFIG 
  32.        try
  33.    [figName,showType] = feval(funDemoName,'getFigParam');
  34.        catch
  35.    figName = ''; showType = 'mixed';
  36.        end
  37.        new_DESIGN = 1;
  38.        figHandle = LocalInitFigure(funDemoName,figName,showType,new_DESIGN);
  39.        if nargin>1
  40.    slideData = get(figHandle,'UserData');
  41.    closeHndl = slideData.closeHndl;
  42.    callbackStr = get(closeHndl,'Callback');
  43.    callbackStr = ['try, ' , callbackStr , ';', varargin{1} , ' end'];
  44.    set(closeHndl,'callBack',callbackStr);
  45.    if length(varargin)>1
  46.    set(closeHndl,'tag',varargin{2});
  47.    end
  48.    set(figHandle,'CloseRequestFcn',['closereq;',varargin{1}]);
  49.        end
  50.    else
  51.        figure(figHandle);
  52.    end
  53.    if nargout>0 ,varargout{1} = figHandle; end
  54. case 'next',
  55.    LocalDoCmd(figHandle,1);
  56.    
  57. case 'back',
  58.    slideData = get(figHandle,'UserData');
  59.    idxSlide = slideData.index;
  60.    deltaBackDEF = -1;
  61.    deltaBack = deltaBackDEF;   
  62.    if isfield(slideData.slide,'idxPrev')
  63.    idxPrev = slideData.slide(idxSlide).idxPrev;
  64.    if ~isempty(idxPrev) & isnumeric(idxPrev)
  65.         deltaBack = idxPrev-idxSlide;
  66.    else
  67.    end
  68.    end
  69.    LocalDoCmd(figHandle,deltaBack);
  70. case 'reset',
  71.    slideData = get(figHandle,'UserData');
  72.    slideData.index = 1;
  73.    set(figHandle,'UserData',slideData);   
  74.    LocalDoCmd(figHandle,0);
  75.    
  76.    % 'try, wshowdrv('#close',1);demoguim('endshow'); end'
  77. case 'autoplay',
  78.    figNumber = figHandle;
  79.    if nargin<3
  80.    direction = +1;
  81.    else
  82.    direction = varargin{2};
  83.    if ~isequal(direction,-1), direction = +1; end
  84.    end
  85.    step = direction;
  86.    allBtns  = findobj(figNumber,'Type','uicontrol','Style','pushbutton');
  87.    autoHndl = findobj(allBtns,'Tag','autoPlay');
  88.    % to check whether Handle is still there in case figure is closed
  89.    if ishandle(autoHndl)
  90.       btnStr = get(autoHndl,'String');
  91.    else
  92.       btnStr = '';
  93.    end
  94.    
  95.    if strcmp(btnStr,xlate('AutoPlay'))
  96.       slideData = get(figNumber,'UserData');
  97.       cmdlen = length(slideData.slide);
  98.       n = slideData.index;
  99.       set(allBtns,'Enable','off');
  100.       set(autoHndl,'String',xlate('Stop'),'Enable','on');
  101.   if direction==1
  102.   ok = (n<cmdlen);
  103.   else 
  104.   ok = (n>0);
  105.   findSTEP = isfield(slideData.slide,'idxPrev');
  106.   end
  107.       while ok & ishandle(autoHndl) & strcmp(get(autoHndl,'String'),xlate('Stop')),
  108.          figure(figNumber);
  109.  if direction==-1 & findSTEP
  110.  idxPrev = slideData.slide(n).idxPrev;
  111.  if ~isempty(idxPrev)
  112.  step = idxPrev-n;
  113.  else
  114.  step = -1;
  115.  end
  116.  end
  117.          LocalDoCmd(figNumber,step);  
  118.          drawnow;
  119.          pause(2);
  120.          n = n+step;
  121.  if direction==1 , ok = (n<cmdlen); else , ok = (n>0); end
  122.       end;
  123.    end
  124.    if ishandle(autoHndl)
  125.       set(autoHndl,'String',xlate('AutoPlay'));    
  126.       set(allBtns,'Enable','on');
  127.       slideData = get(figNumber,'UserData');
  128.       n = slideData.index;
  129.       LocalEnableBtns(n,slideData)
  130.    end
  131. %------------- Added for Wavelet ToolBox ---------%
  132. case 'close',
  133. slideData = get(figHandle,'UserData');
  134. delete(figHandle);
  135.    
  136. case 'info',
  137. slideData = get(figHandle,'UserData');
  138. idxSlide = slideData.index;
  139. infoStrDEF = slideData.funDemoName;
  140. infoStr = infoStrDEF;
  141. if isfield(slideData.slide,'info')
  142. infoStr = slideData.slide(idxSlide).info;
  143. if isempty(infoStr) , infoStr = infoStrDEF; end
  144. end
  145. try 
  146. % feval('helpwin',infoStr);
  147. feval('doc',infoStr);
  148. catch
  149. % feval('helpwin',infoStrDEF);
  150. feval('doc',infoStrDEF);
  151. end
  152. case 'set_axes',
  153. axes_mat = varargin{2};
  154. LocalBuildAxes(figHandle,axes_mat);   
  155. case 'get_axes',
  156. slideData = get(figHandle,'UserData');
  157. varargout{1} = slideData.axesHandles;
  158.    
  159. case 'get_idxSlide',
  160. slideData = get(figHandle,'UserData');
  161. varargout{1} = slideData.index;
  162. case 'modify_Comment',
  163. slideData = get(figHandle,'UserData');
  164. txtHndl = slideData.txtHndl;
  165. txtStr = get(slideData.txtHndl,'String');
  166. % idxLine = varargin{2};
  167. % txtLine = varargin{3};
  168. txtStr{varargin{2}} = varargin{3};
  169. set(txtHndl,'String',txtStr);
  170. case 'bloc_BackBtn',
  171. slideData = get(figHandle,'UserData');
  172. backHndl = slideData.backHndl;
  173. wtbxappdata('set',backHndl,'blockbackHndl',1);
  174. case 'free_BackBtn',
  175. slideData = get(figHandle,'UserData');
  176. backHndl = slideData.backHndl;
  177. if isappdata(backHndl,'blockbackHndl')
  178. wtbxappdata('del',backHndl,'blockbackHndl');
  179. end;
  180. case 'eval_cbClose',
  181. slideData = get(figHandle,'UserData');
  182. closeHndl = slideData.closeHndl;
  183. callbackStr = get(closeHndl,'Callback');
  184. eval(callbackStr);
  185.    
  186. case {'modify_cbClose','modify_cbClose_NEW'}
  187.     win_act = varargin{2};
  188.     if ishandle(win_act);
  189.         funName = varargin{3};
  190.         slideData = get(figHandle,'UserData');
  191.         closeHndl = slideData.closeHndl;
  192.         callbackStr = get(closeHndl,'Callback');
  193.         str_winact = num2str(win_act,16);
  194.         str1 = 'try,';
  195.         str2 = ['OKfig = any(findall(0,''type'',''figure'')==' str_winact ');'];
  196.         switch action
  197.             case 'modify_cbClose'
  198.                 funParamSTR = [funName '(''close'',' str_winact ');'];
  199.             case 'modify_cbClose_NEW'
  200.                 funParamSTR = [...
  201.                         'if ishandle(' str_winact ') ,' ...
  202.                         funName '(''closeDEMO'',' str_winact ',[],[]);' ...
  203.                     'end;'];
  204.         end
  205.         str3 = ['if OKfig==true , ' ...
  206.                 funParamSTR 'delete(' str_winact '); end;'];
  207.         str4 = 'end;';
  208.         addStr = [str1,str2,str3,str4];
  209.         callbackStr = [addStr,'try,',callbackStr,';end; clear OKfig;'];
  210.         set(closeHndl,'Callback',callbackStr);
  211.         set(figHandle,'CloseRequestFcn',callbackStr);
  212.     end
  213.     
  214. case 'gui_wait'
  215. figGUI = varargin{2};
  216. msg = varargin{3};
  217. dynvtool('hide',figGUI);
  218. hdlTxt = wwaiting('handle',figGUI);
  219. oldBkCol = get(hdlTxt,'Backgroundcolor');
  220. set(hdlTxt,'Backgroundcolor','w');
  221. nblin = size(msg,1);
  222. for k = 1:nblin
  223. hdlTxt = wwaiting('msg',figGUI,deblank(msg(k,:)));
  224. mousefrm(0,'watch');            
  225. pause(1.5);
  226. mousefrm(0,'arrow');            
  227. end
  228. hdlTxt = wwaiting('off',figGUI);
  229. set(hdlTxt,'Backgroundcolor',oldBkCol);
  230. dynvtool('show',figGUI);
  231.    
  232. case 'disp_msg'
  233. msg = varargin{2};
  234. wait_mode = varargin{3};
  235. active_fig = varargin{4};
  236. wait_Control = 0;
  237. max_lig = 6;
  238. max_lig = Inf;
  239. cellMSG = formatMSG(msg,max_lig);
  240. nbMSG = length(cellMSG);
  241. NEW_VERSION = 0;
  242. if NEW_VERSION & nbMSG>1
  243. slideData = get(figHandle,'UserData');
  244. nextHndl  = slideData.nextHndl;
  245. backHndl  = slideData.backHndl;
  246. resetHndl = slideData.resetHndl;
  247. autoHndl  = slideData.autoHndl;
  248. infoHndl  = slideData.infoHndl;
  249. closeHndl = slideData.closeHndl;
  250. idxSlide  = slideData.index;
  251. if ishandle(autoHndl)
  252. wait_Control = 1;
  253. btnStr = get(autoHndl,'String');
  254. if strcmp(btnStr,xlate('Stop'))
  255. wait_mode = 'auto';
  256. else
  257. wait_mode = 'step';
  258. end
  259. saveCallBack= {...
  260. get(nextHndl,'callback'),get(backHndl,'callback'), ...
  261. get(resetHndl,'callback'),get(autoHndl,'callback'), ...
  262. get(infoHndl,'callback'),get(closeHndl,'callback') ...
  263. };
  264. end
  265. end
  266. for j = 1:nbMSG
  267. msg = cellMSG{j};
  268. dmsgfun('create',msg,active_fig);
  269. if j<nbMSG
  270. wait_time = 1.5*size(msg,1);
  271. else
  272. wait_time = 0;
  273. end
  274. if NEW_VERSION & wait_Control
  275. LocalEnableBtns(idxSlide,slideData)
  276. switch wait_mode
  277. case 'fixed' , pause(wait_time);
  278. case 'step'  , pause(wait_time);
  279. case 'auto'  , set(autoHndl,'Enable','on'); pause(wait_time);
  280. end
  281. else
  282. mousefrm(0,'watch');
  283. pause(wait_time);
  284. mousefrm(0,'arrow');
  285. end
  286. end
  287. if NEW_VERSION & wait_Control
  288. set(nextHndl,'callback',saveCallBack{1});
  289. set(backHndl,'callback',saveCallBack{2});
  290. set(resetHndl,'callback',saveCallBack{3});
  291. set(autoHndl,'callback',saveCallBack{4});
  292. set(infoHndl,'callback',saveCallBack{5});
  293. set(closeHndl,'callback',saveCallBack{6});
  294. end
  295. case 'autoMode'
  296. funDemoName = varargin{1};
  297. flagClose   = length(varargin)>1;
  298. figNumber = wshowdrv(funDemoName); pause(0.5)
  299. wshowdrv('#autoplay',figNumber);
  300. if flagClose
  301. try , wshowdrv('#eval_cbClose',figNumber); end
  302. end
  303. case 'gr_autoMode'  % For test only
  304. funDemoName = varargin{1};
  305. flagClose   = length(varargin)>1;
  306. figNumber = wshowdrv(funDemoName); pause(0.5)
  307. wshowdrv('#autoplay',figNumber);
  308. wshowdrv('#autoplay',figNumber,-1);
  309. if flagClose
  310. try , wshowdrv('#eval_cbClose',figNumber); end
  311. end
  312. end    % switch action
  313. if ishandle(figHandle) & ~isequal(action,'initialize')
  314.    set(figHandle,'HandleVisibility',oldVisibility);
  315. end
  316. % End of function wshowdrv
  317. %------------------------------------------------------------------------------%
  318. %------------------------------------------------------------------------------%
  319. function LocalDoCmd(figNumber,ichange)
  320. % execute the command in the command window 
  321. % when ichange = 1, go to the next slide;
  322. % when ichange = -1, go to the previous slide;
  323. % when ichange = 0, stay with the current slide;
  324. set(figNumber,'Pointer','watch');
  325. % retrieve variables from saved UserData workspace
  326. slideData = get(figNumber,'UserData');
  327. SlideShowi = slideData.index+ichange;
  328. cmdlen = length(slideData.slide);
  329. if SlideShowi>1
  330.    SlideShowVars = slideData.param(SlideShowi-1).vars;
  331.    for SlideShown = 1:size(SlideShowVars,1); 
  332.       eval([SlideShowVars{SlideShown,1} ' = SlideShowVars{SlideShown,2};']);
  333.    end;
  334. end;
  335. %  guarantee the index is always inside the boundary
  336. if SlideShowi<=0,
  337.    SlideShowi = 1;
  338. elseif SlideShowi>cmdlen
  339.    SlideShowi = cmdlen;
  340. end   
  341. autoHndl = findobj(figNumber,'style','pushbutton','tag','autoPlay');
  342. if strcmp(get(autoHndl,'String'),xlate('AutoPlay'))
  343.    LocalEnableBtns(SlideShowi,slideData); 
  344. end
  345. % get slides
  346. SlideShowcmdS = slideData.slide(SlideShowi).code;
  347. if length(SlideShowcmdS)>0
  348.    SlideShowcmdS = char(SlideShowcmdS);
  349. else
  350.    SlideShowcmdS = '';
  351. end
  352. SlideShowcmdNum = size(SlideShowcmdS,1);   
  353. SlideShowtextStr = slideData.slide(SlideShowi).text;
  354. % consider the empty case
  355. if length(SlideShowtextStr)==0
  356.    SlideShowtextStr = '';
  357.    % else leave it alone: no need to call char(SlideShowtextStr)
  358. end
  359. set(slideData.txtHndl,'String',SlideShowtextStr);
  360. sHndl = findobj(figNumber,'Type','uicontrol','Tag','slide');
  361. %set(sHndl,'String',['Slide ',num2str(SlideShowi)]);
  362. set(sHndl,'String',sprintf('Slide %s of %s',num2str(SlideShowi),num2str(cmdlen)));
  363. % take comments out of the commands before eval them
  364. SlideShowNoCmt = SlideShowcmdS;
  365. if ~isempty(SlideShowcmdS)
  366.    SlideShowNoCmt = LocalNoComments(SlideShowcmdS);
  367. end
  368. SlideShowerrorFlag = 0;
  369. % add ',' at the end of each command 
  370. SlideShowcmdStemp = [SlideShowNoCmt char(','*ones(size(SlideShowcmdS,1),1))];   
  371. % make SlideShowcmdStemp in one line for eval (it has to be that way with 'for' or 'if')
  372. SlideShowcmdStemp = SlideShowcmdStemp';
  373. % evaluate the whole command window's code
  374. h_ENA_ON = findobj(figNumber,'Style','Pushbutton','Enable','On');
  375. set(h_ENA_ON,'Enable','Off');
  376. try
  377.   eval(SlideShowcmdStemp(:)')
  378. catch
  379.   SlideShowerrorFlag = 1;
  380. end
  381. set(h_ENA_ON,'Enable','On');
  382. if SlideShowerrorFlag,
  383.    return;
  384. end
  385. % -----------------------------------------------------------------%
  386. % MiMi - Add the following line to manage the change of
  387. % 'UserData' field during the eval(SlideShowcmdStemp(:)') command.
  388. %------------------------------------------------------------------%
  389. slideData = get(figNumber,'UserData');
  390. %--------------------------------------%
  391. slideData.index = SlideShowi;
  392. set(figNumber,'UserData',slideData); 
  393. % clear all wshowdrv specific variables  
  394. clear SlideShowVars SlideShowcmdS SlideShowNoCmt cmdlen SlideShowi ichange 
  395. clear SlideShown SlideShowtextStr slideData SlideShowcmdNum
  396. % put variables into UserData workspace
  397. vars = who;
  398. slideData = get(figNumber,'UserData');
  399. for SlideShown=1:size(vars,1),
  400.    vars{SlideShown,2} = eval(vars{SlideShown,1});
  401. end
  402. slideData.param(slideData.index).vars = vars;
  403. set(figNumber,'UserData',slideData);
  404. set(figNumber,'Pointer','arrow');
  405. %------------------------------------------------------------------------------%
  406. %------------------------------------------------------------------------------%
  407. function NoComments = LocalNoComments(SlideShowcmdS)
  408. % take out comments from command window commands
  409. SlideShowNoCmt = SlideShowcmdS;
  410. for SlideShowj=1:size(SlideShowcmdS,1)
  411.    SlideShowCmt = find(SlideShowcmdS(SlideShowj,:)=='%');
  412.    if ~isempty(SlideShowCmt)
  413.       if SlideShowCmt(1)==1
  414.          SlideShowNoCmt(SlideShowj,:) = ';';
  415.       else
  416.          % check whether '%' is inside quotes
  417.          SlideShowQut = find(SlideShowcmdS(SlideShowj,:)=='''');
  418.          if ~isempty(SlideShowQut)
  419.             str = SlideShowcmdS(SlideShowj,:);  %to find out % inside '', and ignore it
  420.             a = (str=='''');
  421.             b = 1-rem(cumsum(a),2);
  422.             c = (str=='%');
  423.             d = b.*c;
  424.             SlideShowCmt = find(d==1); 
  425.             if isempty(SlideShowCmt),
  426.                SlideShowCmt(1) = length(SlideShowcmdS(SlideShowj,:))+1;
  427.             end
  428.          end
  429.          SlideShowNoCmt(SlideShowj,1:(SlideShowCmt(1)-1)) = SlideShowcmdS(SlideShowj,1:(SlideShowCmt(1)-1));
  430.          SlideShowNoCmt(SlideShowj,SlideShowCmt(1):end) = ' ';
  431.       end   
  432.    else
  433.       SlideShowNoCmt(SlideShowj,:) = SlideShowcmdS(SlideShowj, :);
  434.    end
  435. end
  436. NoComments = SlideShowNoCmt;
  437. %------------------------------------------------------------------------------%
  438. function LocalEnableBtns(i,slideData)
  439. % control the enable property for Next and Prev. buttons
  440. cmdlen = length(slideData.slide);
  441. nextHndl = slideData.nextHndl;
  442. backHndl = slideData.backHndl;  
  443. autoHndl = slideData.autoHndl;  
  444. set(autoHndl,'Enable','on');
  445. lastPage  = (i==cmdlen);
  446. firstPage = (i==1);
  447. if lastPage & firstPage
  448.    set(nextHndl,'Enable','off');
  449.    set(backHndl,'Enable','off');
  450.    set(autoHndl,'Enable','off');   
  451. elseif lastPage
  452.    set(nextHndl,'Enable','off');
  453.    set(backHndl,'Enable','on');
  454.    set(autoHndl,'Enable','off');   
  455. elseif firstPage
  456.    set(backHndl,'Enable','off');
  457.    set(nextHndl,'Enable','on','String',xlate('Start >>'));  
  458. else
  459.    set(nextHndl,'Enable','on','String',xlate('Next >>'));
  460.    set(backHndl,'Enable','on');        
  461. end
  462. if isappdata(backHndl,'blockbackHndl')
  463.    set(backHndl,'Enable','off');        
  464. end
  465. %------------------------------------------------------------------------------%
  466. %==============================================================================%
  467. function figNumber = LocalInitFigure(funDemoName,figName,showType,new_DESIGN)
  468. % Check inputs.
  469. %--------------
  470. if isempty(figName) , figName = 'Slide Player'; end
  471. if strcmp(showType,'command') 
  472.     no_output = 1;
  473. menubarVAL = 'none';
  474. else
  475.     no_output = 0;
  476. menubarVAL = 'figure';
  477. end
  478. pos_win = depOfMachine(no_output);
  479. %===================================
  480. % Now initialize the whole figure...
  481. % Display mixed, text, or graphics only based on showType.
  482. % If the figure is to be text only, hide the axis.
  483. % If it is to be graphics only, hide the comment window.
  484. % Otherwise, we'll assume that figure is mixed
  485. defaultTextFontsize = wdfigutl('fontsize');
  486. defLeftAxes  = 0.10; defLeftAxes  = 0.075;
  487. defWidthAxes = 0.65; defWidthAxes = 0.675;
  488. switch showType
  489.     case 'text'
  490.         axesVisStatus  = 'off';
  491.         textVisStatus  = 'on';
  492.         textBoxTop     = 0.97;
  493.         defaultAxesPos = [0.45 0.45 0.1 0.1];
  494.     case 'graphic'
  495.         axesVisStatus  = 'on';
  496.         textVisStatus  = 'off';
  497.         textBoxTop     = 0.35;
  498.         defaultAxesPos = [defLeftAxes 0.10 defWidthAxes 0.8];
  499.     case 'mixed'  
  500.         axesVisStatus  = 'on';
  501.         textVisStatus  = 'on';
  502.         textBoxTop     = 0.40;
  503.         defaultAxesPos = [defLeftAxes 0.50 defWidthAxes 0.43];
  504.     case 'manual'
  505.         axesVisStatus  = 'off';
  506.         textVisStatus  = 'off';
  507.         textBoxTop     = 0.40;
  508.         defaultAxesPos = [defLeftAxes 0.10 defWidthAxes 0.8];
  509.     case 'command'
  510.         axesVisStatus  = 'off';
  511.         textVisStatus  = 'off';
  512.         textBoxTop     = 0.40;
  513.         defaultAxesPos = [defLeftAxes 0.10 defWidthAxes 0.8];
  514.     otherwise
  515.         if strcmp(showType(1:3),'mix'), 
  516.             nb =  showType(4:length(showType));
  517.             nb = wstr2num(nb);
  518. if new_DESIGN , nb = nb-1; end
  519.             if      isempty(nb) , nb = 1;
  520.             elseif  nb<1 ,  nb = 1;
  521.             elseif  nb>20 , nb = 20;
  522.             end
  523.             nb = (nb-11);
  524.             linh = (0.40-0.03)/11;
  525.             axesVisStatus  = 'on';
  526.             textVisStatus  = 'on';
  527.             dy             = nb*linh;
  528.             textBoxTop     = 0.40+dy;
  529.             defaultAxesPos = [defLeftAxes 0.50+dy defWidthAxes 0.43-dy];
  530.         else % mixed
  531.             axesVisStatus  = 'on';
  532.             textVisStatus  = 'on';
  533.             textBoxTop     = 0.40;
  534.             defaultAxesPos = [defLeftAxes 0.50 defWidthAxes 0.43];
  535.         end
  536. end;
  537. if new_DESIGN
  538. defColDef = 'black';
  539. defFigColor = 0.4*[1 1 1];
  540. defFontWeight = 'bold';
  541. defFontSize   = 8;
  542. else
  543. defColDef = 'white';
  544. defFigColor = get(0,'DefaultFigureColor');
  545. defFontWeight = 'normal';
  546. defFontSize   = 8;
  547. end
  548. figProp_1 = {...
  549.         'Name',figName,         ...
  550.         'NumberTitle','off',  ...
  551.         'IntegerHandle','On',  ...
  552.         'Visible','off',        ...
  553. 'Position',pos_win,     ...
  554. 'menubar','None'     ...
  555.         };
  556. figProp_2 = {...
  557.         'DefaultUicontrolFontWeight',defFontWeight, ...
  558.         'DefaultAxesFontWeight',defFontWeight,      ...
  559.         'DefaultTextFontWeight',defFontWeight,      ...
  560.         'DefaultAxesFontSize',defFontSize,   ...
  561.         'DefaultTextFontSize',defFontSize,   ...
  562. 'Position',pos_win,                  ...
  563. 'DefaultAxesPosition',defaultAxesPos, ...
  564. 'Color',defFigColor,                  ...
  565.         'Tag',funDemoName                     ...
  566.         };
  567. if ~strcmp(showType,'command')
  568. figNumber = wfigmngr('init',figProp_1{:});
  569. set(figNumber,'HandleVisibility','On');
  570. wfigmngr('extfig',figNumber,'ExtFig_Demos')
  571.     try
  572.         feval(funDemoName,'addHelp',figNumber);
  573.     end
  574. set(figNumber,'HandleVisibility','On');
  575. else
  576. figNumber = figure(figProp_1{:});
  577. colordef(figNumber,defColDef);
  578.     wfigmngr('extfig',figNumber,'Empty');
  579.     set(figNumber,'HandleVisibility','On');
  580. end
  581. set(figNumber,figProp_2{:});
  582. figNumberSTR = num2str(figNumber,16);
  583. % Information for uicontrols.
  584. %----------------------------
  585. spacing = 0.005;
  586. btnWid  = 0.15;
  587. btnHt   = 0.04;
  588. btnSpacing = 0.03;
  589. btnHtBig = 0.06;
  590. if new_DESIGN
  591. left = 0.025; right = 0.7875; bottom = 0.025;
  592. frmBorder = 0.01; btnLeft = 0.8250; topFrm = 0.95;
  593. if no_output
  594. btnLeft = 0.10; btnWid = 0.80; btnHtBig = 0.10;
  595.         bottom  = 0.08; topFrm = 0.85; frmBorder = 0.05;
  596. btnHt   = 0.05;
  597. end
  598. yPosTxt = bottom+topFrm-btnHt;
  599. % dx = 0.02; right = right-dx; btnLeft = btnLeft-dx; btnWid = btnWid+dx;
  600. btnPosParam = [btnLeft,bottom,yPosTxt,btnWid,btnHtBig,btnSpacing];
  601. frmBkColor = 0.6*ones(1,3);
  602. else
  603. left = 0.05; right = 0.75; bottom = 0.05;
  604. frmBorder = 0.02; btnLeft = 0.80; topFrm = 0.9;
  605. if no_output
  606. btnLeft = 0.10; btnWid = 0.80; btnHtBig = 0.10;
  607.         bottom  = 0.08; topFrm = 0.85; frmBorder = 0.05;
  608. btnHt   = 0.05;
  609. end
  610. yPosTxt = 0.92;
  611. btnPosParam = [btnLeft,bottom,topFrm,btnWid,btnHtBig,btnSpacing];
  612. frmBkColor = [0.5 0.5 0.5];
  613. end
  614. % The Text Window frame.
  615. %-----------------------
  616. frmPos = [left-frmBorder bottom-frmBorder ...
  617.            (right-left)+2*frmBorder (textBoxTop-bottom+2*frmBorder)];
  618. frmHndl = LocalBuildFrmTxt(frmPos,frmBkColor,'','frame','','');
  619. set(frmHndl,'BackgroundColor',frmBkColor);
  620. slideData.winFrmHndl = frmHndl;
  621. if isequal(no_output,1) , set(slideData.winFrmHndl,'Visible','Off'); end
  622. % The editable text field.
  623. %-------------------------
  624. mcwPos = [left bottom (right-left) textBoxTop-bottom]; 
  625. callbackStr = [mfilename,'(''#changetext'',',figNumberSTR,');'];
  626. slideData.txtHndl = LocalBuildFrmTxt(mcwPos,frmBkColor,'','edit','comments',callbackStr);
  627. set(slideData.txtHndl,...
  628. 'BackgroundColor',[1 1 1],'ForegroundColor',[0 0 0],...
  629. 'FontWeight','bold');
  630. if isequal(no_output,1) , set(slideData.txtHndl,'Visible','Off'); end
  631. % The CONSOLE frame.
  632. %-------------------
  633. yPos = bottom-frmBorder;
  634. frmPos = [btnLeft-frmBorder yPos btnWid+2*frmBorder topFrm+2*frmBorder];
  635. frmHndl = LocalBuildFrmTxt(frmPos,frmBkColor,'','frame','','');
  636. set(frmHndl,'BackgroundColor',frmBkColor);
  637. slideData.cmdFrmHndl = frmHndl;
  638. % The CONSOLE text (title).
  639. %--------------------------
  640. btnPos = [btnLeft yPosTxt btnWid btnHt];
  641. slideHandle = LocalBuildFrmTxt(btnPos,frmBkColor,'Slide 1','text','slide','');
  642. set(slideHandle,'HorizontalAlignment','center');
  643. slideData.slitxtHndl = slideHandle;
  644. % The Next button.
  645. %-----------------
  646. btnNumber = 1;
  647. labelStr = 'Start >>';
  648. callbackStr = [mfilename,'(''#next'',',figNumberSTR,');'];
  649. slideData.nextHndl = LocalBuildBtn('pushbutton',btnNumber,labelStr,callbackStr,'next',btnPosParam);
  650. % The Prev button.
  651. %-----------------
  652. btnNumber = 2;
  653. labelStr = 'Prev <<';
  654. callbackStr = [mfilename,'(''#back'',',figNumberSTR,');'];
  655. slideData.backHndl = LocalBuildBtn('pushbutton',btnNumber,labelStr,callbackStr,'back',btnPosParam);
  656. % The Reset button.
  657. %------------------
  658. btnNumber = 3;
  659. labelStr = 'Reset';
  660. callbackStr = [mfilename,'(''#reset'',',figNumberSTR,');'];
  661. slideData.resetHndl = LocalBuildBtn('pushbutton',btnNumber,labelStr,callbackStr,'reset',btnPosParam);
  662. % The AutoPlay button.
  663. %---------------------
  664. btnNumber = 4;
  665. labelStr = 'AutoPlay';
  666. callbackStr = [mfilename,'(''#autoplay'',',figNumberSTR,');'];
  667. slideData.autoHndl = LocalBuildBtn('pushbutton',btnNumber,labelStr,callbackStr,'autoPlay',btnPosParam);
  668. % The Info button.
  669. %-----------------
  670. btnNumber = 0;
  671. labelStr = 'Info';
  672. callbackStr = [mfilename,'(''#info'',',figNumberSTR,');'];
  673. slideData.infoHndl = LocalBuildBtn('pushbutton',btnNumber,labelStr,callbackStr,'info',btnPosParam);
  674. % The Close button.
  675. %-----------------
  676. callbackStr = [mfilename,'(''#close'',',figNumberSTR,');'];
  677. slideData.closeHndl = LocalBuildBtn('pushbutton',0,'Close',callbackStr,'close',btnPosParam);
  678. set(figNumber,'CloseRequestFcn',callbackStr);
  679. % Now initiate userdata and uncover the figure
  680. %---------------------------------------------
  681. slideData.slide(1).code = {''};
  682. slideData.slide(1).text = {''};
  683. slideData.slide(1).info = {''};   % User defined for help!
  684. slideData.slide(1).idxPrev = {};  % User defined for back button!
  685. slideData.param(1).vars = {};
  686. try
  687.    slides = eval(funDemoName);
  688.    set(slideData.slitxtHndl,'String', sprintf('Slide 1 of %s',num2str(length(slides))));
  689. catch
  690.    slides = [];
  691. end
  692. if ~isstruct(slides) | ...
  693.       ~isfield(slides,'code') | ...
  694.       ~isfield(slides,'text')
  695.    slides.code = {'load logo'
  696.       ' surf(L,R), colormap(M)'
  697.       ' n = length(L(:,1));'
  698.       ' axis off, axis([1 n 1 n -.2 .8]),view(-37.5,30)'
  699.       'title(''Invalid WSHOWDRV File Requested'');'};
  700.    slides.text = {'You have requested a file which does not exist'
  701.       'or which is not a valid WSHOWDRV file.'};
  702.    set(infoHndl,'Enable','off');
  703. end
  704. slideData.slide = slides;
  705. slideData.index = 1;
  706. slideData.funDemoName = funDemoName; 
  707. set(figNumber,'UserData',slideData);
  708. LocalDoCmd(figNumber,0);   
  709. try 
  710. feval(funDemoName,'initShowViewer',figNumber);
  711. end
  712. %--------------------------------------------------------------%
  713. % last thing: turn it on
  714. % we are calling slide show code above, so don't switch
  715. % HandleVis until we have computed the first slide: in case
  716. % the code calls gcf or some such thing, if the demo is
  717. % invoked from the command line, the fig won't be visible if
  718. % we set handlevis to callback before computing...
  719. %--------------------------------------------------------------%
  720. set(figNumber, ...
  721.         'Visible','on',...
  722.         'HandleVisibility','callback');
  723. %==============================================================================%
  724. %==============================================================================%
  725. %------------------------------------------------------------------------------%
  726. function frmHndl = LocalBuildFrmTxt(frmPos,frmBkCol,txtStr,uiStyle,uiTag,uiCallback)
  727. frmHndl = uicontrol( ...
  728.         'Style', uiStyle, ...
  729.         'HorizontalAlignment','left', ...
  730.         'Units','normalized', ...
  731.         'Max', 20, ...
  732.         'Position',frmPos, ...
  733.         'BackgroundColor',frmBkCol, ...
  734.         'ForegroundColor',[1 1 1], ...             % generates an edge
  735.         'String', txtStr, ...
  736.         'Tag', uiTag);
  737. %------------------------------------------------------------------------------%
  738. function btHandle = LocalBuildBtn(btnStyle,btnNumber,labelStr,callbackStr,uiTag,btnPosParam)
  739. % build buttons and check boxes on the right panel
  740. labelColor = [0.8 0.8 0.8];
  741. left = btnPosParam(1); bottom = btnPosParam(2); top = btnPosParam(3);
  742. btnWid = btnPosParam(4); btnHt = btnPosParam(5); spacing = btnPosParam(6);
  743. % Spacing between the button and the next command's label
  744. yPos = top-(btnNumber-1)*(btnHt+spacing);
  745. if strcmp(labelStr,'Close')==1
  746.    yPos = bottom;
  747. elseif strcmp(labelStr,'Info')==1
  748.    yPos = bottom+btnHt+spacing; 
  749. else
  750.    yPos = top-(btnNumber-1)*(btnHt+spacing)-btnHt;
  751.    yPos = yPos-btnHt/2;
  752.    
  753. end
  754. % ui position
  755. btnPos = [left yPos btnWid btnHt];
  756. btHandle = uicontrol( ...
  757.         'Style', btnStyle, ...
  758.         'Units','normalized', ...
  759.         'Position',btnPos, ...
  760.         'String',xlate(labelStr), ...
  761.         'Tag', uiTag, ...
  762.         'Callback',callbackStr); 
  763. %------------------------------------------------------------------------------%
  764. function slideData = LocalBuildAxes(figNumber,axes_mat)
  765. slideData = get(figNumber,'UserData');
  766. delete(findobj(figNumber,'type','axes'));
  767. if length(axes_mat)==0
  768. slideData.axesHandles = [];
  769. set(figNumber,'UserData',slideData);
  770. return;
  771. end
  772. nb_axes = prod(axes_mat);
  773. axesHandles = zeros(1,nb_axes);
  774. if length(axes_mat)==1 , axes_mat = [axes_mat 1]; end
  775. % defAxesPos = get(figNumber,'DefaultAxesPosition');
  776. left_a  = 0;  right_a = 0.85;  % right_a = 0.80;
  777. bottom_a = 0;  top_a = 1;
  778. dy_axe = 0.08;
  779. dx_axe = 0.1;
  780. frmHndl = slideData.winFrmHndl;
  781. if ishandle(frmHndl)
  782. pos_t = get(frmHndl,'Position');
  783. bottom_a = pos_t(2)+pos_t(4);
  784. end
  785. h_axe = (top_a-bottom_a-(axes_mat(1)+1)*dy_axe)/axes_mat(1);
  786. w_axe = (right_a-left_a-(axes_mat(2)+1)*dx_axe)/axes_mat(2);
  787. num = 1;
  788. y_axe = top_a;
  789. for r = 1:axes_mat(1)
  790. y_axe = y_axe-h_axe-dy_axe;        
  791. x_axe = left_a+dx_axe;
  792. for c = 1:axes_mat(2)
  793. pos_a = [x_axe y_axe w_axe h_axe];
  794. axesHandles(num) = axes('Parent',figNumber,...
  795. 'Visible','off','Position',pos_a,'Userdata',num);
  796. num = num+1;
  797. x_axe = x_axe+w_axe+dx_axe;
  798. end
  799. end
  800. slideData.axesHandles = axesHandles;
  801. set(figNumber,'UserData',slideData);
  802. %------------------------------------------------------------------------------%
  803. function varargout = depOfMachine(varargin)
  804. no_output = varargin{1};
  805. ShiftTop_Fig = mextglob('get','ShiftTop_Fig');
  806. screen = get(0,'ScreenSize');
  807. if no_output,
  808.     height = 420; width = 240; height = 500; 
  809.     if screen(4)<800
  810.         height = height/2;
  811.         width = 140;
  812.     else
  813.         height = height/1.5;
  814.         width = 160;
  815.     end
  816.     left   = screen(3)*0.01;
  817.     bottom = screen(4)-height-ShiftTop_Fig;
  818. else
  819.     height = 500; width  = 560;
  820.     if screen(4)<height+ShiftTop_Fig , height = screen(4)-ShiftTop_Fig; end
  821.     pos    = get(0,'DefaultFigurePosition');
  822.     left   = (screen(3)-width)/2;
  823.     bottom = screen(4)-height-ShiftTop_Fig;
  824. end
  825. varargout{1} = [left bottom width height];
  826. %------------------------------------------------------------------------------%
  827. %==============================================================================%
  828. %==============================================================================%
  829. %------------------------------------------------------------------------------%
  830. function cellMSG = formatMSG(msg,max_lig)
  831. if nargin<2 , max_lig = 6; end
  832. if isequal(max_lig,Inf)
  833. ind = findstr(msg(:,1)','$');
  834. msg(ind) = ' ';
  835. cellMSG = {msg};
  836. return
  837. end
  838. i_msg = 0; cellMSG = {};
  839. loop = 1;
  840. while loop
  841. col1   = msg(:,1)';
  842. nb_lin = length(col1);
  843. ind    = findstr(col1,'$');
  844. if ~isempty(ind)
  845. lig = ind(1);
  846. if lig>max_lig+1
  847. beg = lig;
  848. tmp = msg(max_lig+1:nb_lin,:);
  849. msg = msg(1:max_lig,:);
  850. else
  851. beg = lig+1;
  852. tmp = msg(beg:nb_lin,:);
  853. msg = msg(1:lig-1,:);
  854. end
  855. elseif nb_lin>max_lig
  856. tmp = msg(max_lig+1:nb_lin,:);
  857. msg = msg(1:max_lig,:);
  858. else
  859. loop = 0;
  860. end
  861. i_msg = i_msg+1;
  862. cellMSG{i_msg} = msg;
  863. if loop , msg = tmp; end
  864. end  % while loop
  865. %------------------------------------------------------------------------------%
  866. %==============================================================================%