PBToolboxAI v3 ← Site

radialmenu — u_pbt_radialmenu #

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

Menú contextual radial: los comandos en corona alrededor del cursor, elegidos por su dirección en lugar de leídos en una lista.

▶ Verlo en vivo — Aplicación de demostración, mosaico Radial menu: la vista previa, el código que lo produce y esta página, lado a lado.


En resumen #

Userobjectu_pbt_radialmenu
Clase de elementosn_pbt_radialmenu_item (of_item(id))
Sirve paraOfrecer un puñado de comandos frecuentes donde la mano ya está
PrincipioUsted describe las ramas; la rueda, la forma y la navegación son cosa nuestra

Inicio rápido #

// A wheel built for whatever is under the cursor
uo_wheel.of_add_item(/*keys*/ "cut",    /*text*/ "Cut")
uo_wheel.of_add_item(/*keys*/ "copy",   /*text*/ "Copy")
uo_wheel.of_add_item(/*keys*/ "paste",  /*text*/ "Paste")
uo_wheel.of_add_item(/*keys*/ "delete", /*text*/ "Delete")
// It opens when the right button is released: see ue_rclicked

Abrir y luego elegir #

La rueda se abre al soltar el botón derecho, y hace falta un segundo clic para elegir. No es un detalle de implementación: si se abriera al pulsar, el soltado de ese mismo clic seleccionaría de inmediato el sector caído bajo el cursor, y el usuario lanzaría un comando sin haberlo visto.

Por eso of_show() se llama desde el evento de clic derecho del control sobre el que el usuario hace el gesto (un statictext, un button, una rejilla…): en ese instante el botón ya está arriba, y el clic siguiente es realmente el que elige. El menú radial en sí no tiene superficie — por tanto ningún evento de ratón propio.

El componente en sí es invisible: no ocupa sitio en la ventana. Colóquelo donde sea, con anchura y altura cero — solo existe mientras la rueda está abierta.

El cubo central deletrea por entero la rama señalada, y eso es lo que permite a un sector llevar una etiqueta corta sin mentir sobre lo que hace. Hacer clic en el cubo cierra la rueda; dentro de una sub-rueda, sube un nivel.

// It opens when the right button is released: see ue_rclicked
uo_wheel.of_show()

Las sub-ruedas #

Una dirección cuelga ramas bajo otra: export/pdf. Elegir la rama padre no elige nada: la rueda es sustituida por la de sus hijos, y el cubo pasa a ser la vuelta atrás.

¿Por qué sustituir en lugar de añadir una segunda corona? Porque un anillo exterior dividiría los sectores por dos en cada nivel. Ocho ramas ya es el máximo legible; no hay sitio para mostrar dos niveles a la vez.

El evento ue_item_selected informa de la ruta completa (export/pdf), no del identificador de la hoja sola. Dos sub-ruedas pueden por tanto nombrar sus ramas igual.

uo_wheel.of_add_item(/*keys*/ "export", /*text*/ "Export")
uo_wheel.of_add_item(/*keys*/ "export/pdf", /*text*/ "PDF")
uo_wheel.of_add_item(/*keys*/ "export/csv", /*text*/ "CSV")

Cuando hay demasiadas ramas #

Una rueda se lee por dirección, y más allá de ocho sectores las porciones dejan de distinguirse. ii_max_sectors fija ese tope (de 3 a 12, 8 por defecto).

Las ramas sobrantes no se pierden: el último lugar de la corona pasa a ser una rama que las contiene todas y que se abre como sub-rueda. Un menú que dejara caer su cola sería un menú que miente sobre lo que ofrece.

Estrechar la corona suele salir a cuenta: cuatro ramas anchas se apuntan más deprisa que ocho estrechas.


Propiedades #

PropiedadTipoPredeterminadoFunción
ii_max_sectorsinteger8Cuántas ramas puede llevar una corona (3 a 12). Lo que sobra pasa bajo una última rama que se abre como sub-rueda
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""Información sobre herramientas simple al pasar por encima del componente
is_super_tooltip_titlestring""Título de la información enriquecida (tiene prioridad sobre is_tooltip)
is_super_tooltip_textstring""Texto de la información enriquecida (se acepta marcado enriquecido)
is_super_tooltip_imagestring""Imagen de la información enriquecida

Métodos #

MétodoFunción
of_add_item (string as_keys, string as_text)Añade una rama a la rueda; el identificador vuelve cuando se elige. Devuelve 0 una vez aplicado, -2 si el componente no está creado
of_add_item (string as_keys, string as_text, string as_image, boolean ab_checked)Lo mismo, con el icono y la marca — el icono como tercer argumento, como en todo el resto de la biblioteca. Una rama se atenúa mediante su manejador: of_item(keys).ib_enabled = false. Devuelve 0 una vez aplicado, -2 si el componente no está creado
of_clear ( )Vacía la rueda. Devuelve 0 una vez aplicado, -2 si el componente no está creado
of_show ( )Abre la rueda centrada en el cursor. Llámelo desde el clic derecho del control que recibe el gesto
of_show (long al_x, long al_y)Lo mismo, centrada en una posición de pantalla en píxeles
of_item (string as_keys)Devuelve el asa de una rama para modificarla después (etiqueta, activa, marcada)
of_reset ( )Vacía la rueda y devuelve todas las propiedades a su valor de origen. Devuelve 0 una vez aplicado, -2 si el componente no está creado

Eventos #

EventoSe dispara cuando
ue_item_selected (string as_keys)El usuario ha elegido una rama. as_keys es la ruta completa (export/pdf), no el identificador de la hoja sola
ue_dismissed ( )La rueda se cerró sin que se eligiera ninguna rama: clic en el cubo, clic fuera o tecla Escape

La ventana de la rueda es redonda: las esquinas dejan pasar los clics hacia la aplicación de detrás, en lugar de tragárselos en un cuadrado invisible.


Propiedades de elemento #

PropiedadTipoPredeterminadoFunción
is_textstring""Etiqueta de la rama. Manténgala corta: un sector es una porción, no una línea — el cubo deletrea el resto
ib_enabledbooleantrueA falso, la rama queda atenuada y su sector ignora todo clic
ib_visiblebooleantrueA falso, la rama sale de la rueda — subrueda incluida — sin ser eliminada; los sectores se cierran, y vuelve tal cual
ib_checkedbooleanfalseA verdadero, un punto marca la rama como activa

Ejemplos #

Una rueda por contexto #

// A wheel built for whatever is under the cursor
uo_wheel.of_clear()
uo_wheel.of_add_item(/*keys*/ "bold", /*text*/ "Bold", /*image*/ "mono:img\packimages.dll:svg/samples/bold", /*checked*/ true)
uo_wheel.of_add_item(/*keys*/ "find", /*text*/ "Find", /*image*/ "mono:img\packimages.dll:svg/samples/find", /*checked*/ false)

Reaccionar a la ruta elegida #

// ue_item_selected event of the radial menu
// as_keys carries the full path, e.g. "export/pdf"
choose case as_keys
	case "export/pdf"
		of_exporter_pdf()
	case "delete"
		of_supprimer()
end choose

Marcar, atenuar, estrechar #

// Mark a branch as being on
uo_wheel.of_item(/*key*/ "bold").ib_checked = true
// Grey out the one that makes no sense here
uo_wheel.of_item(/*key*/ "paste").ib_enabled = false
uo_wheel.ii_max_sectors = 4

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