PBToolboxAI v2 ← Site

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 #

Userobjectu_pbt_radialmenu
Classe di elementin_pbt_radialmenu_item (of_item(id))
Serve aOffrire una manciata di comandi frequenti dove la mano già si trova
PrincipioVoi 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àTipoPredefinitoRuolo
ii_max_sectorsinteger8Quanti 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_stylestringfluentStile visivo del componente (costanti THEME_STYLE_*)
is_theme_modestringlightVariante chiara o scura (costanti THEME_MODE_*)
il_theme_accentlong-1Colore di accento di questo componente (-1 = accento del tema)
is_tooltipstring""Descrizione comando semplice mostrata al passaggio sul componente
is_super_tooltip_titlestring""Titolo della descrizione arricchita (prevale su is_tooltip)
is_super_tooltip_textstring""Testo della descrizione arricchita (markup ricco accettato)
is_super_tooltip_imagestring""Immagine della descrizione arricchita

Metodi #

MetodoRuolo
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 #

EventoScatta 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àTipoPredefinitoRuolo
is_textstring""Etichetta del ramo. Tenetela breve: un settore è una fetta, non una riga — il mozzo scrive il resto
ib_enabledbooleantrueA falso il ramo è disattivato e il suo settore ignora ogni clic
ib_visiblebooleantrueA falso, il ramo esce dalla ruota — sotto-ruota compresa — senza essere rimosso; i settori si stringono, e torna com'era
ib_checkedbooleanfalseA 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 #

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.

MembriRuoloDescritto in
of_count · of_keys_at · of_hasPercorrere ciò che il componente contiene3.2 Gli item
of_resetRiportare il componente a zero3.6 Riportare un componente a zero: of_reset()
of_register_shortcut · of_clear_shortcutsScorciatoie da tastiera del componente3.5 Le scorciatoie da tastiera
of_is_created · of_is_ready · of_get_last_errorSe è nato, se è pronto, cosa è fallito3.7 Diagnostica
of_save_as_png · of_save_as_jpgEsportare il rendering in immagine3.8 Esportare il rendering come immagine
of_set_redrawRaggruppare le modifiche in un solo ridisegno3.10 Buone pratiche
of_preload_iconsIcone mostrate senza ritardoVisualizzazione istantanea: of_icon
of_set_translationTradurre una dicitura del componente5.2 Adattare un'etichetta: of_set_translation
of_focus_webviewDare il focus al componente6.4 Tastiera e focus
of_print · of_print_to_pdfStampare, o scrivere un PDF6.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.


← Riferimento dei componenti · Sommario della guida