#define HAUT_ELEMENT 15
int gblDessus=0;

class CPopupMenu			{
private:
public:
	char *options[100];
	int nOptions;
	int x,y,tX,tY;
	int selection, transp;
	ECRAN *ecr, ecrStd;
	OBJET *objEcr;
	int actif;

	~CPopupMenu()		{
		actif=0;
	}

	void Init(int _x, int _y)			{
		x=_x, y=_y;
		tX=100, tY=0;
		nOptions=0;
		selection=-1;
	}

	void AjElement(char *nom)			{
		options[nOptions++]=nom;
	}

	void Demarre()		{
		transp=0;
		actif=1;
		if (ecr)
			DetruitEcran(ecr);
		tY=HAUT_ELEMENT*nOptions+6;
		ecr=CreeEcran(tX,tY);
		EcranCourant(&ecrStd);
		objEcr=EcranVersObjet(ecr);
		ChoisitEcran(ecr);
		Cadre(0,0,tX,tY,RGB(255,0,254));
		ChoisitEcran(&ecrStd);
	}

	void Desactive()		{
		actif=0;
	}

	int Gere(int _x, int _y, int clic)			{
		int xx=_x-x, yy=_y-y;
		int larg, haut;

		if (!actif)
			return -1;

		haut=HAUT_ELEMENT*nOptions+5;
		larg=tX;

		if (xx>=3 && xx<=larg-3 && yy>=3 && yy<=haut)
			selection=(yy-3)/15;
		else		{
			selection=-1;
			if (clic)
				actif=0;
		}

		if (transp<256)
			transp+=16;

		if (xx>=0 && xx<=larg && yy>=0 && yy<=haut)
			gblDessus=1;

		if (clic)
			return selection;
		else
			return -1;
	}

	void Affiche()			{
		int i, larg, haut;

		if (!actif)
			return;

		haut=HAUT_ELEMENT*nOptions+6;
		larg=tX;

		ChoisitEcran(ecr);
		FxRect(0,0,larg,haut,NOIR);
		FxRect(1,1,larg-2,haut-2,BLANC);
		FxRect(0,0,larg-1,haut-1,RGB(128,128,128));
		//Ca
		FxCadre(2,2,larg-4,haut-4,RGB(192,192,192));
		//Ou ca
//		FxRect(2,2,larg-4,haut-4,RGB(192,192,192));
//		FxCadre(3,3,larg-6,haut-6,RGB(192,192,255));
		ChangeFonte("MS Sans Serif",12);
		CouleurTexte(NOIR);
		FondTexte(TRANSPARENT);
		for (i=0;i<nOptions;i++)		{
			if (selection==i)		{
				//Rectangle transluicide
				FxRect(3,3+i*HAUT_ELEMENT,larg-6,HAUT_ELEMENT,RGB(0,128,0));
				FxCadre(4,4+i*HAUT_ELEMENT,larg-8,HAUT_ELEMENT-2,RGB(192,255,192));
				//Dès que la souris passe dessus le menu, l'effet de fondu est interrompu
				transp=256;
			}
			DessTexte(5,3+i*HAUT_ELEMENT,options[i]);
		}
		ChoisitEcran(&ecrStd);
		ZoneEcran(x,y,x+tX,y+tY);
		if (transp>=256)
			FxObjet(objEcr,0,0,FX_TRANS,transp);
		else
			RedimensionneObjet(objEcr,0,0,larg*transp/256,haut*transp/256,FX_TRANS,transp);
	}

};

