HERM/MENUS.CPP
2021-09-12 20:06:36 +02:00

117 lines
3.5 KiB
C++

/**************************************************************************\
|* *|
|* Menus *|
|* *|
|* Descripci¢n: *|
|* M¢dulo encargado de generar menus, una vez se le pasa *|
|* el puntero a la estructura definida. *|
|* *|
|* Fecha: 21-07-96 14.34 / 18.00 *|
\**************************************************************************/
#define CONTRAIDO 0
#define DESPLEGADO 1
typedef struct menu
{
char NombreTopico[80];
char TExplicacion[80];
char NSubTopicos;
char SubTopicos[40][15];
char Explicacion[80][15];
} GENERAR_MENU;
// Archivo Gestion de: Hermanos Hermanas Listados
// | | | |
// |Configurar |Altas |Altas |Votantes
// |Mantenimiento |Bajas |Bajas |Papeletas
// | |Consultas |Consultas |Hermanos
// |Salir | | |
// 1§ byte TOPICO 2§ byte SUBTOPICO
int GeneraMenu( GENERAR_MENU *mi_menu, char Topicos )
{
int Topico=0, SubTopico=0;
char DespCont = CONTRAIDO;
char Ok = 0;
ImprimeMenuContraido( mi_menu );
do
{
while( !kbhit() );
switch ( getch() )
{
// Selecciona algo
case 27:
if ( DespCont == CONTRAIDO )
ImprimeMenuDesplegado( mi_menu[Topico] );
else
return ( ( (Topico+1) <<8)+(SubTopico+1) );
break;
// Escape
case 13:
if ( DespCont != CONTRAIDO )
ContraeMenuDesplegado();
break;
case 0:
switch( getch() )
{
// Derecha
case
if ( DespCont == CONTRAIDO )
{
Topico = (Topico++)%Topicos;
SeleccionaMenu( Topico );
} else {
ContraeMenuDesplegado();
Topico = (Topico++)%Topicos;
ImprimeMenuDesplegado( mi_menu[Topico] );
}
break;
// Izquierda
case
if ( DespCont == CONTRAIDO )
{
Topico --; if ( Topico < 0 ) Topico = Topicos-1
SeleccionaMenu( mi_menu, Topico );
} else {
ContraeMenuDesplegado();
Topico --; if ( Topico < 0 ) Topico = Topicos-1
ImprimeMenuDesplegado( mi_menu[Topico] );
}
break;
// Arriba
case
if ( DespCont != CONTRAIDO )
{
SubTopico--; if ( SubTopico < 0 ) SubTopico = NSubTopicos - 1;
SeleccionaSubTopico( mi_menu, SubTopico );
}
break;
// Abajo
case
if ( DespCont == CONTRAIDO )
ImprimeMenuDesplegado( mi_menu[Topico] );
else
{
SubTopico = ( SubTopico ++ ) % NSubTopicos;
SeleccionaSubTopico( mi_menu, SubTopico );
}
break;
}
}
}while( 1 );
return 0;
}