/*--------------------------------------------------------------------
 * FICHERO:  MenCreOb.c
 * OBJETIVO: Definir las funciones Men_CreaObjeto(), Men_Color() y
 *           Men_Destruye()
 * AUTOR:    Pedro Reina
 * FECHA:    V.14.7.1995
 *------------------------------------------------------------------*/

/*--------------------------------------------------------------------
 * Ficheros de cabecera
 *------------------------------------------------------------------*/

#include "Menu.h"

/*--------------------------------------------------------------------
 * Definicin de funciones
 *------------------------------------------------------------------*/

/*--------------------------------------------------------------------
 * FUNCION:  Men_CreaObjeto()
 * OBJETIVO: Crear un objeto men y dar valores iniciales a sus campos
 * ENTRADAS: Ninguna
 * SALIDAS:  Un men o NIL si no se puede crear
 * EJEMPLO:  Men_CreaObjeto()
 *------------------------------------------------------------------*/
menu Men_CreaObjeto()
  {
  menu Nuevo;

  if ( Nuevo = (menu) (Mem_Crea(sizeof(Men_st))) )
    { 
    Mem_Asigna (Nuevo, 0, sizeof(Men_st)); /* Puesta a cero de todo */
    Men_Color (Nuevo, NEGRO, BLANCO, BLANCO, NEGRO, VERDE, VERDE,
                      ROJO, ROJO);
    }

  return ( Nuevo );
  }
  
/*--------------------------------------------------------------Olimpo
 * FUNCION:  Men_Color()
 * OBJETIVO: Asignar los colores que usar un men
 * ENTRADAS: El men y ocho colores con estos significados:
 *           Color 1 -> Color del papel para la zona del men
 *           Color 2 -> Color de la tinta para las opciones
 *           Color 3 -> Color del papel para la opcin resaltada
 *           Color 4 -> Color de la tinta para la opcin 
 *                      resaltada
 *           Color 5 -> Color de los caracteres que marcan el
 *                      atajo, para las opciones no resaltadas
 *           Color 6 -> Color de los caracteres que marcan el
 *                      atajo, para la opcin resaltada
 *           Color 7 -> Color de la tinta para las opciones no
 *                      disponibles
 *           Color 8 -> Color de la tinta para las flechas
 * SALIDAS:  Ninguna                                   
 * EJEMPLO:  Men_Color ( MenuPrincipal, NEGRO, BLANCO, BLANCO,
 *                       NEGRO, VERDE, VERDE, ROJO, ROJO);
 *------------------------------------------------------------------*/
void Men_Color (Menu, Color1, Color2, Color3, Color4, 
                      Color5, Color6, Color7, Color8)
menu Menu;                       
octeto Color1, Color2, Color3, Color4, Color5, Color6, Color7, Color8;
  {
  Men_PonPapel             (Menu, Color1);
  Men_PonTinta             (Menu, Color2);
  Men_PonPapelResaltado    (Menu, Color3);
  Men_PonTintaResaltado    (Menu, Color4);
  Men_PonColorCarNormal    (Menu, Color5);
  Men_PonColorCarResaltado (Menu, Color6);
  Men_PonColorNoDisponible (Menu, Color7);
  Men_PonColorFlecha       (Menu, Color8);
  }
          
/*--------------------------------------------------------------Olimpo
 * FUNCION:  Men_Destruye()
 * OBJETIVO: Destruir un objeto men, liberando su memoria
 * ENTRADAS: El men
 * SALIDAS:  Ninguna
 * EJEMPLO:  Men_Destruye ( MenuPrincipal )
 * ALGORITMO:
 *      Si el men es de tipo MEN_VECTOR
 *        Destruir toda la memoria que pueda tener reservada para
 *          manejar las opciones, incluidas las cadenas con el texto
 *          de las opciones
 *      Si es de modo MEN_HORIZONTAL, destruir la memoria usada para
 *          almacenar las columnas donde escribir las opciones
 *      Destruir la memoria del objeto men
 *------------------------------------------------------------------*/
void Men_Destruye ( Menu )
menu Menu;
  {
  contador i;
  
  if ( Men_Tipo (Menu) == MEN_VECTOR )
    {
    if ( Men_DirDisponible(Menu) )  { Mem_Destruye (Men_DirDisponible(Menu)); }
    if ( Men_DirLugar(Menu) )       { Mem_Destruye (Men_DirLugar(Menu)); }
    if ( Men_DatoOpcion(Menu) )  
      { 
      for ( i=1 ; i<=Men_Total(Menu) && Men_TextoVector(Menu,i) ; i++ )
        { Mem_Destruye (Men_TextoVector(Menu,i)); }
      Mem_Destruye (Men_DatoOpcion(Menu)); 
      }
    }

  if ( Men_Modo (Menu) == MEN_HORIZONTAL )
    {
    if ( Men_DirColumna(Menu) )  { Mem_Destruye (Men_DirColumna(Menu)); }
    }

  Mem_Destruye ( Menu );
  }  