Página principal | Jerarquía de la clase | Lista alfabética | Lista de componentes | Lista de archivos | Miembros de las clases | Archivos de los miembros | Páginas relacionadas

jed_gui.C

Ir a la documentación de este archivo.
00001 //===========================================================================
00002 //= jed_gui.cc                                              Octubre de 1998 =
00003 //=-------------------------------------------------------------------------=
00004 //= Definiciones de la interface JED_INTERFACE                              =
00005 //=-------------------------------------------------------------------------=
00006 //= ADVERTENCIA: ESTE SOFTWARE NO ESTA CONCEBIDO NI DISENNADO PARA EL USO   =
00007 //= EN EQUIPO DE CONTROL EN LINEA EN ENTORNOS PELIGROSOS QUE REQUIERAN UN   =
00008 //= DESEMPENNO LIBRE DE FALLAS, COMO LA OPERACION DE PLANTAS NUCLEARES,     = 
00009 //= SISTEMAS DE NAVEGACION O COMUNICACION EN AVIONES, TRAFICO AEREO,        =
00010 //= EQUIPO MEDICO DEL CUAL DEPENDAN VIDAS HUMANAS O SISTEMAS DE ARMAMENTO,  =
00011 //= EN LOS CUALES UNA FALLA EN EL SOFTWARE PUEDA IMPLICAR DIRECTAMENTE LA   =
00012 //= MUERTE, DANNOS PERSONALES O DANNOS FISICOS Y/O AMBIENTALES GRAVES       =
00013 //= ("ACTIVIDADES DE ALGO RIESGO").                                         =
00014 //=-------------------------------------------------------------------------=
00015 //= Autor original: Oscar J. Chavarro G.  A.K.A. JEDILINK. Copyright (c),   =
00016 //= 1997 - 2003, oscarchavarro@hotmail.com                                  =
00017 //= AQUYNZA es software libre, y se rige bajo los terminos de la licencia   =
00018 //= LGPL de GNU (http://www.gnu.org). Para mayor informacion respecto a la  =
00019 //= licencia de uso, consulte el archivo ./doc/LICENCIA en la distribucion. =
00020 //===========================================================================
00021 
00022 #include "jed_defs.h"
00023 #include <stdio.h>
00024 #include <stdlib.h>
00025 #include <string.h>
00026 
00027 #include "framework/gui/jed_gui.h"
00028 #include "toolkits/util/parsero.h"
00029 #include "lista.cc"
00030 
00031 #define ESPERO(tipo, msg) \
00032     if ( tipo_token != (tipo) ) { \
00033         fprintf(stderr,"<JED_INTERFACE> ERROR: Esperaba %s y recibi [%s].\n", \
00034           (msg), cad); fflush(stderr);  return FALSE; \
00035     }
00036 
00037 #define ESPERO_KTE(tipo, msg) \
00038     if ( tipo_token != (tipo) ) { \
00039         return; \
00040     }
00041 
00042 #define CARGAR_CADENAV(destino, origen)\
00043     if ( (destino) ) delete (destino);\
00044     des_comille((origen));\
00045     (destino) = new char[strlen((origen))+1];\
00046     if ( !(destino) ) {\
00047         fprintf(stderr, "<GUI_COMANDO>-ERROR: No hay memoria para una cadenita!");\
00048         fflush(stderr);\
00049         return;\
00050     }\
00051     strcpy((destino), (origen));
00052 
00053 //===========================================================================
00054 //= CLASE GUI_CONSTANTE_ENTERA                                                     =
00055 //===========================================================================
00056 
00057 void
00058 GUI_CONSTANTE_ENTERA::leer(TOKENIZADOR *Sabiondo)
00059 {
00060     char cad[1000];
00061     int tipo_token = TK_DESCONOCIDO;
00062 
00063     nombre = NULL;
00064     valor = 666;
00065 
00066     tipo_token = Sabiondo->siguiente_token(cad);
00067     ESPERO_KTE(TK_IDENTIFICADOR, "un identificador de constante");
00068     CARGAR_CADENAV(nombre, cad);
00069     tipo_token = Sabiondo->siguiente_token(cad);
00070     ESPERO_KTE(TK_NUMERO, "un numero");
00071     valor = atoi(cad);
00072 
00073     //printf("  - %s = %d.\n", nombre, valor);
00074 }
00075 
00076 void
00077 GUI_CONSTANTE_ENTERA::imprimir(void)
00078 {
00079    printf(" - %s = %d\n", nombre, valor);
00080 }
00081 
00082 //===========================================================================
00083 //= CLASE JED_INTERFACE                                                     =
00084 //===========================================================================
00085 
00086 JED_INTERFACE::~JED_INTERFACE()
00087 {
00088     ;
00089 }
00090 
00091 BOOLEAN
00092 JED_INTERFACE::leer_gui(char *archivo)
00093 {
00094     PARSERO preprocesador;
00095     LISTA<char *> *Bloque_de_datos;
00096     TOKENIZADOR sabiondo;
00097     char cad[1000];
00098     int status, tipo_token, i;
00099     GUI_COMANDO *Comando;
00100     GUI_CONSTANTE_ENTERA *Idc;
00101     GUI_MENU *Menu;
00102     GUI_BOTONERA *Botonera;
00103 
00104     if ( !preprocesador.init(archivo) ) return FALSE;
00105 
00106     //printf("<JED_INTERFACE> Leo la interface de \"%s\"...\n", archivo);
00107     //fflush(stdout);
00108 
00109     do {
00110         //- Llamar al preprocesador y tener en cuenta su estado -------------
00111         status = preprocesador.siguiente_segmento(&Bloque_de_datos);
00112         if ( status < 0 ) {
00113             fprintf(stderr, "<JED_INTERFACE> - ERROR DE SINTAXIS!\n");
00114             fflush(stderr);
00115             break;
00116         }
00117         if ( status == 0 ) break;
00118 
00119         //- Procesar las lineas del archivo GUI -----------------------------
00120         sabiondo.cambiar_lista(Bloque_de_datos);
00121         tipo_token = TK_DESCONOCIDO;
00122         while ( Bloque_de_datos->tam() > 0 && tipo_token != TK_FIN ) {
00123             tipo_token = sabiondo.siguiente_token(cad);
00124             switch( tipo_token ) {
00125               //- Aqui ocurre la accion! ------------------------------------
00126               case TK_IDENTIFICADOR:
00127                 if ( strcmp(cad, "COMANDO") == 0 ) {
00128                     Comando = new GUI_COMANDO();
00129                     if ( !Comando || 
00130                          !Comando->leer(&sabiondo, &lista_idcs) ) return FALSE;
00131                     //Comando->imprimir();
00132                     lista_comandos.anx(Comando);
00133                   }
00134                   else if ( strcmp(cad, "MENU") == 0 ||
00135                             strcmp(cad, "POPUP") == 0 ) {
00136                     Menu = new GUI_MENU(&lista_idcs);
00137                     if ( !Menu || !Menu->leer(&sabiondo, this) ) return FALSE;
00138                     //Menu->imprimir();
00139                     lista_menus.anx(Menu);
00140                   }
00141                   else if ( strcmp(cad, "BOTONERA") == 0 ) {
00142                     Botonera = new GUI_BOTONERA(&lista_idcs, &lista_comandos);
00143                     if ( !Botonera || !Botonera->leer(&sabiondo) ) {
00144                         return FALSE;
00145                     }
00146                     //Menu->imprimir();
00147                     lista_botoneras.anx(Botonera);
00148                   }
00149                   else if ( strcmp(cad, "#define") == 0 ) {
00150                     Idc = new GUI_CONSTANTE_ENTERA;
00151                     if ( !Idc ) return FALSE;
00152                     Idc->leer(&sabiondo);
00153                     lista_idcs.anx(Idc);
00154                   }
00155                     /*
00156                    Esto se da automaticamente por la manera en como funciona
00157                    la clase PARSERO
00158                   else if ( strcmp(cad, "#include") == 0 ) {
00159                     tipo_token = sabiondo.siguiente_token(cad);
00160                     ESPERO(TK_CADENA, "un nombre de archivo");
00161                     des_comille(cad);
00162                     leer_gui(cad);
00163                     }*/
00164                 ;
00165                 break;
00166               //-------------------------------------------------------------
00167               case TK_ERROR_SINTACTICO: return FALSE; // break; // OJO!
00168               default: case TK_DESCONOCIDO: break;
00169             }
00170         }
00171 
00172         //- Borrar la estructura temporal -----------------------------------
00173         for ( i = 0; i < Bloque_de_datos->tam(); i++ ) {
00174             delete (*Bloque_de_datos)[i];
00175         }
00176         delete Bloque_de_datos;
00177         Bloque_de_datos = NULL;        
00178     } while( status != 0 );
00179 
00180     return TRUE;
00181 }
00182 
00183 GUI_MENU *
00184 JED_INTERFACE::resolver_menu(char *llave)
00185 {
00186     int i;
00187     GUI_MENU *menu = NULL;
00188 
00189     for ( i = 0; i < lista_menus.tam(); i++ ) {
00190         if ( strcmp(llave, lista_menus[i]->nombre()) == 0 ) {
00191             menu = lista_menus[i];
00192             break;
00193         }
00194     }
00195 
00196     return menu;
00197 }
00198 
00199 GUI_BOTONERA *
00200 JED_INTERFACE::resolver_botonera(char *llave)
00201 {
00202     int i;
00203     GUI_BOTONERA *botonera = NULL;
00204 
00205     for ( i = 0; i < lista_botoneras.tam(); i++ ) {
00206         if ( strcmp(llave, lista_botoneras[i]->nombre()) == 0 ) {
00207             botonera = lista_botoneras[i];
00208             break;
00209         }
00210     }
00211 
00212     return botonera;
00213 }
00214 
00215 BOOLEAN
00216 JED_INTERFACE::leer(TOKENIZADOR *Sabiondo)
00217 {
00218     int tipo_token = TK_DESCONOCIDO, pos = 1;
00219     char cad[1000];
00220 
00221     while ( tipo_token != TK_CERRAR ) {
00222         //- Siguiente token ---------------------------------------------------
00223         tipo_token = Sabiondo->siguiente_token(cad);
00224 
00225         //- Condiciones de salida ---------------------------------------------
00226         if ( tipo_token == TK_CERRAR ) break;
00227         if ( tipo_token == TK_FIN ) {
00228             fprintf(stderr,
00229                 "<JED_INTERFACE> ERROR: Fin de archivo inesperado!\n");
00230             fflush(stderr);
00231             return FALSE;
00232         }
00233 
00234         //- Procesamiento del primer token ------------------------------------
00235         if ( pos == 1 ) {
00236             ESPERO(TK_ABRIR, "'{'"); pos ++; continue;
00237           }
00238           else {
00239             ESPERO(TK_IDENTIFICADOR, "un identificador");
00240         }
00241        
00242         //- Procesamiento del token identificador de elemento -----------------
00243         // NOTA: El procesamiento de cada parametro del elemento se realiza
00244         // dentro de cada 'if'
00245         if ( strcmp(cad, "vista") == 0 ) {
00246             tipo_token = Sabiondo->siguiente_token(cad);
00247             ESPERO(TK_CADENA, "el nombre de una vista");
00248             printf("<JED_INTERFACE> Dejo en remojo la vista %s\n", cad);
00249           }
00250         ;
00251     }
00252 
00253     return TRUE;
00254 }
00255 
00256 void
00257 JED_INTERFACE::finalizar(void)
00258 {
00259   #if PLATAFORMA != PALM_PALMOS_CODEWARRIOR
00260     printf("<JED_INTERFACE> : Finalizacion por defecto Ok.\n");
00261   #endif
00262     exit(0);
00263 }
00264 
00265 void
00266 JED_INTERFACE::desktop_size(int *x_tam, int *y_tam)
00267 {
00268 #if (PLATAFORMA != i386_WIN32_VC) && (PLATAFORMA != PALM_PALMOS_CODEWARRIOR)
00269     printf("<JED_INTERFACE> - Warning : \n"
00270        "    Resolucion desconocida, retornando 640x480.\n");
00271     fflush(stdout);
00272 #endif
00273     (*x_tam) = 640;
00274     (*y_tam) = 480;
00275 }
00276 
00277 void
00278 JED_INTERFACE::solicitar_nueva_ventana(void)
00279 {
00280 #if (PLATAFORMA != i386_WIN32_VC) && (PLATAFORMA != PALM_PALMOS_CODEWARRIOR)
00281     printf("<JED_INTERFACE> - Warning : \n"
00282        "    Solicitud de ventana no implementada, ignorada.\n");
00283     fflush(stdout);
00284 #endif
00285 }
00286 
00287 BOOLEAN
00288 JED_INTERFACE::anexar_controles(LISTA <CONTROL_GUI *> * /*Controles*/, 
00289                                 REPOSITORIO_DE_ENTIDADES * /*Repositorio*/)
00290 {
00291     fprintf(stderr, "<JED_INTERFACE> ERROR: Los controles GUI no estan\n"
00292         "    implemetados en la interface actual.  Intente Motif.\n");
00293     fflush(stderr);
00294     return FALSE;
00295 }
00296 
00297 //===========================================================================
00298 //= EOF                                                                     =
00299 //===========================================================================
00300 

Este archivo HTML ha sido generado automáticamente a partir del código fuente AQUYNZA. NO LO EDITE. Para mayor información contacte al autor.