\input texinfo @documentlanguage es @setfilename jinete-es.info @settitle Jinete Manual @setchapternewpage odd @paragraphindent 0 @setchapternewpage off @ifinfo @dircategory Libraries @direntry * Jinete: (jinete). A GUI library @end direntry This is the Info version of the Jinete manual By David A. Capello @end ifinfo @node Top, , (dir), (dir) @titlepage @example Jinete 0.4 A GUI library. By David A. Capello, 2005. @end example #include "No me responsabilizo de ningún efecto, adverso u otro que este código pueda tener sobre usted, su ordenador, su salud, su perro, o cualquier otra cosa que pueda imaginar. Uselo bajo su propia responsabilidad." @end titlepage @ifinfo @example Jinete 0.4 A GUI library. By David A. Capello, 2005. @end example #include "No me responsabilizo de ningún efecto, adverso u otro que este código pueda tener sobre usted, su ordenador, su salud, su perro, o cualquier otra cosa que pueda imaginar. Uselo bajo su propia responsabilidad." @end ifinfo @menu * Introducción:: Introducción * Copyright:: Copyright * Funcionamiento:: Funcionamiento General * Rutinas:: Rutinas Básicas * Widget:: Widget * JHook:: JHook (gancho) * Message:: Message (mensaje) * Signal:: Signal (señales) * Manager:: Manager (gestor) * Window:: Window (ventana) * Box:: Box (caja) * Label:: Label (etiqueta) * Button:: Button (botón) * Check:: Check (caja de comprobación) * Theme:: Theme (tema) * Archivos:: Archivos JID * Font:: Font (fuente) * JList:: JList - Listas Enlazadas * JRect:: JRect - Rectángulos * JRegion:: JRegion - Regiones * Funciones:: Funciones Internas * Actualizaciones:: Actualizaciones * Agradecimientos:: Agradecimientos * Índice:: Índice @end menu @node Introducción, Copyright, , Top @chapter Introducción Jinete es una librería que proporciona un Interfaz Gráfico de Usuario (GUI por sus siglas en inglés), sencilla y rápida tanto de usar, como de programar y diseñar diálogos. Conjuntamente con la librería Allegro, se encarga de controlar los eventos que produce el usuario a través del ratón (mouse) y el teclado. @node Copyright, Funcionamiento, Introducción, Top @chapter Copyright Jinete es gift-ware (software-regalo). Puede usar, modificar, redistribuir, y generalmente modificarlo de cualquier forma que desee, y no debe darme nada a cambio. Si redistribuye partes de este código o hace una aplicación con él, sería bonito que mencionase Jinete en alguna parte de los créditos, pero no está obligado a hacerlo. @node Funcionamiento, Rutinas, Copyright, Top @chapter Funcionamiento General El GUI se maneja a través de widgets (controles u objetos gráficos). Cada widget puede contener varios widgets hijos, donde cada uno de éstos tiene un puntero a su único padre; siendo el padre raíz de todos los widgets: el manager (gestor) principal del GUI (el cual también es un widget). Jinete es controlado con el manager principal, el cual es creado por primera y única vez a través de la primer llamada de jmanager_new, y deberá ser eliminado mediante jmanager_free. Los managers sólo pueden contener ventanas dentro, mientras que las ventanas pueden contener todo tipo de widgets, inclusive otros managers alternativos (o sub-managers) los cuales a su vez pueden contener otras ventanas (con Jinete puede lograr algo así como la MDI de Windows). El manager principal controla los mensajes y los despacha a los demás widgets. Cabe destacar que todo mensaje enviado a través de jmanager_send_message no es procesado de inmediato, dicho mensaje solo se guardará en una cola para luego ser despachado (si espera una respuesta inmediata, vea jmanager_dispatch_messages o jwidget_send_message). @itemize @bullet @item Foco de entrada (jmanager_get_focus):@* Es un puntero a un widget que indica que será el encargado de recibir la entrada del teclado. Por lo menos, será el primero en tener la oportunidad de procesarla, si él no la utiliza, se enviará el mensaje a otros widgets. El foco de entrada se mueve con la tecla TAB. @item Widget con el mouse (jmanager_get_mouse):@* Un puntero al widget que tiene el mouse encima. @item Widget con el mouse capturado (jmanager_get_capture):@* Un puntero al widget que capturó el mouse. Generalmente cuando se le hace click encima de un widget, éste captura el mouse para que siga recibiendo la entrada del mouse hasta que el usuario suelte el botón. @end itemize See also:@* @xref{jmanager_new}.@* @xref{ji_manager_free}.@* @xref{jmanager_send_message}.@* @xref{ji_manager_dispatch_messages}.@* @node Rutinas, Widget, Funcionamiento, Top @chapter Rutinas Básicas @menu * jmalloc:: * jnew:: @end menu @node jmalloc, jnew, , Rutinas @section jmalloc @ftable @asis @item @t{void *jmalloc (unsigned long n_bytes);} @end ftable @ftable @asis @item @t{void *jmalloc0 (unsigned long n_bytes);} @end ftable @ftable @asis @item @t{void *jrealloc (void *mem, unsigned long n_bytes);} @end ftable @ftable @asis @item @t{void jfree (void *mem);} Equivalentes a malloc, calloc, realloc, y free respectivamente. @end ftable @node jnew, ji_register_widget_type, jmalloc, Rutinas @section jnew @ftable @asis @item @t{#define jnew(struct_type, n_structs)} @end ftable @ftable @asis @item @t{#define jnew0(struct_type, n_structs)} @end ftable @ftable @asis @item @t{#define jrenew(struct_type, mem, n_structs)} Equivalente a usar: @example struct_type *mem1 = malloc (sizeof (struct_type) * n_structs). @end example @end ftable @node Widget, JHook, Rutinas, Top @chapter Widget Los widgets son los componentes, objetos o controles del interfaz gráfico; un botón, o una ventana son ejemplos de widgets. En Jinete, el tipo JWidget representa dicho controles: @example typedef struct jwidget *JWidget; @end example Es decir que JWidget en realidad se trata de un puntero a una estructura jwidget definida en el archivo "jinete/widget.h". En general, la gran mayoría de los tipos en Jinete (definidos en "jinete/base.h") se tratan de punteros a estructuras definidas en cada uno de los archivos de cabecera particulares. Para modificar el comportamiento de un widget, se deben agregar ganchos ("hooks", JHook en Jinete), los cuales se encargan de interceptar mensajes. Los campos de la estructura jwidget son: @itemize @bullet @item JID id;@* Código de identificación. Es un número con el cual puede identificar a un widget (por lo menos mientras éste exista). Al liberar el widget (con jwidget_free), su ID quedará disponible para un próximo widget que se cree (mediante jwidget_new). @item int type;@* Tipo de widget. Puede ser JI_WIDGET para indicar un tipo de widget anónimo, o puede ser JI_BUTTON si se creó desde jbutton_new, o JI_WINDOW si se utilizó jwindow_new, etc. Es el valor que se le pasa a la función jwidget_new (puede tratarse de un valor devuelto por ji_register_widget_type). @item char *name; Nombre del widget (generalmente NULL si no es que es un widget cargado desde un archivo .jid). Es útil para buscar el widget desde su padre utilizando la rutina jwidget_find_name. @item JRect pos;@* Ubicación del widget: esquina superior-izquierda (x, y) y tamaño (w, h). Es una posición ABSOLUTA en la pantalla, NO ES UNA POSICIÓN RELATIVA. @item struct @{ int l, t, r, b; @} border_width;@* Tamaño de los bordes izquierdo, superior, derecho e inferior (left, top, right, bottom). @item int child_spacing;@* Separación entre los hijos del widget. @item int flags;@* Banderas o propiedades del widget. @item int emit_signals;@* Contador que indica si el widget debe o no generar señales (si emit_signals es igual a 0, las señales se emiten). @item int static_w, static_h;@* Tamaño estático del widget por defecto (si es que no se intercepta el mensaje JM_REQSIZE, se utilizará este tamaño como el tamaño necesario por el widget). @item JList children;@* Lista de widgets hijos. Son los controles que están contenidos en este widget. La función jwidget_add_child sirve para agregar hijos dentro de un widget. @item JTheme theme;@* Tema o estilo que utiliza el widget (inicializándolo al tema por defecto a través de la función ji_get_theme). @item JWidget parent;@* Puntero al widget padre. @item JList hooks;@* Lista de ganchos (JHook). @item JDrawWidget draw_method;@* Función encargada de dibujar el widget, al inicializar un widget, se intenta extraer desde el tema activo (ji_get_theme) un método correspondiente para este tipo de widget (widget->draw_type). Si el mensaje JM_DRAW no es interceptado, esta rutina será utilizada para dibujar el widget. @item int align;@* Alineamiento u orientación del widget (generalmente alineación del texto). @item int text_size;@* char *text;@* Texto del widget. @item FONT *text_font;@* Tipo de fuente para dibujar texto (este campo es inicializado con el valor "ji_get_theme ()->default_font"). @item int bg_color;@* Color de fondo del widget (si es -1, se utiliza el del padre, y así sucesivamente). @item BITMAP *icon;@* Ícono del widget (XXX). @item int icon_align;@* Alineamiento del ícono (XXX). @item void *theme_data[4];@* Datos para el tema. @item void *user_data[4];@* Datos para el usuario. @end itemize @menu * ji_register_widget_type:: * jwidget_new:: * jwidget_free:: * jwidget_init_theme:: * jwidget_add_hook:: * jwidget_get_hook:: * jwidget_get_data:: * jwidget_get_type:: * jwidget_get_name:: * jwidget_get_text:: * jwidget_get_align:: * jwidget_get_font:: * jwidget_set_name:: * jwidget_set_text:: * jwidget_set_align:: * jwidget_set_font:: * jwidget_magnetic:: * jwidget_expansive:: * jwidget_decorative:: * jwidget_autodestroy:: * jwidget_focusrest:: * jwidget_is_magnetic:: * jwidget_is_focusrest:: * jwidget_dirty:: * jwidget_show:: * jwidget_enable:: * jwidget_select:: * jwidget_is_visible:: * jwidget_is_enabled:: * jwidget_is_selected:: * jwidget_has_focus:: * jwidget_add_child:: * jwidget_add_childs:: * jwidget_remove_child:: * jwidget_replace_child:: * jwidget_get_parent:: * jwidget_get_window:: * jwidget_get_parents:: * jwidget_get_children:: * jwidget_pick:: * jwidget_has_child:: * jwidget_request_size:: * jwidget_get_position:: * jwidget_get_child_position:: * jwidget_get_region:: * jwidget_get_drawable_region:: * jwidget_get_bg_color:: * jwidget_get_theme:: * jwidget_get_text_length:: * jwidget_get_texticon_info:: * jwidget_noborders:: * jwidget_set_border:: * jwidget_set_position:: * jwidget_set_static_size:: * jwidget_set_bg_color:: * jwidget_set_theme:: * jwidget_flush_redraw:: * jwidget_redraw_region:: * jwidget_signal_on:: * jwidget_emit_signal:: * jwidget_send_message:: * jwidget_send_message_after_type:: * jwidget_close_window:: * jwidget_capture_mouse:: * jwidget_release_mouse:: * jwidget_find_name:: * jwidget_check_underscored:: * Widget's flags:: @end menu @node ji_register_widget_type, jwidget_new, jnew, Widget @section ji_register_widget_type @ftable @asis @item @t{int ji_register_widget_type (void);} Retorna un número entero positivo para identificar un nuevo tipo de widget. Debería utilizarlo sólo si necesita conocer en alguna parte de su código que un determinado widget es del tipo que debería ser. Retornará valores continuos a JI_USER_WIDGET. @end ftable @node jwidget_new, jwidget_free, ji_register_widget_type, Widget @section jwidget_new @ftable @asis @item @t{JWidget jwidget_new (int type);} Crea un nuevo "widget" de tipo "type" listo para ser utilizado. @end ftable See also:@* @xref{jwidget_free}.@* @node jwidget_free, jwidget_init_theme, jwidget_new, Widget @section jwidget_free @ftable @asis @item @t{void jwidget_free (JWidget widget);} Libera el "widget", dejando su espacio disponible para próximos controles que así lo necesiten. Note que esta función no libera memoria, solo deja su espacio disponible para que otro posible futuro widget lo utilice. Sólo la función _ji_free_all_widgets libera toda la memoria ocupada por todos los widgets. Dicha función es llamada al borrar el primer "manager" creado. Los widgets hijos también son eliminados (recursivamente). El campo "widget->specific_data" también es eliminado (mediante jfree). Envía el mensaje JM_DESTROY al widget inmediatamente. @end ftable See also:@* @xref{jwidget_new}.@* @xref{_ji_free_all_widgets}.@* @xref{Manager}.@* @xref{JM_DESTROY}.@* @node jwidget_init_theme, jwidget_add_hook, jwidget_free, Widget @section jwidget_init_theme @ftable @asis @item @t{void jwidget_init_theme (JWidget widget);} Inicializa el widget a su tema (estilo) correspondiente haciendo uso de la función init_widget de la estructura jtheme. @end ftable @node jwidget_add_hook, jwidget_get_hook, jwidget_init_theme, Widget @section jwidget_add_hook @ftable @asis @item @t{void jwidget_add_hook (JWidget widget, int type, JMessageFunc msg_proc, void *data);} Crea un nuevo gancho (hook) para interceptar mensajes. Cada gancho tiene un tipo ("type"), que puede ser anónimo (JI_WIDGET) o puede ser de un tipo personalizado (algún tipo devuelto mediante ji_register_widget_type). Este tipo luego es utilizado para obtener los datos "data". El "msg_proc" es un puntero a una función encargada de recibir cada mensaje y procesarlo. Esta función debe retornar FALSE si no utiliza un determinado mensaje y/o quiere dejarle el paso a un posible "msg_proc" padre que se encuentre en el widget. @end ftable See also:@* @xref{ji_register_widget_type}.@* @xref{jwidget_get_hook}.@* @xref{jwidget_get_data}.@* @node jwidget_get_hook, jwidget_get_data, jwidget_add_hook, Widget @section jwidget_get_hook @ftable @asis @item @t{JHook jwidget_get_hook (JWidget widget, int type);} @end ftable @node jwidget_get_data, jwidget_get_type, jwidget_get_hook, Widget @section jwidget_get_data @ftable @asis @item @t{void *jwidget_get_data (JWidget widget, int type);} @end ftable @node jwidget_get_type, jwidget_get_name, jwidget_get_data, Widget @section jwidget_get_type @ftable @asis @item @t{int jwidget_get_type (JWidget widget);} Devuelve el tipo de widget que es "widget". Puede ser igual a JI_WIDGET si se trata de un tipo anónimo de widget, o alguno de los widgets estándares (como JI_BOX, JI_BUTTON, JI_WINDOW, etc.), o finalmente debería tratarse de algún tipo creado por el usuario mediante ji_register_widget_type (). @end ftable See also:@* @xref{ji_register_widget_type}.@* @node jwidget_get_name, jwidget_get_text, jwidget_get_type, Widget @section jwidget_get_name @ftable @asis @item @t{const char *jwidget_get_name (JWidget widget);} Obtiene el nombre del widget. Generalmente los widgets nunca tendrán nombre al menos que sean cargados desde un archivo .jid. @end ftable See also:@* @xref{jwidget_set_name}.@* @xref{ji_load_widget}.@* @xref{Archivos, Archivos JID}.@* @node jwidget_get_text, jwidget_get_align, jwidget_get_name, Widget @section jwidget_get_text @ftable @asis @item @t{const char *jwidget_get_text (JWidget widget);} Retorna un puntero al texto actual del widget, el cual puede ser tanto una etiqueta que lleve un botón, el título de una ventana, etc. No utilice el puntero si es que lo consiguió antes de una llamada a jwidget_set_text. EVITE SIEMPRE hacer esto: @example const char *text = jwidget_get_text (widget); jwidget_set_text (widget, "Hola"); printf (text); @end example @end ftable See also:@* @xref{jwidget_set_text}.@* @node jwidget_get_align, jwidget_get_font, jwidget_get_text, Widget @section jwidget_get_align @ftable @asis @item @t{int jwidget_get_align (JWidget widget);} Devuelve el alineamiento del widget (widget->align). @end ftable See also:@* @xref{jwidget_set_align}.@* @node jwidget_get_font, jwidget_set_name, jwidget_get_align, Widget @section jwidget_get_font @ftable @asis @item @t{FONT *jwidget_get_font (JWidget widget);} @end ftable @node jwidget_set_name, jwidget_set_text, jwidget_get_font, Widget @section jwidget_set_name @ftable @asis @item @t{void jwidget_set_name (JWidget widget, const char *name);} Cambia el nombre del widget, generalmente útil si piensa luego usar jwidget_find_name desde otra función o gancho. @end ftable See also:@* @xref{jwidget_find_name}.@* @node jwidget_set_text, jwidget_set_align, jwidget_set_name, Widget @section jwidget_set_text @ftable @asis @item @t{void jwidget_set_text (JWidget widget, const char *text);} Cambia el texto del widget. Está función también se encarga de ensuciar el widget mediante jwidget_dirty. @end ftable See also:@* @xref{jwidget_get_text}.@* @xref{jwidget_dirty}.@* @node jwidget_set_align, jwidget_set_font, jwidget_set_text, Widget @section jwidget_set_align @ftable @asis @item @t{void jwidget_set_align (JWidget widget, int align);} Cambia el alineamiento del widget (widget->align = align). @end ftable See also:@* @xref{jwidget_get_align}.@* @node jwidget_set_font, jwidget_magnetic, jwidget_set_align, Widget @section jwidget_set_font @ftable @asis @item @t{void jwidget_set_font (JWidget widget, FONT *font);} @end ftable @node jwidget_magnetic, jwidget_expansive, jwidget_set_font, Widget @section jwidget_magnetic @ftable @asis @item @t{void jwidget_magnetic (JWidget widget, bool state);} Cambia el estado de magnetismo del widget. Un widget magnética es la que obtiene el foco de entrada por defecto. Generalmente los botones de "Aceptar" o "Continuar" suelen tener esta propiedad, teniendo la posibilidad de capturar la tecla y utilizarla para suponer que se quiso presionar dicho botón (sin necesidad de poseer el foco de entrada). @end ftable See also:@* @xref{jwidget_is_magnetic}.@* @xref{jmanager_attract_focus}.@* @node jwidget_expansive, jwidget_decorative, jwidget_magnetic, Widget @section jwidget_expansive @ftable @asis @item @t{void jwidget_expansive (JWidget widget, bool state);} Cambia el estado de expansión del widget. Un widget expansivo es el que acapara mayor espacio en el widget padre. Útil únicamente cuando el widget padre es una caja (box). @end ftable See also:@* @xref{jwidget_is_magnetic, jwidget_is_expansive}.@* @xref{jbox_new}.@* @node jwidget_decorative, jwidget_autodestroy, jwidget_expansive, Widget @section jwidget_decorative @ftable @asis @item @t{void jwidget_decorative (JWidget widget, bool state);} Cambia el estado de decoración del widget. Un widget decorativo es un objeto especial el cual sirve para decorar las ventanas. Sólo los temas deberían utilizar esta función, ya que es útil para agregar un botón que cierre la ventana, o para minimizarla, o para maximizarla/restaurarla, etc. @end ftable See also:@* @xref{jwidget_is_magnetic, jwidget_is_decorative}.@* @xref{Window, Window (ventana)}.@* @xref{Theme, Theme (tema)}.@* @node jwidget_autodestroy, jwidget_focusrest, jwidget_decorative, Widget @section jwidget_autodestroy @ftable @asis @item @t{void jwidget_autodestroy (JWidget widget, bool state);} @end ftable @node jwidget_focusrest, jwidget_is_magnetic, jwidget_autodestroy, Widget @section jwidget_focusrest @ftable @asis @item @t{void jwidget_focusrest (JWidget widget, bool state);} @end ftable @node jwidget_is_magnetic, jwidget_is_focusrest, jwidget_focusrest, Widget @section jwidget_is_magnetic @ftable @asis @item @t{bool jwidget_is_magnetic (JWidget widget);} @end ftable @ftable @asis @item @t{bool jwidget_is_expansive (JWidget widget);} @end ftable @ftable @asis @item @t{bool jwidget_is_decorative (JWidget widget);} @end ftable @ftable @asis @item @t{bool jwidget_is_autodestroy (JWidget widget);} Devuelve TRUE si el widget es lo que preguntamos que sea (magnética, expansiva, decorativa, o autodestructiva). @end ftable See also:@* @xref{jwidget_magnetic}.@* @xref{jwidget_expansive}.@* @xref{jwidget_decorative}.@* @xref{jwidget_autodestroy}.@* @node jwidget_is_focusrest, jwidget_dirty, jwidget_is_magnetic, Widget @section jwidget_is_focusrest @ftable @asis @item @t{bool jwidget_is_focusrest (JWidget widget);} @end ftable See also:@* @xref{jwidget_focusrest}.@* @node jwidget_dirty, jwidget_show, jwidget_is_focusrest, Widget @section jwidget_dirty @ftable @asis @item @t{void jwidget_dirty (JWidget widget);} Ensucia el widget para que sea redibujado en una próxima llamada a jmanager_poll. Sólo colocará una bandera que le dirá al manager que genere los mensajes necesarios para dibujar las partes visibles del widget. Emite la señal JM_DIRTY. Si desea redibujar un widget de forma instantánea: @example jwidget_dirty (widget); jwidget_flush_redraw (widget); jmanager_dispatch_draw_messages (); @end example Tenga en cuenta, que muchas funciones que cambian el estado del widget, suelen llamar a jwidget_dirty para redibujar el widget con su nuevo estado. @end ftable See also:@* @xref{jmanager_poll}.@* @xref{JI_SIGNAL_DIRTY}.@* @node jwidget_show, jwidget_enable, jwidget_dirty, Widget @section jwidget_show @ftable @asis @item @t{void jwidget_show (JWidget widget);} @end ftable @ftable @asis @item @t{void jwidget_hide (JWidget widget);} @end ftable @node jwidget_enable, jwidget_select, jwidget_show, Widget @section jwidget_enable @ftable @asis @item @t{void jwidget_enable (JWidget widget);} @end ftable @ftable @asis @item @t{void jwidget_disable (JWidget widget);} @end ftable @node jwidget_select, jwidget_is_visible, jwidget_enable, Widget @section jwidget_select @ftable @asis @item @t{void jwidget_select (JWidget widget);} @end ftable @ftable @asis @item @t{void jwidget_deselect (JWidget widget);} @end ftable @node jwidget_is_visible, jwidget_is_enabled, jwidget_select, Widget @section jwidget_is_visible @ftable @asis @item @t{bool jwidget_is_visible (JWidget widget);} @end ftable @ftable @asis @item @t{bool jwidget_is_hidden (JWidget widget);} @end ftable @node jwidget_is_enabled, jwidget_is_selected, jwidget_is_visible, Widget @section jwidget_is_enabled @ftable @asis @item @t{bool jwidget_is_enabled (JWidget widget);} @end ftable @ftable @asis @item @t{bool jwidget_is_disabled (JWidget widget);} @end ftable @node jwidget_is_selected, jwidget_has_focus, jwidget_is_enabled, Widget @section jwidget_is_selected @ftable @asis @item @t{bool jwidget_is_selected (JWidget widget);} @end ftable @ftable @asis @item @t{bool jwidget_is_deselected (JWidget widget);} @end ftable @node jwidget_has_focus, jwidget_add_child, jwidget_is_selected, Widget @section jwidget_has_focus @ftable @asis @item @t{bool jwidget_has_focus (JWidget widget);} @end ftable @ftable @asis @item @t{bool jwidget_has_mouse (JWidget widget);} @end ftable @ftable @asis @item @t{bool jwidget_has_capture (JWidget widget);} @end ftable @node jwidget_add_child, jwidget_add_childs, jwidget_has_focus, Widget @section jwidget_add_child @ftable @asis @item @t{void jwidget_add_child (JWidget widget, JWidget child);} Agrega un nuevo widget hijo "child" dentro del widget padre "widget". Emite la señal JI_SIGNAL_NEW_PARENT para "child", y JI_SIGNAL_ADD_CHILD para "widget". @end ftable See also:@* @xref{jwidget_remove_child}.@* @xref{jwidget_replace_child}.@* @xref{JI_SIGNAL_NEW_PARENT}.@* @xref{JI_SIGNAL_ADD_CHILD}.@* @node jwidget_add_childs, jwidget_remove_child, jwidget_add_child, Widget @section jwidget_add_childs @ftable @asis @item @t{void jwidget_add_childs (JWidget widget, ...);} @end ftable See also:@* @xref{jwidget_add_child}.@* @node jwidget_remove_child, jwidget_replace_child, jwidget_add_childs, Widget @section jwidget_remove_child @ftable @asis @item @t{void jwidget_remove_child (JWidget widget, JWidget child);} @end ftable See also:@* @xref{jwidget_add_child}.@* @xref{jwidget_replace_child}.@* @node jwidget_replace_child, jwidget_get_parent, jwidget_remove_child, Widget @section jwidget_replace_child @ftable @asis @item @t{void jwidget_replace_child (JWidget widget, JWidget old, JWidget new);} @end ftable See also:@* @xref{jwidget_add_child}.@* @xref{jwidget_remove_child}.@* @node jwidget_get_parent, jwidget_get_window, jwidget_replace_child, Widget @section jwidget_get_parent @ftable @asis @item @t{JWidget jwidget_get_parent (JWidget widget);} Devuelve un puntero al widget padre. Es equivalente a utilizar widget->parent directamente. @end ftable See also:@* @xref{jwidget_get_parents}.@* @node jwidget_get_window, jwidget_get_parents, jwidget_get_parent, Widget @section jwidget_get_window @ftable @asis @item @t{JWidget jwidget_get_window (JWidget widget);} Recorre los padres del widget hasta encontrar la ventana a la que pertenece, devolviendo dicho puntero o NULL si es que no se pudo encontrar una ventana padre. @end ftable See also:@* @xref{jwindow_get_manager}.@* @node jwidget_get_parents, jwidget_get_children, jwidget_get_window, Widget @section jwidget_get_parents @ftable @asis @item @t{JList jwidget_get_parents (JWidget widget, bool ascendant);} Retornar una list de los padres de "widget". Si "ascendant" es TRUE retorna desde el widget hasta el padre. Si "ascendant" es FALSE retorna desde el padre hasta "widget". Deberá liberar la lista devuelta mediante jlist_free. @end ftable See also:@* @xref{jwidget_get_parent}.@* @xref{jlist_free}.@* @node jwidget_get_children, jwidget_pick, jwidget_get_parents, Widget @section jwidget_get_children @ftable @asis @item @t{JList jwidget_get_children (JWidget widget);} Deberá liberar la lista devuelta mediante jlist_free. @end ftable @node jwidget_pick, jwidget_has_child, jwidget_get_children, Widget @section jwidget_pick @ftable @asis @item @t{JWidget jwidget_pick (JWidget widget, int x, int y);} Busca un widget dentro de "widget" que se encuentre en la posición (x, y), partiendo desde el "widget", pasando por todos sus hijos. Devolverá el widget más lejano de "widget" (el hijo más profundo) si es que éste se abarca el punto (x, y). @end ftable @node jwidget_has_child, jwidget_request_size, jwidget_pick, Widget @section jwidget_has_child @ftable @asis @item @t{bool jwidget_has_child (JWidget widget, JWidget child);} Devuelve TRUE si el "widget" posee dentro el widget hijo "child". Está función sólo mira por los hijos de "widget", nunca baja a los hijos de sus hijos. @end ftable @node jwidget_request_size, jwidget_get_position, jwidget_has_child, Widget @section jwidget_request_size @ftable @asis @item @t{void jwidget_request_size (JWidget widget, int *w, int *h);} @end ftable @node jwidget_get_position, jwidget_get_child_position, jwidget_request_size, Widget @section jwidget_get_position @ftable @asis @item @t{JRect jwidget_get_position (JWidget widget);} Retorna la posición del widget. El rectángulo devuelto JRect deberá ser liberado mediante jrect_free. @end ftable See also:@* @xref{jwidget_get_region}.@* @xref{jrect_free}.@* @node jwidget_get_child_position, jwidget_get_region, jwidget_get_position, Widget @section jwidget_get_child_position @ftable @asis @item @t{JRect jwidget_get_child_position (JWidget widget);} @end ftable @node jwidget_get_region, jwidget_get_drawable_region, jwidget_get_child_position, Widget @section jwidget_get_region @ftable @asis @item @t{JRegion jwidget_get_region (JWidget widget);} Deberá liberar la región devuelta mediante jregion_free. @end ftable See also:@* @xref{jwidget_get_position}.@* @xref{jwidget_get_drawable_region}.@* @xref{jregion_free}.@* @node jwidget_get_drawable_region, jwidget_get_bg_color, jwidget_get_region, Widget @section jwidget_get_drawable_region @ftable @asis @item @t{JRegion jwidget_get_drawable_region (JWidget widget, int flags);} Deberá liberar la región devuelta mediante jregion_free. @end ftable See also:@* @xref{jwidget_get_region}.@* @xref{jregion_free}.@* @node jwidget_get_bg_color, jwidget_get_theme, jwidget_get_drawable_region, Widget @section jwidget_get_bg_color @ftable @asis @item @t{int jwidget_get_bg_color (JWidget widget);} Devuelve el color de fondo de este widget (o si es -1 pregunta por el color del padre). @end ftable @node jwidget_get_theme, jwidget_get_text_length, jwidget_get_bg_color, Widget @section jwidget_get_theme @ftable @asis @item @t{JTheme jwidget_get_theme (JWidget widget);} Devuelve un puntero al tema que utiliza dicho widget. @end ftable @node jwidget_get_text_length, jwidget_get_texticon_info, jwidget_get_theme, Widget @section jwidget_get_text_length @ftable @asis @item @t{int jwidget_get_text_length (JWidget widget);} @end ftable @ftable @asis @item @t{int jwidget_get_text_height (JWidget widget);} Retorna las medidas del texto del widget en píxeles. Puede ser equivalente a utilizar: @example int length = ji_font_text_len (widget->text_font, widget->text); int height = text_height (widget->text_font); @end example @end ftable See also:@* @xref{ji_font_text_len}.@* @node jwidget_get_texticon_info, jwidget_noborders, jwidget_get_text_length, Widget @section jwidget_get_texticon_info @ftable @asis @item @t{void jwidget_get_texticon_info (JWidget widget, JRect box, JRect text, JRect icon, int icon_w, int icon_h);} @end ftable @node jwidget_noborders, jwidget_set_border, jwidget_get_texticon_info, Widget @section jwidget_noborders @ftable @asis @item @t{void jwidget_noborders (JWidget widget);} @end ftable @node jwidget_set_border, jwidget_set_position, jwidget_noborders, Widget @section jwidget_set_border @ftable @asis @item @t{void jwidget_set_border (JWidget widget, int l, int t, int r, int b);} @end ftable @node jwidget_set_position, jwidget_set_static_size, jwidget_set_border, Widget @section jwidget_set_position @ftable @asis @item @t{void jwidget_set_position (JWidget widget, JRect rect);} @end ftable @node jwidget_set_static_size, jwidget_set_bg_color, jwidget_set_position, Widget @section jwidget_set_static_size @ftable @asis @item @t{void jwidget_set_static_size (JWidget widget, int w, int h);} @end ftable @node jwidget_set_bg_color, jwidget_set_theme, jwidget_set_static_size, Widget @section jwidget_set_bg_color @ftable @asis @item @t{void jwidget_set_bg_color (JWidget widget, int color);} @end ftable @node jwidget_set_theme, jwidget_flush_redraw, jwidget_set_bg_color, Widget @section jwidget_set_theme @ftable @asis @item @t{void jwidget_set_theme (JWidget widget, JTheme theme);} @end ftable @node jwidget_flush_redraw, jwidget_redraw_region, jwidget_set_theme, Widget @section jwidget_flush_redraw @ftable @asis @item @t{void jwidget_flush_redraw (JWidget widget);} @end ftable @node jwidget_redraw_region, jwidget_signal_on, jwidget_flush_redraw, Widget @section jwidget_redraw_region @ftable @asis @item @t{void jwidget_redraw_region (JWidget widget, const JRegion region);} @end ftable @node jwidget_signal_on, jwidget_emit_signal, jwidget_redraw_region, Widget @section jwidget_signal_on @ftable @asis @item @t{void jwidget_signal_on (JWidget widget);} @end ftable @ftable @asis @item @t{void jwidget_signal_off (JWidget widget);} @end ftable @node jwidget_emit_signal, jwidget_send_message, jwidget_signal_on, Widget @section jwidget_emit_signal @ftable @asis @item @t{int jwidget_emit_signal (JWidget widget, int signal_num);} @end ftable @node jwidget_send_message, jwidget_send_message_after_type, jwidget_emit_signal, Widget @section jwidget_send_message @ftable @asis @item @t{bool jwidget_send_message (JWidget widget, JMessage msg);} @end ftable @node jwidget_send_message_after_type, jwidget_close_window, jwidget_send_message, Widget @section jwidget_send_message_after_type @ftable @asis @item @t{bool jwidget_send_message_after_type (JWidget widget, JMessage msg, int type);} @end ftable @node jwidget_close_window, jwidget_capture_mouse, jwidget_send_message_after_type, Widget @section jwidget_close_window @ftable @asis @item @t{void jwidget_close_window (JWidget widget);} @end ftable @node jwidget_capture_mouse, jwidget_release_mouse, jwidget_close_window, Widget @section jwidget_capture_mouse @ftable @asis @item @t{void jwidget_capture_mouse (JWidget widget);} @end ftable @ftable @asis @item @t{void jwidget_hard_capture_mouse (JWidget widget);} @end ftable @node jwidget_release_mouse, jwidget_find_name, jwidget_capture_mouse, Widget @section jwidget_release_mouse @ftable @asis @item @t{void jwidget_release_mouse (JWidget widget);} @end ftable @node jwidget_find_name, jwidget_check_underscored, jwidget_release_mouse, Widget @section jwidget_find_name @ftable @asis @item @t{JWidget jwidget_find_name (JWidget widget, const char *name);} Busca por el widget hijo con el nombre "name" dentro del widget "widget". Útil para obtener widgets hijos cargados desde un archivo .jid. @end ftable See also:@* @xref{jwidget_set_name}.@* @xref{Archivos, Archivos JID}.@* @node jwidget_check_underscored, Widget's flags, jwidget_find_name, Widget @section jwidget_check_underscored @ftable @asis @item @t{bool jwidget_check_underscored (JWidget widget, int ascii);} @end ftable @node Widget's flags, JM_OPEN, jwidget_check_underscored, Widget @section Widget's flags @ftable @asis Valores posibles para las banderas widget->flags. Evite usar estos valores directamente, en su lugar intente usar las funciones "jwidget_is_..." donde sea posible. @itemize @bullet @item JI_DIRTY@* El widget está "sucio" (necesita ser redibujado en su totalidad). @item JI_HIDDEN@* El widget está escondido. @item JI_SELECTED@* El widget está seleccinado. @item JI_DISABLED@* El widget está deshabilitado. @item JI_HASFOCUS@* El widget tiene el foco de entrada (o alguno de sus hijos lo tiene). Esta bandera sólo la pueden conseguir widgets que sean JI_FOCUSREST. @item JI_HASMOUSE@* El widget tiene el mouse (o alguno de sus hijos lo tiene). @item JI_HASCAPTURE@* El widget tiene el mouse capturado. @item JI_FOCUSREST@* El widget es un descanso para el foco, es decir, puede recibir el foco de entrada ya que lo utilizará para algo. Por ejemplo: un botón es focus-rest, pero una etiqueta (label) o una caja (box) no lo son. @item JI_MAGNETIC@* El widget es magnético (recibe el foco de entrada por defecto). @item JI_EXPANSIVE@* El widget es expansivo: intenta obtener el mayor lugar posible si su padre es una caja (box). @item JI_DECORATIVE@* El widget es decorativo (ver jwidget_decorative). @item JI_AUTODESTROY@* El widget es auto-destructivo (ver jwidget_autodestroy). @item JI_HARDCAPTURE@* El widget capturó el mouse en una forma "dura". Cuando se utiliza jwidget_hard_capture_mouse, el widget con el mouse (jmanager_get_mouse) será siempre el mismo widget que capturó el mouse, es imposible que cambie a otro widget. Cuando utiliza jwidget_capture_mouse, el widget con el mouse puede cambiar a otro widget, pero los mensajes del mouse siguen siendo enviados al que posee la captura. @end itemize @end ftable See also:@* @xref{jwidget_decorative}.@* @xref{jwidget_autodestroy}.@* @xref{jwidget_capture_mouse, jwidget_hard_capture_mouse}.@* @node JHook, Message, Widget, Top @chapter JHook (gancho) @itemize @bullet @item int type;@* @item JMessageFunc msg_proc;@* Función encargada de procesar los mensajes, debe retornar TRUE si el mensaje se utilizó y no se desea que el mismo sea procesado por los siguientes "ganchos" consecutivos, o FALSE en caso contrario. @item void *data;@* @end itemize @node Message, Signal, JHook, Top @chapter Message (mensaje) Cuando se genera un mensaje, al ser despachado se comienza enviando el mismo a los ganchos de los widgets receptores, comenzando del primer gancho (el cual sería el último gancho agregado) hasta el último gancho del widget. Recuerde que si intercepta un mensaje, debe retornar TRUE indicando que el mensaje fue utilizado, así frena el enviado de mensajes a otros ganchos. Esto es válido para todos los mensajes menos para JM_DESTROY. Ya que devolviendo TRUE, los ganchos próximos no recibirán dicho mensaje y es posible que algo de memoria no se libere. @menu * JM_OPEN:: * JM_CLOSE:: * JM_DESTROY:: * JM_DRAW:: * JM_IDLE:: * JM_SIGNAL:: * JM_REQSIZE:: * JM_SETPOS:: * JM_DRAWRGN:: * JM_DIRTYCHILDREN:: * JM_CHAR:: * JM_KEYPRESSED:: * JM_KEYRELEASED:: * JM_FOCUSENTER:: * JM_FOCUSLEAVE:: * JM_BUTTONPRESSED:: * JM_BUTTONRELEASED:: * JM_DOUBLECLICK:: * JM_MOUSEENTER:: * JM_MOUSELEAVE:: * JM_MOTION:: * JM_WHEEL:: @end menu @node JM_OPEN, JM_CLOSE, Widget's flags, Message @section JM_OPEN @ftable @asis Es enviado a todos los widgets de una ventana cuando está es abierta en un determinado manager. @end ftable See also:@* @xref{JM_CLOSE}.@* @node JM_CLOSE, JM_DESTROY, JM_OPEN, Message @section JM_CLOSE @ftable @asis Cuando una ventana es cerrada, este mensaje se envía a todos los widgets de la misma. @end ftable See also:@* @xref{JM_OPEN}.@* @xref{JM_DESTROY}.@* @node JM_DESTROY, JM_DRAW, JM_CLOSE, Message @section JM_DESTROY @ftable @asis Se envía al eliminar el widget mediante jwidget_free. Un widget recibe una única vez este mensaje (siendo además el último mensaje que recibirá). Recuerde retornar FALSE para no frenar el envío del mensaje a los ganchos próximos. @end ftable See also:@* @xref{JM_CLOSE}.@* @node JM_DRAW, JM_IDLE, JM_DESTROY, Message @section JM_DRAW @ftable @asis @end ftable @node JM_IDLE, JM_SIGNAL, JM_DRAW, Message @section JM_IDLE @ftable @asis @end ftable @node JM_SIGNAL, JM_REQSIZE, JM_IDLE, Message @section JM_SIGNAL @ftable @asis @end ftable @node JM_REQSIZE, JM_SETPOS, JM_SIGNAL, Message @section JM_REQSIZE @ftable @asis Mensaje utilizado para obtener el tamaño necesario para el widget. Debe rellenar las variables msg->reqsize.w y msg->reqsize.h, y retornar TRUE si así lo hizo. @end ftable See also:@* @xref{jwidget_request_size}.@* @node JM_SETPOS, JM_DRAWRGN, JM_REQSIZE, Message @section JM_SETPOS @ftable @asis Mensaje utilizado para cambiar el tamaño del widget, si lo intercepta, deberá hacer un "jrect_copy (widget->pos, &msg->setpos.rect)". Enganchar este mensaje es útil solamente si piensa reacomodar los hijos cada vez que cambie la posición del widget (es decir, siempre que un widget acepte hijos, deberá hacer su propio comportamiento para acomodar el widget y a sus respectivos widgets hijos). @end ftable See also:@* @xref{jwidget_set_position}.@* @node JM_DRAWRGN, JM_DIRTYCHILDREN, JM_SETPOS, Message @section JM_DRAWRGN @ftable @asis Puede cambiar la forma de redibujar una región de un widget (jwidget_redraw_region). Por ahora sólo los managers necesitan interceptar este mensaje. @end ftable @node JM_DIRTYCHILDREN, JM_CHAR, JM_DRAWRGN, Message @section JM_DIRTYCHILDREN @ftable @asis También puede cambiar la forma de "ensuciar" los widgets hijos. Por ejemplo, las list-boxes (cuadros de lista) necesitan enganchar este mensaje para redibujar únicamente los ítems que estén dentro del área de visible (para optimizar la velocidad de proceso). @end ftable @node JM_CHAR, JM_KEYPRESSED, JM_DIRTYCHILDREN, Message @section JM_CHAR @ftable @asis @end ftable @node JM_KEYPRESSED, JM_KEYRELEASED, JM_CHAR, Message @section JM_KEYPRESSED @ftable @asis @end ftable @node JM_KEYRELEASED, JM_FOCUSENTER, JM_KEYPRESSED, Message @section JM_KEYRELEASED @ftable @asis @end ftable @node JM_FOCUSENTER, JM_FOCUSLEAVE, JM_KEYRELEASED, Message @section JM_FOCUSENTER @ftable @asis @end ftable @node JM_FOCUSLEAVE, JM_BUTTONPRESSED, JM_FOCUSENTER, Message @section JM_FOCUSLEAVE @ftable @asis @end ftable @node JM_BUTTONPRESSED, JM_BUTTONRELEASED, JM_FOCUSLEAVE, Message @section JM_BUTTONPRESSED @ftable @asis @end ftable @node JM_BUTTONRELEASED, JM_DOUBLECLICK, JM_BUTTONPRESSED, Message @section JM_BUTTONRELEASED @ftable @asis @end ftable @node JM_DOUBLECLICK, JM_MOUSEENTER, JM_BUTTONRELEASED, Message @section JM_DOUBLECLICK @ftable @asis @end ftable @node JM_MOUSEENTER, JM_MOUSELEAVE, JM_DOUBLECLICK, Message @section JM_MOUSEENTER @ftable @asis @end ftable @node JM_MOUSELEAVE, JM_MOTION, JM_MOUSEENTER, Message @section JM_MOUSELEAVE @ftable @asis @end ftable @node JM_MOTION, JM_WHEEL, JM_MOUSELEAVE, Message @section JM_MOTION @ftable @asis @end ftable @node JM_WHEEL, JI_SIGNAL_DIRTY, JM_MOTION, Message @section JM_WHEEL @ftable @asis @end ftable @node Signal, Manager, Message, Top @chapter Signal (señales) Las señales son un buen método de enganchar determinadas funciones que controlan a las widgets. Es decir que podemos saber cuando ocurre determinado cambio en un widget (por ejemplo si un widget fue eliminado, o si un botón cambio de estado). @menu * JI_SIGNAL_DIRTY:: * JI_SIGNAL_ENABLE:: * JI_SIGNAL_DISABLE:: * JI_SIGNAL_SELECT:: * JI_SIGNAL_DESELECT:: * JI_SIGNAL_SHOW:: * JI_SIGNAL_HIDE:: * JI_SIGNAL_ADD_CHILD:: * JI_SIGNAL_REMOVE_CHILD:: * JI_SIGNAL_NEW_PARENT:: * JI_SIGNAL_GET_TEXT:: * JI_SIGNAL_SET_TEXT:: * JI_SIGNAL_INIT_THEME:: * JI_SIGNAL_CHECK_CHANGE:: * JI_SIGNAL_RADIO_CHANGE:: * JI_SIGNAL_ENTRY_CHANGE:: * JI_SIGNAL_LISTBOX_CHANGE:: * JI_SIGNAL_LISTBOX_SELECT:: * JI_SIGNAL_MENUITEM_SELECT:: * JI_SIGNAL_SLIDER_CHANGE:: @end menu @node JI_SIGNAL_DIRTY, JI_SIGNAL_ENABLE, JM_WHEEL, Signal @section JI_SIGNAL_DIRTY @ftable @asis Se envia cuando un widget determinado es ensuciado. @end ftable See also:@* @xref{jwidget_dirty}.@* @node JI_SIGNAL_ENABLE, JI_SIGNAL_DISABLE, JI_SIGNAL_DIRTY, Signal @section JI_SIGNAL_ENABLE @ftable @asis Al cambiar el estado de un widget a activado. @end ftable See also:@* @xref{jwidget_enable}.@* @node JI_SIGNAL_DISABLE, JI_SIGNAL_SELECT, JI_SIGNAL_ENABLE, Signal @section JI_SIGNAL_DISABLE @ftable @asis Al cambiar el estado de un widget a desactivado. @end ftable See also:@* @xref{jwidget_enable, jwidget_disable}.@* @node JI_SIGNAL_SELECT, JI_SIGNAL_DESELECT, JI_SIGNAL_DISABLE, Signal @section JI_SIGNAL_SELECT @ftable @asis @end ftable See also:@* @xref{jwidget_select}.@* @node JI_SIGNAL_DESELECT, JI_SIGNAL_SHOW, JI_SIGNAL_SELECT, Signal @section JI_SIGNAL_DESELECT @ftable @asis @end ftable See also:@* @xref{jwidget_select, jwidget_deselect}.@* @node JI_SIGNAL_SHOW, JI_SIGNAL_HIDE, JI_SIGNAL_DESELECT, Signal @section JI_SIGNAL_SHOW @ftable @asis @end ftable See also:@* @xref{jwidget_show}.@* @node JI_SIGNAL_HIDE, JI_SIGNAL_ADD_CHILD, JI_SIGNAL_SHOW, Signal @section JI_SIGNAL_HIDE @ftable @asis @end ftable See also:@* @xref{jwidget_show, jwidget_hide}.@* @node JI_SIGNAL_ADD_CHILD, JI_SIGNAL_REMOVE_CHILD, JI_SIGNAL_HIDE, Signal @section JI_SIGNAL_ADD_CHILD @ftable @asis @end ftable See also:@* @xref{jwidget_add_child}.@* @node JI_SIGNAL_REMOVE_CHILD, JI_SIGNAL_NEW_PARENT, JI_SIGNAL_ADD_CHILD, Signal @section JI_SIGNAL_REMOVE_CHILD @ftable @asis @end ftable See also:@* @xref{jwidget_remove_child}.@* @node JI_SIGNAL_NEW_PARENT, JI_SIGNAL_GET_TEXT, JI_SIGNAL_REMOVE_CHILD, Signal @section JI_SIGNAL_NEW_PARENT @ftable @asis @end ftable See also:@* @xref{jwidget_add_child}.@* @xref{jwidget_remove_child}.@* @node JI_SIGNAL_GET_TEXT, JI_SIGNAL_SET_TEXT, JI_SIGNAL_NEW_PARENT, Signal @section JI_SIGNAL_GET_TEXT @ftable @asis @end ftable See also:@* @xref{JI_SIGNAL_SET_TEXT}.@* @node JI_SIGNAL_SET_TEXT, JI_SIGNAL_INIT_THEME, JI_SIGNAL_GET_TEXT, Signal @section JI_SIGNAL_SET_TEXT @ftable @asis @end ftable See also:@* @xref{JI_SIGNAL_GET_TEXT}.@* @node JI_SIGNAL_INIT_THEME, JI_SIGNAL_CHECK_CHANGE, JI_SIGNAL_SET_TEXT, Signal @section JI_SIGNAL_INIT_THEME @ftable @asis @end ftable See also:@* @xref{jwidget_init_theme}.@* @node JI_SIGNAL_CHECK_CHANGE, JI_SIGNAL_RADIO_CHANGE, JI_SIGNAL_INIT_THEME, Signal @section JI_SIGNAL_CHECK_CHANGE @ftable @asis @end ftable @node JI_SIGNAL_RADIO_CHANGE, JI_SIGNAL_ENTRY_CHANGE, JI_SIGNAL_CHECK_CHANGE, Signal @section JI_SIGNAL_RADIO_CHANGE @ftable @asis @end ftable @node JI_SIGNAL_ENTRY_CHANGE, JI_SIGNAL_LISTBOX_CHANGE, JI_SIGNAL_RADIO_CHANGE, Signal @section JI_SIGNAL_ENTRY_CHANGE @ftable @asis @end ftable @node JI_SIGNAL_LISTBOX_CHANGE, JI_SIGNAL_LISTBOX_SELECT, JI_SIGNAL_ENTRY_CHANGE, Signal @section JI_SIGNAL_LISTBOX_CHANGE @ftable @asis @end ftable @node JI_SIGNAL_LISTBOX_SELECT, JI_SIGNAL_MENUITEM_SELECT, JI_SIGNAL_LISTBOX_CHANGE, Signal @section JI_SIGNAL_LISTBOX_SELECT @ftable @asis @end ftable @node JI_SIGNAL_MENUITEM_SELECT, JI_SIGNAL_SLIDER_CHANGE, JI_SIGNAL_LISTBOX_SELECT, Signal @section JI_SIGNAL_MENUITEM_SELECT @ftable @asis @end ftable @node JI_SIGNAL_SLIDER_CHANGE, ji_get_default_manager, JI_SIGNAL_MENUITEM_SELECT, Signal @section JI_SIGNAL_SLIDER_CHANGE @ftable @asis @end ftable @node Manager, Window, Signal, Top @chapter Manager (gestor) @menu * ji_get_default_manager:: * jmanager_new:: * jmanager_free:: * jmanager_run:: * jmanager_poll:: * jmanager_send_message:: * jmanager_get_focus:: * jmanager_get_mouse:: * jmanager_get_capture:: * jmanager_set_focus:: * jmanager_set_mouse:: * jmanager_set_capture:: * jmanager_attract_focus:: * jmanager_free_focus:: * jmanager_free_widget:: * jmanager_remove_message:: * jmanager_remove_messages_for:: * jmanager_refresh_screen:: * jmanager_dispatch_messages:: * jmanager_dispatch_draw_messages:: * jmanager_open_window:: * jmanager_close_window:: * JI_SIGNAL_MANAGER_EXTERNAL_CLOSE:: * JI_SIGNAL_MANAGER_ADD_WINDOW:: * JI_SIGNAL_MANAGER_REMOVE_WINDOW:: * JI_SIGNAL_MANAGER_IDLE:: * JI_SIGNAL_MANAGER_LOSTCHAR:: @end menu @node ji_get_default_manager, jmanager_new, JI_SIGNAL_SLIDER_CHANGE, Manager @section ji_get_default_manager @ftable @asis @item @t{JWidget ji_get_default_manager (void);} Retorna un puntero del manager principal, el primer manager creado con jmanager_new. @end ftable See also:@* @xref{jmanager_new}.@* @node jmanager_new, jmanager_free, ji_get_default_manager, Manager @section jmanager_new @ftable @asis @item @t{JWidget jmanager_new (void);} @end ftable See also:@* @xref{jmanager_free}.@* @node jmanager_free, jmanager_run, jmanager_new, Manager @section jmanager_free @ftable @asis @item @t{void jmanager_free (JWidget manager);} @end ftable See also:@* @xref{jmanager_new}.@* @node jmanager_run, jmanager_poll, jmanager_free, Manager @section jmanager_run @ftable @asis @item @t{void jmanager_run (JWidget manager);} @end ftable See also:@* @xref{jmanager_poll}.@* @node jmanager_poll, jmanager_send_message, jmanager_run, Manager @section jmanager_poll @ftable @asis @item @t{bool jmanager_poll (JWidget manager, bool all_windows);} @end ftable See also:@* @xref{jmanager_run}.@* @node jmanager_send_message, jmanager_get_focus, jmanager_poll, Manager @section jmanager_send_message @ftable @asis @item @t{void jmanager_send_message (const JMessage msg);} @end ftable See also:@* @xref{jmanager_dispatch_messages}.@* @node jmanager_get_focus, jmanager_get_mouse, jmanager_send_message, Manager @section jmanager_get_focus @ftable @asis @item @t{JWidget jmanager_get_focus (void);} @end ftable See also:@* @xref{jmanager_set_focus}.@* @node jmanager_get_mouse, jmanager_get_capture, jmanager_get_focus, Manager @section jmanager_get_mouse @ftable @asis @item @t{JWidget jmanager_get_mouse (void);} @end ftable See also:@* @xref{jmanager_set_mouse}.@* @node jmanager_get_capture, jmanager_set_focus, jmanager_get_mouse, Manager @section jmanager_get_capture @ftable @asis @item @t{JWidget jmanager_get_capture (void);} @end ftable See also:@* @xref{jmanager_set_capture}.@* @node jmanager_set_focus, jmanager_set_mouse, jmanager_get_capture, Manager @section jmanager_set_focus @ftable @asis @item @t{void jmanager_set_focus (JWidget widget);} @end ftable See also:@* @xref{jmanager_get_focus}.@* @node jmanager_set_mouse, jmanager_set_capture, jmanager_set_focus, Manager @section jmanager_set_mouse @ftable @asis @item @t{void jmanager_set_mouse (JWidget widget);} @end ftable See also:@* @xref{jmanager_get_mouse}.@* @node jmanager_set_capture, jmanager_attract_focus, jmanager_set_mouse, Manager @section jmanager_set_capture @ftable @asis @item @t{void jmanager_set_capture (JWidget widget);} @end ftable See also:@* @xref{jmanager_get_capture}.@* @node jmanager_attract_focus, jmanager_free_focus, jmanager_set_capture, Manager @section jmanager_attract_focus @ftable @asis @item @t{void jmanager_attract_focus (JWidget widget);} @end ftable See also:@* @xref{jwidget_magnetic}.@* @node jmanager_free_focus, jmanager_free_widget, jmanager_attract_focus, Manager @section jmanager_free_focus @ftable @asis @item @t{void jmanager_free_focus (void);} @end ftable @ftable @asis @item @t{void jmanager_free_mouse (void);} @end ftable @ftable @asis @item @t{void jmanager_free_capture (void);} @end ftable See also:@* @xref{jmanager_set_focus}.@* @xref{ji_manager_set_mouse}.@* @xref{ji_manager_set_capture}.@* @node jmanager_free_widget, jmanager_remove_message, jmanager_free_focus, Manager @section jmanager_free_widget @ftable @asis @item @t{void jmanager_free_widget (JWidget widget);} @end ftable @node jmanager_remove_message, jmanager_remove_messages_for, jmanager_free_widget, Manager @section jmanager_remove_message @ftable @asis @item @t{void jmanager_remove_message (JMessage msg);} @end ftable @node jmanager_remove_messages_for, jmanager_refresh_screen, jmanager_remove_message, Manager @section jmanager_remove_messages_for @ftable @asis @item @t{void jmanager_remove_messages_for (JWidget widget);} @end ftable @node jmanager_refresh_screen, jmanager_dispatch_messages, jmanager_remove_messages_for, Manager @section jmanager_refresh_screen @ftable @asis @item @t{void jmanager_refresh_screen (void);} @end ftable @node jmanager_dispatch_messages, jmanager_dispatch_draw_messages, jmanager_refresh_screen, Manager @section jmanager_dispatch_messages @ftable @asis @item @t{void jmanager_dispatch_messages (void);} @end ftable @node jmanager_dispatch_draw_messages, jmanager_open_window, jmanager_dispatch_messages, Manager @section jmanager_dispatch_draw_messages @ftable @asis @item @t{void jmanager_dispatch_draw_messages (void);} @end ftable @node jmanager_open_window, jmanager_close_window, jmanager_dispatch_draw_messages, Manager @section jmanager_open_window @ftable @asis @item @t{void jmanager_open_window (JWidget manager, JWidget window);} @end ftable @node jmanager_close_window, JI_SIGNAL_MANAGER_EXTERNAL_CLOSE, jmanager_open_window, Manager @section jmanager_close_window @ftable @asis @item @t{void jmanager_close_window (JWidget manager, JWidget window, bool sendtokill);} @end ftable @node JI_SIGNAL_MANAGER_EXTERNAL_CLOSE, JI_SIGNAL_MANAGER_ADD_WINDOW, jmanager_close_window, Manager @section JI_SIGNAL_MANAGER_EXTERNAL_CLOSE @ftable @asis @end ftable @node JI_SIGNAL_MANAGER_ADD_WINDOW, JI_SIGNAL_MANAGER_REMOVE_WINDOW, JI_SIGNAL_MANAGER_EXTERNAL_CLOSE, Manager @section JI_SIGNAL_MANAGER_ADD_WINDOW @ftable @asis @end ftable @node JI_SIGNAL_MANAGER_REMOVE_WINDOW, JI_SIGNAL_MANAGER_IDLE, JI_SIGNAL_MANAGER_ADD_WINDOW, Manager @section JI_SIGNAL_MANAGER_REMOVE_WINDOW @ftable @asis @end ftable @node JI_SIGNAL_MANAGER_IDLE, JI_SIGNAL_MANAGER_LOSTCHAR, JI_SIGNAL_MANAGER_REMOVE_WINDOW, Manager @section JI_SIGNAL_MANAGER_IDLE @ftable @asis @end ftable @node JI_SIGNAL_MANAGER_LOSTCHAR, jwindow_new, JI_SIGNAL_MANAGER_IDLE, Manager @section JI_SIGNAL_MANAGER_LOSTCHAR @ftable @asis @end ftable @node Window, Box, Manager, Top @chapter Window (ventana) Una ventana es un tipo de widget especial en una caja rectangular que representa un cuadro de diálogo (entre el usuario y el programa) el cual el usuario puede mover o cambiar de tamaño a su antojo. En Jinete, la ventana incluye sólo los rebordes y la barra de título, usted debe agregarle los widgets hijos mediante jwidget_add_child. La posición de los hijos es puesta en el área cliente (el área dentro de los bordes de la ventana), por lo que deberá agregar sólo un widget dentro de la ventana (generalmente una caja (box)) la cual contendrá los demás widgets. @menu * jwindow_new:: * jwindow_new_desktop:: * jwindow_get_killer:: * jwindow_get_manager:: * jwindow_mobile:: * jwindow_remap:: * jwindow_center:: * jwindow_position:: * jwindow_open:: * jwindow_open_fg:: * jwindow_open_bg:: * jwindow_close:: * jwindow_is_toplevel:: * jwindow_is_foreground:: * jwindow_is_desktop:: * JI_SIGNAL_WINDOW_CLOSE:: * JI_SIGNAL_WINDOW_RESIZE:: @end menu @node jwindow_new, jwindow_new_desktop, JI_SIGNAL_MANAGER_LOSTCHAR, Window @section jwindow_new @ftable @asis @item @t{JWidget jwindow_new (const char *text);} Crea una nueva ventana con el texto "text" en la barra de título. @end ftable @node jwindow_new_desktop, jwindow_get_killer, jwindow_new, Window @section jwindow_new_desktop @ftable @asis @item @t{JWidget jwindow_new_desktop (void);} Crea una nueva ventana de tipo desktop (escritorio). Los escritorios ocupan toda la pantalla (o mejor dicho, todo el tamaño del manager padre). @end ftable See also:@* @xref{jwindow_is_desktop}.@* @node jwindow_get_killer, jwindow_get_manager, jwindow_new_desktop, Window @section jwindow_get_killer @ftable @asis @item @t{JWidget jwindow_get_killer (JWidget window);} Devuelve el puntero al widget que "mató" (cerró) la ventana "window". Puede que este puntero sea NULL en el caso de que algún ente anónimo haya cerrado la ventana (como el botón "x" para cerrarla, o la tecla ). @end ftable See also:@* @xref{jwindow_close}.@* @node jwindow_get_manager, jwindow_mobile, jwindow_get_killer, Window @section jwindow_get_manager @ftable @asis @item @t{JWidget jwindow_get_manager (JWidget window);} Devuelve el manager en el cual la ventana "window" se encuentra dentro. @end ftable See also:@* @xref{jwindow_open}.@* @xref{jmanager_open_window}.@* @node jwindow_mobile, jwindow_remap, jwindow_get_manager, Window @section jwindow_mobile @ftable @asis @item @t{void jwindow_mobile (JWidget window, bool mobile);} Cambia el estado de movilidad de la ventana "window". Si una ventana es móvil, significa que el usuario puede cambiarle la posición y su tamaño. @end ftable @node jwindow_remap, jwindow_center, jwindow_mobile, Window @section jwindow_remap @ftable @asis @item @t{void jwindow_remap (JWidget window);} XXX Esta función generalmente no es necesaria utilizarla si usted usa jwindow_center o jwindow_position antes. Será necesaria en casos especiales donde usted necesite saber el tamaño mínimo que necesita la ventana antes de abrirla. @end ftable @node jwindow_center, jwindow_position, jwindow_remap, Window @section jwindow_center @ftable @asis @item @t{void jwindow_center (JWidget window);} Cambia la posición de la ventana "window" al centro el manager principal (el manager principal tiene el tamaño de la pantalla física, o mejor dicho, del modo de video actual). @end ftable See also:@* @xref{jwindow_position}.@* @node jwindow_position, jwindow_open, jwindow_center, Window @section jwindow_position @ftable @asis @item @t{void jwindow_position (JWidget window, int x, int y);} Posiciona la ventana a otro punto (x, y). Note que esta función difiere de jwidget_set_position en el sentido de que sólo desplaza la ventana (y sus widgets hijos) a la nueva posición. @end ftable @node jwindow_open, jwindow_open_fg, jwindow_position, Window @section jwindow_open @ftable @asis @item @t{void jwindow_open (JWidget window);} Abre la ventana en el manager por defecto para ser procesadas por próximas llamadas a jmanager_poll. No debería usar esta función a menos que sepa lo que está haciendo. Generalmente nunca la deberá llamar directamente, en cambio, las funciones jwindow_open_fg o jwindow_open_bg son las comúnmente utilizadas (y las mismas suelen utilizar jwindow_open). @end ftable See also:@* @xref{jwindow_open_fg}.@* @xref{jwindow_open_bg}.@* @xref{ji_get_default_manager}.@* @xref{jmanager_poll}.@* @node jwindow_open_fg, jwindow_open_bg, jwindow_open, Window @section jwindow_open_fg @ftable @asis @item @t{void jwindow_open_fg (JWidget window);} Abre la ventana en primer plano (foreground), paralizando las demás ventanas abiertas, y esperando una respuesta del usuario inmediata. Cuando la ventana se cierra se vuelve a donde la función se llamó. Útil cuando necesita hacer cosas como: @example jwindow_open_fg (window); if (jwindow_get_killer (window) == boton_aceptar) @{ ... @} jwidget_free (window); @end example @end ftable See also:@* @xref{jwindow_open_bg}.@* @xref{jwindow_get_killer}.@* @xref{jwidget_free}.@* @node jwindow_open_bg, jwindow_close, jwindow_open_fg, Window @section jwindow_open_bg @ftable @asis @item @t{void jwindow_open_bg (JWidget window);} Abre la ventana y la deja ejecutándose en segundo plano (background). Esta función sólo coloca la bandera auto-destroy a la ventana y llama a la función jwindow_open. La bandera auto-destroy hace que la ventana, al ser cerrada, sea automáticamente liberada (jwidget_free) por el mismo manager antes que por nosotros. @end ftable See also:@* @xref{jwindow_open}.@* @xref{jwindow_open_fg}.@* @xref{jwidget_free}.@* @xref{jwidget_autodestroy}.@* @node jwindow_close, jwindow_is_toplevel, jwindow_open_bg, Window @section jwindow_close @ftable @asis @item @t{void jwindow_close (JWidget window, JWidget killer);} Cierra la ventana "window" forzosamente. El paramentro "killer" indica quien "mató" (cerró) la ventana, esto es debido a que esta función generalmente se utiliza dentro de un "msg_proc" de un widget especial que se encarga de cerrar la ventana (por ejemplo un botón, que al presionarlo, su acción por defecto es matar a su ventana padre). @end ftable See also:@* @xref{jwindow_open}.@* @xref{jwindow_get_killer}.@* @node jwindow_is_toplevel, jwindow_is_foreground, jwindow_close, Window @section jwindow_is_toplevel @ftable @asis @item @t{bool jwindow_is_toplevel (JWidget window);} Retorna TRUE si la ventana "window" se encuentra encima de todas las ventanas. @end ftable @node jwindow_is_foreground, jwindow_is_desktop, jwindow_is_toplevel, Window @section jwindow_is_foreground @ftable @asis @item @t{bool jwindow_is_foreground (JWidget window);} Retorna TRUE si la ventana se ejecuta en primer plano (foreground). @end ftable See also:@* @xref{jwindow_open_fg}.@* @node jwindow_is_desktop, JI_SIGNAL_WINDOW_CLOSE, jwindow_is_foreground, Window @section jwindow_is_desktop @ftable @asis @item @t{bool jwindow_is_desktop (JWidget window);} Retorna TRUE si la ventana es de tipo escritorio (desktop). @end ftable See also:@* @xref{jwindow_new_desktop}.@* @node JI_SIGNAL_WINDOW_CLOSE, JI_SIGNAL_WINDOW_RESIZE, jwindow_is_desktop, Window @section JI_SIGNAL_WINDOW_CLOSE @ftable @asis @end ftable @node JI_SIGNAL_WINDOW_RESIZE, jbox_new, JI_SIGNAL_WINDOW_CLOSE, Window @section JI_SIGNAL_WINDOW_RESIZE @ftable @asis @end ftable @node Box, Label, Window, Top @chapter Box (caja) Una caja (box) es uno de los widgets más sencillos de manejar y a su vez, uno de los más útiles. Sirve para disponer los widgets hijos de forma horizontal o vertical, acomodándolos a nuestro antojo, pero sin tener que preocuparnos por el tamaño que necesita cada widget en particular. @menu * jbox_new:: @end menu @node jbox_new, jlabel_new, JI_SIGNAL_WINDOW_RESIZE, Box @section jbox_new @ftable @asis @item @t{JWidget jbox_new (int align);} Crea una nueva caja (box) con las propiedades de alineamiento de "align". "align" debe poseer uno de estos dos valores: @itemize @bullet @item JI_HORIZONTAL o JI_VERTICAL:@* Indica si queremos ordenar los widgets de forma horizontal o vertical respectivamente. @end itemize Y puede o no estar en combinación con: @itemize @bullet @item JI_HOMOGENEOUS@* Indica que todos los widgets hijos deben poseer el mismo tamaño. Generalmente el máximo tamaño necesario por el widget hijo más grande que se encuentre dentro de la caja (box). @end itemize @end ftable @node Label, Button, Box, Top @chapter Label (etiqueta) @menu * jlabel_new:: @end menu @node jlabel_new, jbutton_new, jbox_new, Label @section jlabel_new @ftable @asis @item @t{JWidget jlabel_new (const char *text);} Crea una nueva widget de tipo etiqueta (label) con el texto "text". Las etiquetas sirven para mostrar un mensaje, o indicar qué significa un widget de al lado. @end ftable @node Button, Check, Label, Top @chapter Button (botón) Un botón es un widget que al ser presionado cierra la ventana donde está, ó ejecuta alguna acción o comando (como abrir otra nueva ventana). Un botón, sin que usted intercepte ninguna señal, ni mensaje, siempre cerrará la ventana, tal es así, que luego puede preguntar por jwindow_get_killer() y le devolverá un puntero a dicho botón. Hay muchas formas de cambiar este comportamiento por defecto, la más cómoda es utilizando las funciones ji_button_add_command, así la ventana no será cerrada y en su lugar se llamará al comando especificado. También, utilizando jwidget_add_hook() puede interceptar el mensaje JM_SIGNAL cuando se envía la señal JI_SIGNAL_BUTTON_SELECT. Para que no queden dudas, cuando un botón es presionado: @itemize @bullet @item Primero se envía la señal JI_SIGNAL_BUTTON_SELECT@* @item Si retorna FALSE, significa que la señal no fue utilizada, por lo tanto debemos ejecutar el comportamiento por defecto: si se agregaron comandos al botón mediante jbutton_add_command(), se ejecutarán los comandos, ahora, si el botón no tiene comando alguno, se cerrará la ventana. @end itemize @menu * jbutton_new:: * jbutton_set_icon:: * jbutton_set_icon_align:: * jbutton_set_bevel:: * jbutton_get_bevel:: * jbutton_add_command:: * jbutton_add_command_data:: * JI_SIGNAL_BUTTON_SELECT:: @end menu @node jbutton_new, jbutton_set_icon, jlabel_new, Button @section jbutton_new @ftable @asis @item @t{JWidget jbutton_new (const char *text);} Crea un nuevo botón con el texto "text". Recuerde que por defecto, si es que no agrega ningún comando, los botones cierran la ventana Puede saber que botón cerró la ventana utilizando jwindow_get_killer. @end ftable See also:@* @xref{jbutton_add_command}.@* @xref{jwindow_get_killer}.@* @node jbutton_set_icon, jbutton_set_icon_align, jbutton_new, Button @section jbutton_set_icon @ftable @asis @item @t{void jbutton_set_icon (JWidget button, struct BITMAP *icon);} @end ftable @node jbutton_set_icon_align, jbutton_set_bevel, jbutton_set_icon, Button @section jbutton_set_icon_align @ftable @asis @item @t{void jbutton_set_icon_align (JWidget button, int icon_align);} @end ftable @node jbutton_set_bevel, jbutton_get_bevel, jbutton_set_icon_align, Button @section jbutton_set_bevel @ftable @asis @item @t{void jbutton_set_bevel (JWidget button, int b0, int b1, int b2, int b3);} @end ftable @node jbutton_get_bevel, jbutton_add_command, jbutton_set_bevel, Button @section jbutton_get_bevel @ftable @asis @item @t{void jbutton_get_bevel (JWidget button, int *b4);} @end ftable @node jbutton_add_command, jbutton_add_command_data, jbutton_get_bevel, Button @section jbutton_add_command @ftable @asis @item @t{void jbutton_add_command (JWidget button, void (*command) (JWidget button));} @end ftable See also:@* @xref{jbutton_add_command_data}.@* @xref{JI_SIGNAL_BUTTON_SELECT}.@* @node jbutton_add_command_data, JI_SIGNAL_BUTTON_SELECT, jbutton_add_command, Button @section jbutton_add_command_data @ftable @asis @item @t{void jbutton_add_command_data (JWidget button, void (*command) (JWidget button, void *data), void *data);} @end ftable See also:@* @xref{jbutton_add_command}.@* @xref{JI_SIGNAL_BUTTON_SELECT}.@* @node JI_SIGNAL_BUTTON_SELECT, jcheck_new, jbutton_add_command_data, Button @section JI_SIGNAL_BUTTON_SELECT @ftable @asis Esta señal se envía a los handlers del botón cuando el mismo es presionado (seleccionado). Deberá retornar TRUE para indicar que utilizó dicha señal, si es que no quiere ejecutar el comportamiento por defecto del botón: llamar los comandos si es que existen o cerrar la ventana en caso contrario. @end ftable See also:@* @xref{Button, Button (botón)}.@* @xref{jwidget_add_hook}.@* @node Check, Theme, Button, Top @chapter Check (caja de comprobación) @menu * jcheck_new:: * jcheck_set_icon_align:: @end menu @node jcheck_new, jcheck_set_icon_align, JI_SIGNAL_BUTTON_SELECT, Check @section jcheck_new @ftable @asis @item @t{JWidget jcheck_new (const char *text);} Crea una nueva caja de comprobación. Sirven para representar opciones booleanas (valores verdadero o falso). @end ftable @node jcheck_set_icon_align, ji_load_widget, jcheck_new, Check @section jcheck_set_icon_align @ftable @asis @item @t{void jcheck_set_icon_align (JWidget check, int icon_align);} @end ftable @node Theme, Archivos, Check, Top @chapter Theme (tema) @node Archivos, Font, Theme, Top @chapter Archivos JID En un archivo .jid puede definir la estructura de una ventana (o de cualquier tipo de widget). Ejemplo: En "archivo.jid": @example