% EZDRAW  GUI pro demostraci pouziti Symbolic Toolboxu.
% ~~~~~~  Umoznuje zadat funkci, kterou spolecne s jeji 
%         derivaci vykresli ...
% 
% Volani:  ezdraw(akce)
% ~~~~~~~
%          IN:  akce ...... identifikator provadene akce,
%                           jestlize zadny, potom 'init'
%
% Poznamky: Opravdu jen ukazkovy programek ...
% ~~~~~~~~~

% Verze: 1
% Datum: 2.4.2003
% Autor: Michal Hajzman

function ezdraw(akce)
  
  
if nargin == 0                                        % v pripade nezadanych parametru
  akce = 'init';
end


switch akce
  
  % Inicializace
  % ************
  case 'init'                                                % definice mluvi za vse ... 
    
    figure('Name', '::: EzDraw :::', ...
	   'NumberTitle', 'off');
    
    axes('Tag', 'axFunkce', ...
	 'Units', 'normalized', ...
	 'Position', [ 0.4 0.6 0.55 0.30]);
  
    axes('Tag', 'axDerivace', ...
	 'Units', 'normalized', ...
	 'Position', [ 0.4 0.1 0.55 0.30]);
    
    uicontrol('Style', 'frame', ...
	      'Units', 'normalized', ...
	      'Position', [0.02 0.02 0.28 0.96]);	       

    uicontrol('Style', 'text', ...
	      'Units', 'normalized', ...
	      'Position', [0.05 0.7 0.2 0.06], ...
	      'String', 'Funkce:', ...
	      'HorizontalAlignment', 'left');    

    uicontrol('Tag', 'edFunkce', ...
              'Style', 'edit', ...
	      'Units', 'normalized', ...
	      'Position', [0.05 0.6 0.2 0.06], ...
	      'HorizontalAlignment', 'left');


    uicontrol('Tag', 'pbEzDraw', ...
              'Style', 'PushButton', ...
	      'Units', 'normalized', ...
	      'Position', [0.05 0.2 0.2 0.08], ...
	      'String', 'EzDraw', ...
	      'CallBack', 'ezdraw(''draw'')');

  % Draw And Diff
  % *************
  case 'draw'
  
   funkce = get(findobj('Tag','edFunkce'),'String');         % nacteni zapisu funkce
   if ~strcmp(deblank(funkce),'')                            % jestlize bylo neco zadano
     derivace = diff(funkce);                                %    vypocet derivace 
     axFunkce =  findobj('Tag','axFunkce');                  %    handle na vykreslovaci osy pro funkci
     axes(axFunkce); hold on;                                %    nastaveni os
     delete(get(axFunkce,'Children'));                       %    vymazani predesle cary
     ezplot(funkce)                                          %    vykresleni funkce  
     axDerivace =  findobj('Tag','axDerivace');              %    handle na vykreslovaci osy pro derivaci
     axes(axDerivace); hold on;                              %    nastaveni os
     delete(get(axDerivace,'Children'));                     %    vymazani predesle cary
     ezplot(derivace)                                        %    vykresleni derivace
   end 
    
end   
