function varargout = prdemo(varargin)
% PRDEMO: callback functions for GUI
%
%    ABOUT
%
%      -Created:     January 2004
%      -Last update: February 13th, 2004
%      -Revision:    0.0.5
%      -Author:      R. S. Schestowitz, University of Manchester
% ==============================================================

gui_Singleton = 0;
gui_State = struct('gui_Name',       mfilename, ...
    'gui_Singleton',  gui_Singleton, ...
    'gui_OpeningFcn', @prdemo_OpeningFcn, ...
    'gui_OutputFcn',  @prdemo_OutputFcn, ...
    'gui_LayoutFcn',  [] , ...
    'gui_Callback',   []);
if nargin & isstr(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end

% ==================================================================== %  

function prdemo_OpeningFcn(hObject, eventdata, handles, varargin)

% Choose default command line output for prdemo
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

if strcmp(get(hObject,'Visible'),'off')
    initialize_gui(hObject, handles);
end

set(handles.pause, 'cdata', pausebutton);

set(handles.resume, 'cdata', resumebutton);

% ==================================================================== %  

function varargout = prdemo_OutputFcn(hObject, eventdata, handles)

% Get default command line output from handles structure
varargout{1} = handles.output;

% ==================================================================== %  

function pause = pausebutton

pause = iconize(imread('pause.jpg'));
pause(pause>240) = .69*255;

% ==================================================================== %   

function resume = resumebutton

resume = iconize(imread('resume.jpg'));
resume(resume>240) = .69*255;

% note the thresholding above

function out = iconize(a)

% Ack. to button demo.

[r,c,d] = size(a);
r_skip = ceil(r/25);
c_skip = ceil(c/25);

% Create the 25x25 icon

out = a(1:r_skip:end,1:c_skip:end,:); 

% ==================================================================== %   

function initialize_gui(fig_handle, handles)

set(handles.pause, 'Enable', 'on');
set(handles.resume, 'Enable', 'off');


% ==================================================================== % 

function pause_Callback(hObject, eventdata, handles)

set(handles.pause, 'Enable', 'off');
set(handles.resume, 'Enable', 'on');
figure(1);
uiwait;

% ==================================================================== % 

function resume_Callback(hObject, eventdata, handles)

set(handles.pause, 'Enable', 'on');
set(handles.resume, 'Enable', 'off');
figure(1);
uiresume;

% ==================================================================== % 

function rotate_Callback(hObject, eventdata, handles)

set(handles.rotate, 'Enable', 'off');
rotate_surface;


% ==================================================================== % 

function rotate_surface

% create some data

[X,Y] = meshgrid(1:50 * 5 + 2, -50 / 2 - 1:1:50 / 2);

for i = 1:5,
            Z(2:50 + 1,1 + i * 5) = randn(50,1)+4;
            Z(2:50 + 1,1 + i * 5 - 1) = randn(50,1)+4;
            Z(2:50 + 1,1 + i * 5 - 2) = randn(50,1)+4;
            Z(2:50 + 1,1 + i * 5 - 3) = randn(50,1)+4;
            Z(2:50 + 1,1 + i * 5 - 4) = randn(50,1)+4;
end

Z(:,1) = zeros(1:50, 1);
Z(:, 5 * 5 + 2) = zeros(1:50, 1);
Z(1,:) = zeros(1, 1:5 * 5);
Z(50 + 2,:) = zeros(1, 1:50 * 5);    


figure(1);
axis off;

for current_viewpoint=1:720,
       % do two rotations
            view(current_viewpoint, 60); 
            surface(X(:,1:27),Y(:,1:27),Z, ...
              'EdgeColor','none', ...
              'FaceColor',[0.5 0.5 0.5], ...
              'FaceLighting','phong', ...
              'AmbientStrength',0.3, ...
              'DiffuseStrength',0.6, ... 
              'Clipping','off',...
              'BackFaceLighting','lit', ...
              'SpecularStrength',1.1, ...
              'SpecularColorReflectance',1, ...
              'SpecularExponent',7);
             l1 = light('Position',[40 20 100], ...
                  'Style','local', ...
                  'Color',[0 0.5 0.7]);
             l2 = light('Position',[.5 -1 .4], ...
                  'Color',[1 1 0]);
             pause(2);
end