function [h_bar_tilt,h_bar_accel,h_bar_brake,h_text_angle,h_text_zero_angle,h_text_min_angle,h_text_max_angle,h_text_accel,h_text_brake,h_edit_tilt,h_edit_accel,h_edit_brake,h_button_override,subp_gear,subp_clutch,subp_speed,h_toggle_reverse]=build_gui(h_fig,max_ang)
%BUILD_GUI Função construtora da interface gráfica do programa de simulação
%          da caixa de velocidades automática.
%##########################################################################
% Esta função desenha a interface fráfica do programa de simulação da caixa
% de velocidades automática do ATLASCAR. Os seus outputs são todos os
% handles de elementos da interface.
%
% INPUTS:
% h_fig -> Handle gŕafico da figura onde a interface vai ser inserida;
% max_ang -> Ângulo máximo do terreno;
%
% OUTPUTS:
% h_bar_tilt -> Handle gráfico da barra da inclinação do terreno;
% h_bar_accel -> Handle gráfico da barra da aceleração do motor;
% h_bar_brake -> Handle gráfico da barra da aceleralção negativa imposta
%                pelo travão;
% h_text_angle -> Handle gráfico do titulo da barra da inclinação do
%                 terreno;
% h_text_zero_angle -> Handle gráfico do texto auxiliar da barra de
%                      inclinação do terreno que indica o valor de zero
%                      graus;
% h_text_min_angle -> Handle gráfico do texto auxiliar da barra de
%                     inclinação do terreno que indica o valor mínimo do
%                     ângulo;
% h_text_max_angle -> Handle gráfico do texto auxiliar da barra de
%                     inclinação do terreno que indica o valor máximo do
%                     ângulo;
% h_text_accel -> Handle gráfico do titulo da barra de aceleração do motor;
% h_text_brake -> Handle gráfico do titulo da barra de aceleração do
%                 travão;
% h_edit_tilt -> Handle gráfico da caixa de texto editável com o valor do
%                ângulo a impor ao terreno;
% h_edit_accel -> Handle gráfico da caixa de texto editável com o valor da
%                 aceleração a impor ao motor;
% h_edit_brake -> Handle gráfico da caixa de texto editável com o valor da
%                 aceleração negativa a impor ao travão;
% h_button_override -> Handle gráfico do botão de override aos valores
%                      impostos nas barras verticais;
% subp_gear -> Handle gráfico do subplot usado para mostrar a mudança
%              actual;
% subp_clutch -> Handle gráfico do subplot usado para mostrar o estado da
%                embraiagem;
% subp_speed -> Handle gráfico do subplot usado para mostrar a velocidade
%               do carro;
% #########################################################################
% Geração da barra da inclinação:
h_bar_tilt=uicontrol('style','slider','units','pixel','position',[30,50,20,300],'Parent',h_fig,'Value',0.5);
% Geração da barra da aceleração:
h_bar_accel=uicontrol('style','slider','units','pixel','position',[100,50,20,300],'Parent',h_fig);
% Geração da barra do travão:
h_bar_brake=uicontrol('style','slider','units','pixel','position',[170,50,20,300],'Parent',h_fig);
% Texto de título para o angulo:
h_text_angle=uicontrol('style','text','position',[20,350,40,15],'string','Angle','Backgroundcolor',[204/255,204/255,204/255]);
% Texto que mostra a posição 0 do ângulo:
h_text_zero_angle=uicontrol('style','text','position',[50,190,10,15],'string','0','Backgroundcolor',[204/255,204/255,204/255]);
% Texto que mostra a posição máxima do ângulo:
h_text_min_angle=uicontrol('style','text','position',[50,330,30,15],'string',sprintf('%d',max_ang),'Backgroundcolor',[204/255,204/255,204/255]);
% Texto que mostra a posição mínima do ângulo:
h_text_max_angle=uicontrol('style','text','position',[50,50,30,15],'string',sprintf('%d',-max_ang),'Backgroundcolor',[204/255,204/255,204/255]);
% Texto de título para a aceleração:
h_text_accel=uicontrol('style','text','position',[70,350,80,15],'string','Throttle','Backgroundcolor',[204/255,204/255,204/255]);
% Texto de título para o travão:
h_text_brake=uicontrol('style','text','position',[160,350,40,15],'string','Brake','Backgroundcolor',[204/255,204/255,204/255]);
% Caixa de texto de Override ao tilt:
h_edit_tilt=uicontrol('style','edit','units','pixel','position',[10,10,60,30],'String','');
% Caixa de texto de Override ao acelerador:
h_edit_accel=uicontrol('style','edit','units','pixel','position',[80,10,60,30],'String','');
% Caixa de texto de Override ao travão:
h_edit_brake=uicontrol('style','edit','units','pixel','position',[150,10,60,30],'String','');
% Botão de Override:
h_button_override=uicontrol('style','pushbutton','units','pixel','String','Override','position',[220,10,70,30],'Callback','override_callback(h_edit_tilt,h_edit_accel,h_edit_brake,h_bar_tilt,max_ang,h_bar_accel,h_bar_brake);');
% Botão de Marcha-Atrás:
h_toggle_reverse=uicontrol('style','togglebutton','units','pixel','String','Reverse','position',[300,10,70,30]);
% Gera um subplot onde vai ser desenhado o estado das mudanças:
subp_gear=subplot('Position',[0.4,0.65,0.55,0.15]);
% Gera um subplot onde vai ser desenhado o estado da embraiagem:
subp_clutch=subplot('Position',[0.4,0.4,0.55,0.15]);
% Gera um subplot onde vai ser desenhado o gráfico de velocidade:
subp_speed=subplot('Position',[0.4,0.15,0.55,0.15]);
end