SDK Multiplataforma en C logo

SDK Multiplataforma en C

Panel

❮ Anterior
Siguiente ❯

Funciones

Panel*panel_create (void)
Panel*panel_scroll (...)
voidpanel_data (...)
type*panel_get_data (...)
voidpanel_size (...)
uint32_tpanel_layout (...)
Layout*panel_get_layout (...)
voidpanel_visible_layout (...)
voidpanel_update (...)

Un Panel es un control dentro de una ventana que agrupa otros controles. Define su propio sistema de referencia, es decir, si desplazamos un panel todos sus descendientes se moverán al unísono ya que sus ubicaciones serán relativas al origen de su predecesor. Admitirá otros (sub)-paneles como descendientes, lo que permite conformar una Jerarquía de ventana (Figura 1). En pro de la portabilidad, esta librería Gui no permite indicar directamente coordenadas ni tamaños concretos para los elementos vinculados a un panel, sino que la asociación se lleva a cabo mediante un objeto Layout que se encarga de calcular en tiempo de ejecución las ubicaciones finales de los controles en función de la plataforma y gestor de ventanas. En ¡Hola Subpanel! tienes un ejemplo elemental del uso de paneles.

  • Utiliza panel_create para crear un nuevo panel.
  • Utiliza panel_layout para añadir controles al panel.
  • Esquema que muestra la jerarquía producida por paneles, subpaneles y controles.
    Figura 1: Jerarquía de ventana.

Cada panel admite varios layouts y permite alternar entre ellos en tiempo de ejecución (Figura 2). Esto permite crear interfaces dinámicas responsivas con muy poco esfuerzo, ya que el propio panel se encarga de vincular y dimensionar los controles en función del layout activo en cada caso. En ¡Hola Multi-layout! tienes un ejemplo.

  • Utiliza panel_visible_layout para alternar entre layouts.
  • Dos configuraciones diferentes de ventana utilizando los mismos controles.
    Figura 2: Panel con dos organizaciones diferentes para los mismos controles.

Debido a que los layout son estructuras lógicas fuera de la jerarquía de ventana, pueden compartir controles al estar vinculados con el mismo panel (Figura 3). Lo que no está permitido es utilizar los mismos objetos en diferentes paneles, por el propio concepto de jerarquía.

Esquema que muestra como compartir correctamente los elementos entre layouts.
Figura 3: Es posible reutilizar los mismos componentes entre layouts del mismo panel.

1. Paneles con scroll

El tamaño final de un panel viene determinado por el Layout activo en cada momento y este último se dimensiona en función de los componentes que contiene. Como no se establece ningún límite, es posible que el panel crezca desmesuradamente excediendo incluso el tamaño de la pantalla (Figura 4). El uso de barras de scroll solventará el problema. En ¡Hola Scroll-Panel! tienes un ejemplo de uso.

  • Utiliza panel_scroll para crear un panel con barras de scroll.
  • Utiliza panel_size para establecer el tamaño por defecto del área visible.
  • Ventana con muchos controles sin barras de scroll. La misma ventana con barras de scroll.
    Figura 4: Panel con 100 filas de controles de edición. (1) Sin scroll, (2) Con scroll.

En un panel con barras de scroll se gestiona por separado el dimensionado del contenido y del área visible, de tal forma que evitamos el problema visto anteriormente:

  • El área interior se calcula de forma automática, en función del contenido del layout. Ver Dimensionado natural, Márgenes y formato.
  • El área visible se establece mediante panel_size. El tamaño inicial puede variar en función de la política de Expansión de celdas definida en el layout.
  • En el caso de que el contenido sea menor que el área visible, desaparecerá la barra de scroll correspondiente (horizontal o vertical).

panel_create ()

Crea un panel.

Panel*
panel_create(void);

Retorna

El nuevo panel.


panel_scroll ()

Crea un panel con barras de scroll.

Panel*
panel_scroll(const bool_t hscroll,
             const bool_t vscroll);
hscroll

TRUE si queremos barra de scroll horizontal.

vscroll

TRUE si queremos barra de scroll vertical.

Retorna

El nuevo panel.

Observaciones

Ver Paneles con scroll.


panel_data ()

Asocia datos de usuario con el panel.

void
panel_data(Panel *panel,
           type **data,
           FPtr_destroy func_destroy_data,
           type);
panel

El panel.

data

Datos de usuario.

func_destroy_data

Destructor de los datos de usuario. Será llamado al destruir el panel.

type

Tipo de datos de usuario.


panel_get_data ()

Obtiene los datos de usuario asociados con el panel.

type*
panel_get_data(const Panel *panel,
               type);
panel

El panel.

type

Tipo de datos de usuario.

Retorna

Los datos de usuario.


panel_size ()

Establece el tamaño por defecto del área visible de un panel con barras de scroll.

void
panel_size(Panel *panel,
           const S2Df size);
panel

El panel.

size

El tamaño por defecto.

Observaciones

Si pasamos -1 al valor del ancho o alto, se establecerá la medida del área interior. Ver Paneles con scroll.


panel_layout ()

Añade un layout a un panel.

uint32_t
panel_layout(Panel *panel,
             Layout *layout);
panel

El panel.

layout

El layout.

Retorna

El índice del layout recién añadido.


panel_get_layout ()

Obtiene un layout de un panel.

Layout*
panel_get_layout(Panel *panel,
                 const uint32_t index);
panel

El panel.

index

El índice del layout.

Retorna

El layout.


panel_visible_layout ()

Establece el layout activo dentro del panel.

void
panel_visible_layout(Panel *panel,
                     const uint32_t index);
panel

El panel.

index

El índice del layout.

Observaciones

Para el cambio se haga efectivo, hay que llamar a panel_update.


panel_update ()

Refresca el contenido de la ventana que contiene el panel.

void
panel_update(Panel *panel);
panel

El panel.

Observaciones

Es equivalente a llamar a window_update.

❮ Anterior
Siguiente ❯