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 #
| Userobject | u_pbt_radialmenu |
| Clase de elementos | n_pbt_radialmenu_item (of_item(id)) |
| Sirve para | Ofrecer un puñado de comandos frecuentes donde la mano ya está |
| Principio | Usted 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 #
| Propiedad | Tipo | Predeterminado | Función |
|---|---|---|---|
ii_max_sectors | integer | 8 | Cuá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_style | string | fluent | Estilo visual del componente (constantes THEME_STYLE_*) |
is_theme_mode | string | light | Variante clara u oscura (constantes THEME_MODE_*) |
il_theme_accent | long | -1 | Color de acento de este componente (-1 = acento del tema) |
is_tooltip | string | "" | Información sobre herramientas simple al pasar por encima del componente |
is_super_tooltip_title | string | "" | Título de la información enriquecida (tiene prioridad sobre is_tooltip) |
is_super_tooltip_text | string | "" | Texto de la información enriquecida (se acepta marcado enriquecido) |
is_super_tooltip_image | string | "" | Imagen de la información enriquecida |
Métodos #
| Método | Funció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 #
| Evento | Se 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 #
| Propiedad | Tipo | Predeterminado | Función |
|---|---|---|---|
is_text | string | "" | Etiqueta de la rama. Manténgala corta: un sector es una porción, no una línea — el cubo deletrea el resto |
ib_enabled | boolean | true | A falso, la rama queda atenuada y su sector ignora todo clic |
ib_visible | boolean | true | A falso, la rama sale de la rueda — subrueda incluida — sin ser eliminada; los sectores se cierran, y vuelve tal cual |
ib_checked | boolean | false | A 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 #
- Abra al SOLTAR el clic derecho del control, nunca al pulsar. Es lo que separa abrir de elegir, y el usuario necesita ambas cosas.
- Etiquetas cortas. Una o dos palabras. El cubo está para el texto entero, el sector para la dirección.
- De cuatro a seis ramas superan a ocho. Una rueda se recuerda por la posición; cuantas menos posiciones, antes se aprenden.
- Ponga los comandos más frecuentes arriba y abajo. Son las dos direcciones que la mano alcanza sin pensar.
- Mantenga el orden estable de una apertura a otra: todo el interés de una rueda es que el gesto acabe precediendo a la lectura.
- Un menú radial no sustituye a un menú de lista. Veinte comandos raros se leen mejor en una lista; reserve la rueda para el puñado que se usa sin parar.
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.
| Miembros | Función | Detallado en |
|---|---|---|
of_count · of_keys_at · of_has | Recorrer lo que el componente contiene | 3.2 Los items |
of_reset | Poner el componente a cero | 3.6 Poner un componente a cero: of_reset() |
of_register_shortcut · of_clear_shortcuts | Atajos de teclado del componente | 3.5 Los atajos de teclado |
of_is_created · of_is_ready · of_get_last_error | Si ha nacido, si está listo, qué ha fallado | 3.7 Diagnóstico |
of_save_as_png · of_save_as_jpg | Exportar el render como imagen | 3.8 Exportar la representación como imagen |
of_set_redraw | Agrupar los cambios en un solo repintado | 3.10 Buenas prácticas |
of_preload_icons | Iconos mostrados sin retardo | Visualización instantánea: of_icon |
of_set_translation | Traducir una etiqueta del componente | 5.2 Adaptar una etiqueta: of_set_translation |
of_focus_webview | Dar el foco al componente | 6.4 Teclado y foco |
of_print · of_print_to_pdf | Imprimir, o escribir un PDF | 6.9 Imprimir |
of_set_property · of_get_property · of_component_name | Controlar una propiedad por su nombre | 3.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.