00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "framework/gui/_palm.h"
00023
00024
00025
00026
00027
00028 #if PLATAFORMA != PALM_PALMOS_CODEWARRIOR
00029
00030 JED_GUI_CLASE_NULA(JED_PALM_INTERFACE, "JED_PALM_INTERFACE",
00031 "PALM", "palm", "(PLATAFORMA == PALM_PALMOS_*)");
00032
00033 #endif
00034
00035 #if PLATAFORMA == PALM_PALMOS_CODEWARRIOR
00036
00037 #include <stdarg.h>
00038 #include <string.h>
00039
00040
00041
00042 #define CONSTRUIR_EVENTO_MOUSE() \
00043 EVNT_EVENTO_GUI->mouse_old_x = EVNT_EVENTO_GUI->mouse_x; \
00044 EVNT_EVENTO_GUI->mouse_old_y = EVNT_EVENTO_GUI->mouse_y; \
00045 EVNT_EVENTO_GUI->mouse_x = evento->screenX; \
00046 EVNT_EVENTO_GUI->mouse_y = evento->screenY; \
00047 EVNT_EVENTO_GUI->mouse_delta_x= \
00048 evento->screenX-EVNT_EVENTO_GUI->mouse_old_x; \
00049 EVNT_EVENTO_GUI->mouse_delta_y= \
00050 evento->screenY-EVNT_EVENTO_GUI->mouse_old_y;
00051
00052 #define LINEAS_EN_CONSOLA 15
00053
00054
00055
00056 static int PALM_procesar_mouse_nulo(EVENTO_GUI *e, int context_id);
00057 static int PALM_procesar_teclado_nulo(EVENTO_GUI *e, int context_id);
00058 static Boolean PALM_procesar_eventos_nulo(EventPtr event);
00059
00060
00061
00062 static int (*PALM_keyboard_callback)(EVENTO_GUI *e, int) =
00063 PALM_procesar_teclado_nulo;
00064
00065 static int (*PALM_mouse_callback)(EVENTO_GUI *e, int context_id) =
00066 PALM_procesar_mouse_nulo;
00067
00068 static EVENTO_GUI EVENTO_palm;
00069
00070 static char *BUFFER_consola[LINEAS_EN_CONSOLA] = {
00071 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
00072 NULL, NULL, NULL, NULL, NULL
00073 };
00074
00075
00076
00077
00078
00079 static int
00080 PALM_procesar_mouse_nulo(EVENTO_GUI *e, int context_id)
00081 {
00082 return 0;
00083 }
00084 static int
00085 PALM_procesar_teclado_nulo(EVENTO_GUI *e, int context_id)
00086 {
00087 return 0;
00088 }
00089
00090 static Boolean
00091 PALM_procesar_eventos_nulo(EventPtr event)
00092 {
00093 return false;
00094 }
00095
00096 static void
00097 liberar_buffer_consola(void)
00098 {
00099 int i;
00100
00101 for ( i = 0; i < LINEAS_EN_CONSOLA; i++ ) {
00102 if ( BUFFER_consola[i] ) delete BUFFER_consola[i];
00103 }
00104 }
00105
00106 int
00107 jprintf(char *cadena_de_formato, ...)
00108 {
00109
00110 RectangleType rect;
00111
00112 rect.topLeft.x = 0;
00113 rect.topLeft.y = 0;
00114 WinGetWindowExtent(&rect.extent.x, &rect.extent.y);
00115
00116
00117 rect.extent.y -= 13;
00118
00119
00120 int margen_x = rect.topLeft.x + 5;
00121 int min_y = rect.topLeft.y + 3;
00122 int max_y = rect.topLeft.y + rect.extent.y - 5;
00123
00124
00125 char cad[256];
00126
00127 va_list lista_de_argumentos;
00128
00129 va_start(lista_de_argumentos, cadena_de_formato);
00130 StrPrintF(cad, cadena_de_formato, lista_de_argumentos);
00131
00132 strcpy(cad, cadena_de_formato);
00133
00134 va_end(lista_de_argumentos);
00135
00136
00137 static int ultima_linea = 0;
00138 int i;
00139
00140 if ( BUFFER_consola[ultima_linea] ) {
00141 delete BUFFER_consola[ultima_linea];
00142 }
00143 BUFFER_consola[ultima_linea] = new char[strlen(cad) + 1];
00144 strcpy(BUFFER_consola[ultima_linea], cad);
00145
00146 ultima_linea++;
00147 if ( ultima_linea >= LINEAS_EN_CONSOLA ) {
00148 delete BUFFER_consola[0];
00149 for ( i = 0; i < LINEAS_EN_CONSOLA-1; i++ ) {
00150 BUFFER_consola[i] = BUFFER_consola[i+1];
00151 }
00152 ultima_linea = LINEAS_EN_CONSOLA-1;
00153 BUFFER_consola[ultima_linea] = NULL;
00154 }
00155
00156
00157 int y;
00158
00159 for ( i = 0, y = min_y; i < LINEAS_EN_CONSOLA && BUFFER_consola[i];
00160 i++, y += 10 ) {
00161 if ( y > max_y - 4 ) {
00162 y = min_y;
00163 }
00164 WinDrawChars(BUFFER_consola[i], strlen(BUFFER_consola[i]),
00165 margen_x, y);
00166 }
00167
00168 return 0;
00169 }
00170
00171
00172
00173
00174
00175 JED_PALM_INTERFACE::JED_PALM_INTERFACE()
00176 {
00177 EVNT_EVENTO_GUI = &EVENTO_palm;
00178 quiero_salir = FALSE;
00179 handler = PALM_procesar_eventos_nulo;
00180 }
00181
00182 JED_PALM_INTERFACE::~JED_PALM_INTERFACE()
00183 {
00184
00185 }
00186
00187 void
00188 JED_PALM_INTERFACE::set_palm_callback(Boolean (*h)(EventPtr event))
00189 {
00190 handler = h;
00191 }
00192
00193 void
00194 JED_PALM_INTERFACE::set_mouse_callback(
00195 int (*p)(EVENTO_GUI *e, int context_id) )
00196 {
00197 PALM_mouse_callback = p;
00198 }
00199
00200 void
00201 JED_PALM_INTERFACE::set_keyboard_callback(
00202 int (*p)(EVENTO_GUI *e, int context_id) )
00203 {
00204 PALM_keyboard_callback = p;
00205 }
00206
00207 Boolean
00208 JED_PALM_INTERFACE::procesar_evento_palm(EventPtr evento)
00213 {
00214 switch ( evento->eType ) {
00215 case penUpEvent:
00216 CONSTRUIR_EVENTO_MOUSE()
00217 EVNT_EVENTO_GUI->tipo_de_evento = ETYPE_BUTTON_UP;
00218 return PALM_mouse_callback(EVNT_EVENTO_GUI, 1);
00219 case penMoveEvent:
00220 CONSTRUIR_EVENTO_MOUSE()
00221 EVNT_EVENTO_GUI->tipo_de_evento = ETYPE_MOUSE_MOVE;
00222 return PALM_mouse_callback(EVNT_EVENTO_GUI, 1);
00223 case penDownEvent:
00224 CONSTRUIR_EVENTO_MOUSE()
00225 EVNT_EVENTO_GUI->tipo_de_evento = ETYPE_BUTTON_DOWN;
00226 return PALM_mouse_callback(EVNT_EVENTO_GUI, 1);
00227 case keyDownEvent:
00228 Palm2JEDkeycode(EVNT_EVENTO_GUI, evento);
00229 return PALM_keyboard_callback(EVNT_EVENTO_GUI, 1);
00230 default:
00231 break;
00232 }
00233 return 0;
00234 }
00235
00236 void
00237 JED_PALM_INTERFACE::ejecutar(void)
00241 {
00242 EventType event;
00243 UInt16 error;
00244
00245
00246 KeySetMask(keyBitsAll);
00247
00248 do{
00249 EvtGetEvent(&event, evtWaitForever);
00250
00251 if ( !SysHandleEvent (&event) ) {
00252
00253 if ( !MenuHandleEvent(0, &event, &error) ) {
00254
00255 if ( !handler(&event) ) {
00256
00257 FrmDispatchEvent(&event);
00258 }
00259 }
00260 }
00261 } while ( event.eType != appStopEvent && !quiero_salir );
00262
00263 FrmCloseAllForms();
00264 liberar_buffer_consola();
00265 }
00266
00267 void
00268 JED_PALM_INTERFACE::finalizar(void)
00269 {
00270 quiero_salir = TRUE;
00271 }
00272
00273 BOOLEAN
00274 JED_PALM_INTERFACE::crear(int *Argc, char *argv[],
00275 int x_tam, int y_tam, char *nombre)
00276 {
00277 return TRUE;
00278 }
00279
00280 void
00281 JED_PALM_INTERFACE::solicitar_repintado(void)
00282 {
00283 ;
00284 }
00285
00286 void
00287 JED_PALM_INTERFACE::set_draw_callback( void (*p)(int) )
00288 {
00289 ;
00290 }
00291
00292 void
00293 JED_PALM_INTERFACE::set_tick_callback( int (*p)(int context_id) )
00294 {
00295 ;
00296 }
00297
00298 void
00299 JED_PALM_INTERFACE::set_ejecutor( int (*p)(int idc, int context_id) )
00300 {
00301 ;
00302 }
00303
00304 void
00305 JED_PALM_INTERFACE::set_resize_callback(
00306 void (*p)(int x_tam, int y_tam, int context_id) )
00307 {
00308 ;
00309 }
00310
00311 void
00312 JED_PALM_INTERFACE::set_multiview_callback
00313 ( void (*p)(int operacion, int id_vista, char *detalles,
00314 char *menu, char *botonera) )
00315 {
00316 ;
00317 }
00318
00319 BOOLEAN
00320 JED_PALM_INTERFACE::anexar_controles(LISTA <CONTROL_GUI *> *Controles,
00321 REPOSITORIO_DE_ENTIDADES *Repositorio)
00322 {
00323 return FALSE;
00324 }
00325
00326 #endif // PLATAFORMA == PALM_PALMOS_CODEWARRIOR
00327
00328
00329
00330
00331