PBToolboxAI v3 ← Site

breadcrumb — u_pbt_breadcrumb #

← Referencia de componentes · Índice de la guía

Ruta de navegación: el camino clicable que dice al usuario dónde está, y que lo devuelve con un clic a cualquier nivel superior.

▶ Verlo en vivo — Aplicación de demostración, mosaico Breadcrumb: la vista previa, el código que lo produce y esta página, uno al lado del otro.


En resumen #

Userobjectu_pbt_breadcrumb
Clase de elementosn_pbt_breadcrumb_item (of_item(dirección)) · n_pbt_breadcrumb_child (of_child(dirección))
Sirve paraDecir dónde se está en una jerarquía, y permitir salir de ella hacia arriba
PrincipioUsted describe el camino; el plegado, el menú y la maquetación son nuestros

Inicio rápido #

// Cada vez que el usuario baja un nivel
uo_crumbs.of_add_item(/*keys*/ "home",                /*text*/ "H")
uo_crumbs.of_add_item(/*keys*/ "home/clients",        /*text*/ "C")
uo_crumbs.of_add_item(/*keys*/ "home/clients/dupont", /*text*/ "D")
// El ultimo anadido pasa a ser el lugar actual, y tambien es pulsable

Un segmento se nombra por su dirección: las claves desde la raíz, unidas por / — "home/clients/dupont". Una clave suelta ya no basta en cuanto se repite en dos niveles de la misma ruta: el componente prefiere entonces negarse a adivinar antes que llevarle a otro sitio.

Es exactamente lo que ue_item_clicked le devuelve, y exactamente lo que of_truncate, of_item o of_add_child vuelven a tomar: lo que recibe se reinyecta tal cual.


Un clic informa, no corta #

Hacer clic en un segmento no acorta la ruta. Subir significa salir de una pantalla, y salir de una pantalla suele significar guardar antes — algo que ningún clic puede decidir. El componente le dice qué se ha pulsado; quien corta es usted, con of_truncate, una vez pasadas sus comprobaciones.

Es el mismo reparto de papeles que en la stepbar, y por la misma razón. Un componente que se mueve solo obliga a la aplicación a deshacer un movimiento ya hecho, en vez de elegir simplemente si ocurre.

Dos segmentos no informan nunca de nada: uno deshabilitado, uno oculto. El último — donde se está — responde como los demás, hasta que ib_last_clickable diga que no.

// event ue_item_clicked : (string as_keys)
// Primero sus comprobaciones - salir de la pantalla lo decide usted, no un clic
if not of_peut_quitter() then return
uo_crumbs.of_truncate(/*keys*/ as_keys)
of_ouvrir_ecran(as_keys)

Cuando el camino es demasiado largo #

Un camino es tan largo como los datos lo hagan, y el ancho es el que es. is_overflow_mode dice qué cede.

ConstanteQué ocurre
OVERFLOW_COLLAPSEEl centro se pliega en un … que abre lo que oculta — el valor predeterminado
OVERFLOW_SCROLLLas etiquetas quedan enteras, la tira se desliza
OVERFLOW_SHRINKCada segmento cede terreno y acaba en puntos suspensivos

Ni el primer segmento ni el último se pliegan jamás. Perder la raíz es perder el ancla a la que todos vuelven; perder el final es perder el sitio en el que se está.

Un segmento plegado informa exactamente como los demás: elegirlo en el … lanza el mismo ue_item_clicked. Estar oculto por el ancho no cambia lo que un segmento significa.

ii_max_visible impone un techo firme, sea cual sea el sitio. Déjelo en 0 — el valor predeterminado — para que decida el ancho, que es lo que una ruta de navegación debería seguir normalmente.


El menú de hermanos #

of_add_child da a un segmento su propio desplegable: las otras ramas de ese nivel. Es lo que evita subir a la raíz para volver a bajar a la carpeta de al lado.

El chevron que sigue al segmento pasa entonces a ser el botón que las abre — es el mismo que el separador, como en el explorador de Windows: un solo chevron, un solo significado que aprender. Elegir una rama lanza ue_child_clicked, y también aquí la ruta no se mueve sola. Con el teclado, Flecha abajo en un segmento abre sus ramas, y en el … lo que oculta.

uo_crumbs.of_add_child(/*keys*/ "home/clients/durand", /*text*/ "D")
uo_crumbs.of_add_child(/*keys*/ "home/clients/martin", /*text*/ "M")

Las ramas bajo demanda #

Poner todas las ramas por adelantado no aguanta en un árbol profundo, ni en una base de datos. El explorador de Windows solo lee una carpeta cuando se abre su chevron; la ruta hace lo mismo: marque un segmento con ib_has_children, su chevron aparece de inmediato, y abrirlo lanza ue_children_needed. Usted pone las ramas en ese evento, y el menú se abre a su vuelta con lo que el segmento tenga en ese momento.

// El segmento promete : el chevron aparece, nada se lee
uo_crumbs.of_item(/*keys*/ "home/clients").ib_has_children = true

// En ue_children_needed(as_keys) : leido ahora, luego se abre el menu
uo_crumbs.of_clear_children(/*keys*/ as_keys)
uo_crumbs.of_add_child(/*keys*/ as_keys + "/durand", /*text*/ "Durand SARL")

Escribir la ruta #

Con ib_editable, la parte vacía de la barra se comporta como la barra de direcciones del explorador de Windows: un clic (o F2, o of_edit) convierte la ruta en un campo de texto con la dirección mostrada — las claves unidas por /, lo que of_path devuelve. Intro lanza ue_path_entered con el texto tal como se escribió; Esc cancela. La ruta no se mueve sola, por la misma razón por la que un clic no la acorta: solo su aplicación sabe qué significan las palabras. ii_edit_skip deja los primeros segmentos fuera del campo — la raíz que nombra la máquina — y los vuelve a poner delante de lo escrito al informar.


Propiedades #

PropiedadTipoPredeterminadoFunción
is_separatorstringchevronEl signo entre segmentos (constantes SEPARATOR_*). Se da la vuelta solo en una lengua que se escribe de derecha a izquierda: elija un significado, no una dirección. Un separador que abre ramas conserva el signo elegido: son el paso del ratón y el puntero los que dicen que se abre
is_overflow_modestringcollapseQué cede cuando el camino ya no cabe (constantes OVERFLOW_*). En scroll, la banda sigue el lugar actual
ii_max_visibleinteger0Techo firme del número de segmentos mostrados, sin contar el …. 0 lo deja al ancho
ib_last_clickablebooleantrue¿El último segmento — donde se está — responde al clic? Verdadero por omisión: una ruta sirve también para recargar lo que se mira, y lo que hace el clic es asunto de su aplicación. Póngalo a falso cuando su ruta solo navega
ib_editablebooleanfalse¿Se puede escribir la ruta? Verdadero: un clic en la parte vacía de la barra (o F2, o of_edit) convierte la ruta en un campo de texto con la dirección mostrada; Intro lanza ue_path_entered, Esc cancela. La ruta nunca se mueve sola
ib_allow_dropbooleanfalseOpt-in: acepta archivos soltados desde el Explorador de Windows sobre un segmento. El segmento bajo el puntero se ilumina durante el arrastre, y ue_drop_files lo nombra con las rutas completas
ii_edit_skipinteger0Número de segmentos iniciales que quedan fuera del campo de texto — una raíz que nombra la máquina no se escribe. Se vuelven a poner delante de lo escrito al informar: la dirección sigue completa
is_theme_stylestringfluentEstilo visual del componente (constantes THEME_STYLE_*)
is_theme_modestringlightVariante clara u oscura (constantes THEME_MODE_*)
il_theme_accentlong-1Color de acento de este componente (-1 = acento del tema)
is_tooltipstring""Tooltip simple mostrado al pasar el ratón por el componente
is_super_tooltip_titlestring""Título del tooltip enriquecido (prevalece sobre is_tooltip)
is_super_tooltip_textstring""Texto del tooltip enriquecido (se acepta el marcado enriquecido)
is_super_tooltip_imagestring""Imagen del tooltip enriquecido

Métodos #

MétodoFunción
of_add_item (string as_keys, string as_text)Añade un segmento al final: pasa a ser el lugar actual. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_add_item (string as_keys, string as_text, string as_image)Lo mismo, con el icono mostrado antes de la etiqueta — tercer argumento, como en toda la biblioteca. Una etiqueta vacía da un segmento de solo icono (la casa de la raíz). Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_insert_item (string as_keys, string as_text, integer ai_index)Inserta en la posición elegida (primera posición = 1). Una sobrecarga toma también el icono. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_remove_item (string as_keys)Quita un segmento; los demás conservan su estado. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_truncate (string as_keys)Elimina todo lo que sigue a ese segmento, que pasa a ser el lugar actual. Es el gesto para el que existe una ruta de navegación; una dirección desconocida no cambia nada. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_clear ( )Vacía la ruta. Devuelve 0 una vez aplicado, -2 si el componente no está creado
of_add_child (string as_keys, string as_text)Añade una rama hermana en la dirección indicada: el segmento de encima gana un chevron que las abre. Una sobrecarga toma también el icono. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_clear_children (string as_keys)Quita las ramas hermanas de un segmento; su chevron se va con ellas. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_remove_child (string as_keys)Quita una rama hermana, por su propia dirección; ida la última, el chevron vuelve a ser un simple separador. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_child (string as_keys)El handle de una rama hermana — la dirección que tomó of_add_child — para renombrarla, atenuarla u ocultarla
of_path ( )Las claves del camino mostrado, separadas por /. Leído en vivo: una aplicación que reconstruyera esta cadena a mano acabaría por no decir lo mismo que la pantalla
of_edit ( )Abre el campo de texto de la ruta — el mismo que un clic en la parte vacía de la barra — desde una entrada de menú o un botón suyo. Requiere ib_editable. Devuelve 0 una vez aplicado, -2 si el componente no está creado
of_item (string as_keys)El manejador de un segmento, para renombrarlo, atenuarlo u ocultarlo después
of_set_redraw (boolean)Agrupa una ráfaga de cambios en un solo renderizado. Devuelve 0 una vez aplicado, -2 si el componente no está creado
of_save_as_png (string) · of_save_as_jpg (string)Exporta el renderizado como imagen. Devuelve 0 una vez escrita la imagen, -4 si la escritura falla, -2 si el componente no está creado

Eventos #

EventoSe dispara cuando
ue_item_clicked (string as_keys)Se ha pulsado un segmento — en la ruta, o en el … que lo oculta. La ruta no se acorta sola: llame a of_truncate cuando sus comprobaciones hayan pasado
ue_item_rclicked (string as_keys)Clic derecho en un segmento — normalmente un menú contextual suyo
ue_child_clicked (string as_keys)Se ha elegido una rama hermana en el menú de un segmento; as_keys es la dirección de la rama, lista para volver a of_add_item
ue_children_needed (string as_keys)Se abre el chevron de un segmento marcado con ib_has_children: ponga sus ramas ahora (of_add_child), el menú se abre al volver del evento, con lo que el segmento tenga en ese momento. Se pregunta en cada apertura: vacíe y vuelva a poner cuando las ramas hayan podido cambiar, no haga nada cuando lo que hay sigue valiendo
ue_path_entered (string as_path)El usuario ha escrito una ruta en la barra (ib_editable) y ha pulsado Intro; as_path es el texto tal como se escribió. La ruta no se mueve sola: compruebe las palabras y reconstrúyala con of_clear y of_add_item si está de acuerdo
ue_drop_files (string as_keys, string as_files[])Se han soltado archivos desde el Explorador sobre un segmento (ib_allow_drop): as_keys es la dirección del segmento bajo el puntero, vacía si el soltado cayó junto a la ruta; as_files las rutas completas
ue_drag_enter ( ) · ue_drag_leave ( )Un arrastre de archivos desde el Explorador ha entrado en el componente, o ha salido sin soltar
ue_auto_height (long al_height)La barra anuncia la altura que necesita — una fila, decidida por la fuente y el tema; el userobject ya está redimensionado, recoloque lo que haya debajo
ue_ready ( )El componente ha terminado de cargar; todo lo enviado antes se ha vuelto a reproducir
ue_runtime_missing ( )El runtime WebView2 no está: el componente queda vacío
ue_bg_color (long al_color)El componente ha calculado su color de fondo del tema; el userobject ya lo ha adoptado (backcolor)

La ruta no navega. Dice dónde se está e informa de lo que se le pide; es su aplicación la que abre la pantalla — la misma acción, lanzada desde un menú o desde la ruta, pasa por el mismo código.


Propiedades de elemento #

PropiedadTipoPredeterminadoFunción
is_textstring""La etiqueta del segmento, modificable sin reconstruir la ruta (se acepta marcado enriquecido)
is_imagestring""El icono mostrado antes de la etiqueta (se aceptan los prefijos mono: y tint:)
ib_enabledbooleantrueUn segmento deshabilitado está atenuado y no informa de nada: el nivel existe en el camino, pero no se puede volver a él (permisos, una ficha en edición)
ib_visiblebooleantrueUn segmento oculto sale de la ruta, separador incluido — útil para un nivel técnico que no le incumbe al usuario. Se conserva: volver a mostrarlo no exige reconstrucción
ib_has_childrenbooleanfalseMarcado: hay algo bajo este segmento. Su chevron aparece sin nada detrás todavía, y abrirlo lanza ue_children_needed, donde las ramas se leen en ese momento. Un segmento cuyas ramas se pusieron con of_add_child no necesita la marca

Propiedades de un hijo #

Obtenida con of_child(dirección). El menú es un popup nativo: una propiedad cambiada mientras está abierto se ve en la siguiente apertura.

PropiedadTipoPredeterminadoFunción
is_textstring""La etiqueta de la rama en el menú
is_imagestring""El icono mostrado antes de la etiqueta
ib_enabledbooleantrueUna rama atenuada se queda en el menú y no se puede elegir — sin derechos sobre esa rama
ib_visiblebooleantrueUna rama oculta sale del menú sin ser eliminada; la última oculta cierra el chevron

Ejemplos #

Seguirlo al navegar #

uo_crumbs.of_set_redraw(/*on*/ false)
uo_crumbs.of_clear()
uo_crumbs.of_add_item(/*keys*/ "home", /*text*/ "H", /*image*/ "mono:img\packimages.dll:svg/samples/folder-open")
uo_crumbs.of_insert_item(/*keys*/ "home/region", /*text*/ "R", /*index*/ 2)
uo_crumbs.of_set_redraw(/*on*/ true)

Subir con un clic #

uo_crumbs.of_truncate(/*keys*/ "home/clients")
ls_chemin = uo_crumbs.of_path()

Un nivel prohibido, uno oculto #

// El nivel existe, pero no se puede volver a el
uo_crumbs.of_item(/*keys*/ "home/clients/orders").ib_enabled = false
// Y este no le incumbe al usuario : fuera de la ruta, separador incluido
uo_crumbs.of_item(/*keys*/ "home").ib_visible = false
uo_crumbs.is_separator = uo_crumbs.SEPARATOR_SLASH
uo_crumbs.is_overflow_mode = uo_crumbs.OVERFLOW_SCROLL
uo_crumbs.ii_max_visible = 4
uo_crumbs.ib_last_clickable = false
uo_crumbs.of_remove_item(/*keys*/ "home/region")
uo_crumbs.of_clear_children(/*keys*/ "home/clients")

Buenas prácticas #

Heredado de la base común #

Estos miembros existen en todos los componentes visuales — no son propios de este. Se detallan una sola vez, en los capítulos transversales; esta tabla solo dice dónde leerlos.

MiembrosFunciónDetallado en
of_count · of_keys_at · of_hasRecorrer lo que el componente contiene3.2 Los items
of_resetPoner el componente a cero3.6 Poner un componente a cero: of_reset()
of_register_shortcut · of_clear_shortcutsAtajos de teclado del componente3.5 Los atajos de teclado
of_is_created · of_is_ready · of_get_last_errorSi ha nacido, si está listo, qué ha fallado3.7 Diagnóstico
of_save_as_png · of_save_as_jpgExportar el render como imagen3.8 Exportar la representación como imagen
of_set_redrawAgrupar los cambios en un solo repintado3.10 Buenas prácticas
of_preload_iconsIconos mostrados sin retardoVisualización instantánea: of_icon
of_set_translationTraducir una etiqueta del componente5.2 Adaptar una etiqueta: of_set_translation
of_focus_webviewDar el foco al componente6.4 Teclado y foco
of_print · of_print_to_pdfImprimir, o escribir un PDF6.9 Imprimir
of_set_property · of_get_property · of_component_nameControlar una propiedad por su nombre3.1 El motor de propiedades

Dos ayudas no se heredan: of_icon y of_escape_markup viven en n_pbt_utils. Declare uno — n_pbt_utils lnv_utils, nada que crear — y llámelas sobre él.


← Referencia de componentes · Índice de la guía