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

control_gui_grupo.C

Ir a la documentación de este archivo.
00001 //===========================================================================
00002 //= control_gui.C                                           Octubre de 2000 =
00003 //=-------------------------------------------------------------------------=
00004 //= Definicion del Widget orgznizaro abstracto AQUYNZA                      =
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 "framework/gui/control_gui.h"
00023 #include <stdio.h>
00024 #include <string.h>
00025 #include <stdlib.h>
00026 
00027 #ifdef MOTIF_ENABLED
00028     #include <Xm/Form.h>
00029     #include <Xm/Frame.h>
00030     #include <Xm/LabelG.h>
00031     #include <Xm/RowColumnP.h>
00032 #endif
00033 
00034 #include "lista.cc"
00035 
00036 //===========================================================================
00037 //= Contantes y macros                                                      =
00038 //===========================================================================
00039 
00040 #define ESPERO_G(tipo, msg) \
00041     if ( tipo_token != (tipo) ) { \
00042         fprintf(stderr, "<CONTROL_GUI_GRUPO> " \
00043                 "ERROR: Esperaba %s y recibi [%s].\n", \
00044           (msg), cad); fflush(stderr);  return FALSE; \
00045     }
00046 
00047 #define VERIFICAR_G(c) \
00048     if ( !(c) ) {\
00049         fprintf(stderr, \
00050             "<CONTROL_GUI_GRUPO> ERROR: No se pudo crear un objeto " \
00051                 "dinamico!\n");\
00052         fflush(stderr);\
00053         exit(1);\
00054     }
00055 
00056 //===========================================================================
00057 //= Clase CONTROL_GUI                                                       =
00058 //===========================================================================
00059 
00060 CONTROL_GUI::CONTROL_GUI(JED_INTERFACE **p)
00061 {
00062     _nombre_etiqueta = NULL;
00063     _Padre = p;
00064 }
00065 
00066 CONTROL_GUI::~CONTROL_GUI()
00067 {
00068     ;
00069 }
00070 
00071 //===========================================================================
00072 //= Clase CONTROL_GUI_GRUPO                                                 =
00073 //===========================================================================
00074 
00075 CONTROL_GUI_GRUPO::CONTROL_GUI_GRUPO(JED_INTERFACE **p) : CONTROL_GUI(p)
00076 {
00077     orientacion_vertical = TRUE;
00078     con_marco = TRUE;
00079     estilo_borde = 1;
00080 }
00081 
00082 CONTROL_GUI_GRUPO::~CONTROL_GUI_GRUPO()
00083 {
00084     ;
00085 }
00086 
00087 BOOLEAN
00088 CONTROL_GUI_GRUPO::leer(TOKENIZADOR *Sabiondo)
00089 {
00090     char cad[1000];
00091     int tipo_token = TK_DESCONOCIDO, pos;
00092     CONTROL_GUI *Hijo;
00093 
00094     //- Ejecute el parser especifico de la COSA_RIGIDA -----------------
00095     pos = 2;
00096     while ( tipo_token != TK_CERRAR) {
00097         tipo_token = Sabiondo->siguiente_token(cad);
00098         switch ( pos ) {
00099             case 2:  ESPERO_G(TK_ABRIR, "\"{\"");  pos++; break;
00100             default:
00101               if ( tipo_token == TK_CERRAR ) break;
00102               ESPERO_G(TK_IDENTIFICADOR, "un identificador (3)");
00103               if ( strcmp(cad, "etiqueta") == 0 ) {
00104                   tipo_token = Sabiondo->siguiente_token(cad);
00105                   ESPERO_G(TK_CADENA, "una cadena");
00106                   des_comille(cad);
00107                   _nombre_etiqueta = new char[strlen(cad)+3];
00108                   VERIFICAR_G(_nombre_etiqueta);
00109                   sprintf(_nombre_etiqueta, " %s ", cad);
00110                 }
00111                 else if ( strcmp(cad, "control_gui_float") == 0 ) {
00112                   Hijo = new CONTROL_GUI_FLOAT(_Padre);
00113                   VERIFICAR_G(Hijo);
00114                   if ( !Hijo->leer(Sabiondo) ) return FALSE;
00115                   lista_hijos.anx(Hijo);
00116                 }
00117                 else if ( strcmp(cad, "control_gui_grupo") == 0 ) {
00118                   Hijo = new CONTROL_GUI_GRUPO(_Padre);
00119                   VERIFICAR_G(Hijo);
00120                   if ( !Hijo->leer(Sabiondo) ) return FALSE;
00121                   lista_hijos.anx(Hijo);
00122                 }
00123                 else if ( strcmp(cad, "estilo_borde") == 0 ) {
00124                   tipo_token = Sabiondo->siguiente_token(cad);
00125                   ESPERO_G(TK_NUMERO, "un numero");
00126                   estilo_borde = atoi(cad);
00127                 }
00128                 else if ( strcmp(cad, "VERTICAL") == 0 ||
00129                           strcmp(cad, "vertical") == 0) {
00130                     orientacion_vertical = TRUE;
00131                 }
00132                 else if ( strcmp(cad, "HORIZONTAL") == 0 ||
00133                           strcmp(cad, "horizontal") == 0) {
00134                     orientacion_vertical = FALSE;
00135                 }
00136                 else if ( strcmp(cad, "CON_MARCO") == 0 ||
00137                           strcmp(cad, "con_marco") == 0) {
00138                     con_marco = TRUE;
00139                 }
00140                 else if ( strcmp(cad, "SIN_MARCO") == 0 ||
00141                           strcmp(cad, "sin_marco") == 0) {
00142                     con_marco = FALSE;
00143                 }
00144               ;
00145               break;
00146         }
00147     }
00148 
00149     return TRUE;
00150 }
00151 
00152 void
00153 CONTROL_GUI_GRUPO::actualizar(ENTIDAD * /*Entidad*/)
00154 {
00155     ;
00156 }
00157 
00158 #ifdef MOTIF_ENABLED
00159 Widget
00160 CONTROL_GUI_GRUPO::crear_motif(REPOSITORIO_DE_ENTIDADES *Repositorio,
00161                                Widget padre)
00162 {
00163     Widget rc, tio, contenedor = NULL;
00164     int margen = 5;
00165     int sep = 3;
00166     XmString motif_cad;
00167 
00168     tio = padre;
00169     if ( con_marco ) {
00170         contenedor = XtVaCreateManagedWidget("[Fr]", xmFrameWidgetClass, padre,
00171             XmNshadowType, XmSHADOW_IN, XmNshadowThickness, 1, 
00172             XmNresizeHeight, True, XmNresizeWidth, True, NULL);
00173 
00174         estilo_borde = 3;
00175 
00176         printf("<CONTROL_GUI_GRUPO::crear_motif> Creo un borde %d\n", 
00177                estilo_borde); 
00178         fflush(stdout);
00179         switch ( estilo_borde ) {
00180           case 1:
00181             XtVaSetValues(contenedor, XmNshadowType, XmSHADOW_IN, NULL);
00182             break;
00183           case 2:
00184             XtVaSetValues(contenedor, XmNshadowType, XmSHADOW_OUT, NULL);
00185             break;
00186           case 3:
00187             XtVaSetValues(contenedor, XmNshadowType, XmSHADOW_ETCHED_IN, NULL);
00188             break;
00189           case 0: default:
00190             XtVaSetValues(contenedor, XmNshadowType, XmSHADOW_ETCHED_OUT,NULL);
00191             break;
00192         }
00193 
00194         if ( _nombre_etiqueta ) {
00195             motif_cad = XmStringCreateLocalized(_nombre_etiqueta);
00196             XtVaCreateManagedWidget("[FrLabel]", xmLabelGadgetClass, 
00197                 contenedor, XmNchildType, XmFRAME_TITLE_CHILD,
00198                 XmNchildVerticalAlignment, XmALIGNMENT_CENTER,
00199                 XmNchildHorizontalAlignment, XmALIGNMENT_BEGINNING,
00200                 XmNlabelString,  motif_cad,
00201                 NULL);
00202             XmStringFree(motif_cad);
00203         }
00204 
00205         tio = contenedor;
00206     }
00207 
00208     if ( orientacion_vertical ) {
00209         rc = XtVaCreateManagedWidget("[RC]", xmRowColumnWidgetClass, tio, 
00210             XmNmarginHeight, margen, XmNmarginWidth, margen, XmNspacing, sep,
00211             XmNpacking, XmPACK_TIGHT, XmNorientation, XmVERTICAL,
00212             XmNresizeHeight, True, XmNresizeWidth, True, 
00213             NULL);
00214       }
00215       else {
00216         rc = XtVaCreateManagedWidget("[RC]", xmRowColumnWidgetClass, tio, 
00217             XmNmarginHeight, margen, XmNmarginWidth, margen, XmNspacing, sep,
00218             XmNpacking, XmPACK_TIGHT, XmNorientation, XmHORIZONTAL,
00219             XmNresizeHeight, True, XmNresizeWidth, True, 
00220             NULL);
00221     }
00222     if ( !con_marco ) contenedor = rc;
00223 
00224     //-----------------------------------------------------------------------
00225     int i;
00226     Dimension xt, yt, xs = 0, ys = 0;
00227     Widget h;
00228 
00229     for ( i = 0; i < lista_hijos.tam(); i++ ) {
00230         h = lista_hijos[i]->crear_motif(Repositorio, rc);
00231         XtVaGetValues(h, XmNwidth,&xt, XmNheight,&yt, NULL);
00232         if ( orientacion_vertical ) {
00233             if ( xt > xs ) xs = xt;
00234             ys += (yt * 5) / 4;
00235           }
00236           else {
00237             if ( yt > ys ) ys = yt;
00238             xs += (xt * 5) / 4;
00239         }
00240     }
00241 
00242     if ( orientacion_vertical ) {
00243         ys += sep * (lista_hijos.tam()-1);
00244       }
00245       else {
00246         xs += sep * (lista_hijos.tam()-1);
00247     }
00248 
00249     XtResizeWidget(rc, xs + 2*margen, ys+2*margen, 0 /*NULL*/);
00250     XtManageChild(rc);
00251 
00252     if ( con_marco ) {
00253         XtResizeWidget(contenedor, xs + 4*margen, ys+3*margen, 0 /*NULL*/);
00254         XtManageChild(contenedor);
00255     }
00256 
00257     //-----------------------------------------------------------------------
00258     return contenedor;
00259 }
00260 #endif // MOTIF_ENABLED
00261 
00262 #ifdef WXWINDOWS_ENABLED
00263 void
00264 CONTROL_GUI_GRUPO::crear_wxwindows(REPOSITORIO_DE_ENTIDADES *Repositorio,
00265                            wxPanel *padre)
00266 {
00267     //-----------------------------------------------------------------------
00268     wxStaticBox *marco;
00269     wxSizer *ordenador_marco;
00270     wxPanel *papito = padre;
00271 
00272     if ( con_marco ) {
00273         if ( _nombre_etiqueta ) {
00274             marco = new wxStaticBox(padre, -1, wxString(_nombre_etiqueta));
00275           }
00276           else {
00277             marco = new wxStaticBox(padre, -1, wxString(""));
00278         }
00279         papito = new wxPanel(padre);
00280         ordenador_marco = new wxStaticBoxSizer(marco, wxVERTICAL);
00281         ordenador_marco->Add(papito, 1, wxGROW, 1);
00282         ordenador_marco->Fit(padre);
00283     }
00284 
00285     //-----------------------------------------------------------------------
00286     wxPanel *contenido;
00287     wxSizer *ordenador_contenido;
00288     int i;
00289 
00290     if ( orientacion_vertical ) {
00291         ordenador_contenido = new wxBoxSizer(wxVERTICAL);
00292       }
00293       else {
00294         ordenador_contenido = new wxBoxSizer(wxHORIZONTAL);
00295     }
00296     for ( i = 0; i < lista_hijos.tam(); i++ ) {
00297         contenido = new wxPanel(papito);
00298         lista_hijos[i]->crear_wxwindows(Repositorio, contenido);
00299         ordenador_contenido->Add(contenido, 1, wxGROW | wxALL, 1);
00300     }
00301     ordenador_contenido->Fit(papito);
00302 
00303     //-----------------------------------------------------------------------
00304     if ( con_marco ) {
00305         papito->SetSizer(ordenador_contenido);
00306         padre->SetSizer(ordenador_marco);
00307       }
00308       else {
00309         padre->SetSizer(ordenador_contenido);
00310     }
00311 }
00312 #endif // WXWINDOWS_ENABLED
00313 
00314 //===========================================================================
00315 //= EOF                                                                     =
00316 //===========================================================================
00317 

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.