// cCliente.cpp     Definição da classe cCliente

// Aula do dia 7 de Março de 2002

#include <string.h>
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include "cCliente.h"


cOpcaoMenu::cOpcaoMenu()
{
	strcpy(Descricao,"");
	f = 0;
}
cOpcaoMenu::cOpcaoMenu( char *Desc ,void (cCliente::*func)() )
{
	strcpy(Descricao,Desc);
	f = func;
};


char *cOpcaoMenu::GetDescricao()
{
	return Descricao;
}


void (cCliente::*cOpcaoMenu::GetFuncao())()
{
	return f;
}

void cCliente::Init()
{
	
	ListaOpcoes.Inserir( cOpcaoMenu( "Terminar", cCliente::Terminar  ));
}


void cCliente::Exec()
{
	Init ();
	do 
	{
		ExecOpcao( ShowMenu() );
	} while (true);

}

// Navega na lista das opções e escreve a descrição de cada uma
int cCliente::ShowMenu()
{
	int i, NrOpcao;	
	
	cOpcaoMenu *pOpcao;

	cout << endl << endl ;
	for( i=1; i <= ListaOpcoes.GetNrElementos() ; i++ )
	{
		pOpcao = ListaOpcoes.Obter(i);
		cout << setw(2) << i << ". " << pOpcao->GetDescricao()  << endl;
	}

	cout << endl << endl ;
	cout << "\tEscolha opcao : ";
	cin >> NrOpcao ;
	cout << endl << endl ;
	
	return NrOpcao;
}


void cCliente::ExecOpcao( int NrOpcao )
{
	cOpcaoMenu *pOpcao;
	
	pOpcao = ListaOpcoes.Obter( NrOpcao );

	if ( pOpcao )
		if ( pOpcao->GetFuncao() )
			 (this->*(pOpcao->GetFuncao())) ();
	
	cin.ignore ();
	cin.get();
}


void cCliente::ClearScreen()
{
	int i;
	for ( i=0; i<24; i++ ) cout << endl;
}


void cCliente::Terminar()
{
	exit(0);
}
