radialmenu — u_pbt_radialmenu #
← Riferimento dei componenti · Sommario della guida
Menu contestuale radiale: i comandi a corona attorno al cursore, scelti per direzione anziché letti in un elenco.
▶ Vederlo dal vivo — Applicazione dimostrativa, riquadro Radial menu: l'anteprima, il codice che lo produce e questa pagina, affiancati.
In breve #
| Userobject | u_pbt_radialmenu |
| Classe di elementi | n_pbt_radialmenu_item (of_item(id)) |
| Serve a | Offrire una manciata di comandi frequenti dove la mano già si trova |
| Principio | Voi descrivete i rami; la ruota, la forma e la navigazione sono affar nostro |
Avvio rapido #
// 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
Aprire, poi scegliere #
La ruota si apre al rilascio del tasto destro, e serve un secondo clic per scegliere. Non è un dettaglio implementativo: se si aprisse alla pressione, il rilascio di quello stesso clic selezionerebbe subito il settore capitato sotto il cursore, e l'utente lancerebbe un comando senza averlo visto.
Per questo of_show() si chiama dall'evento di clic destro del controllo su cui l'utente compie il gesto (uno statictext, un button, una griglia…): a quel punto il tasto è già alzato, e il clic successivo è davvero quello che sceglie. Il menu radiale, di suo, non ha alcuna superficie — quindi nessun evento del mouse.
Il componente in sé è invisibile: non occupa spazio nella finestra. Mettetelo ovunque, con larghezza e altezza nulle — esiste solo finché la ruota è aperta.
Il mozzo centrale scrive per esteso il ramo puntato, ed è ciò che permette a un settore di portare un'etichetta breve senza mentire su ciò che fa. Un clic sul mozzo chiude la ruota; dentro una sotto-ruota, risale di un livello.
// It opens when the right button is released: see ue_rclicked
uo_wheel.of_show()
Le sotto-ruote #
Un indirizzo aggancia rami sotto un altro: export/pdf. Scegliere il ramo padre non sceglie nulla: la ruota viene sostituita da quella dei suoi figli, e il mozzo diventa la via del ritorno.
Perché sostituire invece di aggiungere una seconda corona? Perché un anello esterno dimezzerebbe i settori a ogni livello. Otto rami sono già il massimo leggibile; non c'è spazio per mostrarne due livelli insieme.
L'evento ue_item_selected riporta il percorso completo (export/pdf), non il solo identificatore della foglia. Due sotto-ruote possono quindi chiamare i loro rami allo stesso modo.
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")
Quando i rami sono troppi #
Una ruota si legge per direzione, e oltre gli otto settori le fette smettono di distinguersi. ii_max_sectors fissa questo tetto (da 3 a 12, 8 per impostazione predefinita).
I rami in eccesso non vanno persi: l'ultimo posto della corona diventa un ramo che li contiene tutti e che si apre come sotto-ruota. Un menu che lasciasse cadere la coda sarebbe un menu che mente su ciò che offre.
Stringere la corona è spesso un guadagno: quattro rami larghi si mirano più in fretta di otto stretti.
Proprietà #
| Proprietà | Tipo | Predefinito | Ruolo |
|---|---|---|---|
ii_max_sectors | integer | 8 | Quanti rami può portare una corona (da 3 a 12). Ciò che eccede passa sotto un ultimo ramo che si apre come sotto-ruota |
is_theme_style | string | fluent | Stile visivo del componente (costanti THEME_STYLE_*) |
is_theme_mode | string | light | Variante chiara o scura (costanti THEME_MODE_*) |
il_theme_accent | long | -1 | Colore di accento di questo componente (-1 = accento del tema) |
is_tooltip | string | "" | Descrizione comando semplice mostrata al passaggio sul componente |
is_super_tooltip_title | string | "" | Titolo della descrizione arricchita (prevale su is_tooltip) |
is_super_tooltip_text | string | "" | Testo della descrizione arricchita (markup ricco accettato) |
is_super_tooltip_image | string | "" | Immagine della descrizione arricchita |
Metodi #
| Metodo | Ruolo |
|---|---|
of_add_item (string as_keys, string as_text) | Aggiunge un ramo alla ruota; l'identificatore torna indietro quando viene scelto. Restituisce 0 una volta applicato, -2 se il componente non è creato |
of_add_item (string as_keys, string as_text, string as_image, boolean ab_checked) | Lo stesso, con l'icona e il segno — l'icona come terzo argomento, come ovunque altrove nella libreria. Un ramo si disattiva tramite la sua maniglia: of_item(keys).ib_enabled = false. Restituisce 0 una volta applicato, -2 se il componente non è creato |
of_clear ( ) | Svuota la ruota. Restituisce 0 una volta applicato, -2 se il componente non è creato |
of_show ( ) | Apre la ruota centrata sul cursore. Da chiamare dal clic destro del controllo che riceve il gesto |
of_show (long al_x, long al_y) | Lo stesso, centrata su una posizione schermo in pixel |
of_item (string as_keys) | Restituisce la maniglia di un ramo per modificarlo in seguito (etichetta, attivo, segnato) |
of_reset ( ) | Svuota la ruota e riporta ogni proprietà al suo valore d'origine. Restituisce 0 una volta applicato, -2 se il componente non è creato |
Eventi #
| Evento | Scatta quando |
|---|---|
ue_item_selected (string as_keys) | L'utente ha scelto un ramo. as_keys è il percorso completo (export/pdf), non il solo identificatore della foglia |
ue_dismissed ( ) | La ruota si è chiusa senza che alcun ramo fosse scelto: clic sul mozzo, clic all'esterno o tasto Esc |
La finestra della ruota è rotonda: gli angoli lasciano passare i clic verso l'applicazione retrostante, invece di inghiottirli in un quadrato invisibile.
Proprietà di elemento #
| Proprietà | Tipo | Predefinito | Ruolo |
|---|---|---|---|
is_text | string | "" | Etichetta del ramo. Tenetela breve: un settore è una fetta, non una riga — il mozzo scrive il resto |
ib_enabled | boolean | true | A falso il ramo è disattivato e il suo settore ignora ogni clic |
ib_visible | boolean | true | A falso, il ramo esce dalla ruota — sotto-ruota compresa — senza essere rimosso; i settori si stringono, e torna com'era |
ib_checked | boolean | false | A vero un punto segna il ramo come attivo |
Esempi #
Una ruota per contesto #
// 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)
Reagire al percorso scelto #
// 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
Segnare, disattivare, stringere #
// 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
Buone pratiche #
- Aprite al RILASCIO del clic destro del controllo, mai alla pressione. È ciò che separa l'aprire dallo scegliere, e all'utente servono entrambi.
- Etichette brevi. Una o due parole. Il mozzo è lì per il testo intero, il settore per la direzione.
- Da quattro a sei rami battono otto. Una ruota si ricorda per posizione; meno posizioni ci sono, più in fretta si imparano.
- Mettete i comandi più frequenti in alto e in basso. Sono le due direzioni che la mano raggiunge senza pensarci.
- Tenete l'ordine stabile da un'apertura all'altra: tutto il senso di una ruota è che il gesto finisca per precedere la lettura.
- Un menu radiale non sostituisce un menu a elenco. Venti comandi rari si leggono meglio in un elenco; riservate la ruota alla manciata che si usa di continuo.
Ereditato dalla base comune #
Questi membri esistono su tutti i componenti visivi — non sono propri di questo. Sono descritti una sola volta, nei capitoli trasversali; questa tabella dice solo dove leggerli.
| Membri | Ruolo | Descritto in |
|---|---|---|
of_count · of_keys_at · of_has | Percorrere ciò che il componente contiene | 3.2 Gli item |
of_reset | Riportare il componente a zero | 3.6 Riportare un componente a zero: of_reset() |
of_register_shortcut · of_clear_shortcuts | Scorciatoie da tastiera del componente | 3.5 Le scorciatoie da tastiera |
of_is_created · of_is_ready · of_get_last_error | Se è nato, se è pronto, cosa è fallito | 3.7 Diagnostica |
of_save_as_png · of_save_as_jpg | Esportare il rendering in immagine | 3.8 Esportare il rendering come immagine |
of_set_redraw | Raggruppare le modifiche in un solo ridisegno | 3.10 Buone pratiche |
of_preload_icons | Icone mostrate senza ritardo | Visualizzazione istantanea: of_icon |
of_set_translation | Tradurre una dicitura del componente | 5.2 Adattare un'etichetta: of_set_translation |
of_focus_webview | Dare il focus al componente | 6.4 Tastiera e focus |
of_print · of_print_to_pdf | Stampare, o scrivere un PDF | 6.9 Stampare |
Due aiuti non sono ereditati: of_icon e of_escape_markup vivono su n_pbt_utils. Ne dichiari uno — n_pbt_utils lnv_utils, niente da creare — e li chiami su di esso.