Home > Guide veloci, programmazione > Guida gtk+ a puntate ( XIX parte )

Guida gtk+ a puntate ( XIX parte )

Come promesso qualche giorno fa ecco la guida alle gtk+ riguardante i menu, questa lezione sarà un po’ diversa in quanto invece di spiegare solamente le singole funzioni o eventuali particolari che tralascerò mi concentrerò sul spiegare passo passo la creazione di un menu facendo riferimento allo stile che adotto io per crearli ( una volta poi studiate e capite le funzioni ognuno sarà libero di creare un proprio stile con cui si trova meglio ).

Costruiamo un semplice menu 

Prima di iniziare con menu più articolati vorrei iniziare con un piccolissimo menu giusto per vedere le funzioni principali. Per iniziare abbiamo bisogno dei seguenti widget:

1
2
3
 GtkWidget *window;
 GtkWidget *bar;
 GtkWidget *file, *view, *help;

Dunque, innanzitutto bisogna creare la barra in cui memorizzare i singoli menu, l’unica funzione utilizzabile è gtk_menu_bar_new ()  che non riceve argomenti e restituisce il widget che punta alla nuova barra di menu. Una barra di menu può avere come attributo il tipo di ordinamento dei vari widget che può essere uno dei seguenti:

  • GTK_PACK_DIRECTION_LTR -> Le varie voci del menu saranno messe da sinistra verso destra ( quando non si imposta nessuna di queste opzioni questo è il comportamento predefinito ).
  • GTK_PACK_DIRECTION_RTL -> Le voci saranno orientate da destra verso sinistra.
  • GTK_PACK_DIRECTION_TTB -> Le voci saranno orientate dall’alto verso il basso.
  • GTK_PACK_DIRECTION_BTT -> Le voci saranno orientate dal basso verso l’alto.

Una volta scelto il tipo di orientamento che si vuol dare agli elementi si può utilizzare la funzione gtk_menu_bar_set_pack_direction () nel seguente modo:

1
2
 bar = gtk_menu_bar_new ();
 gtk_menu_bar_set_pack_direction (GTK_MENU_BAR (bar), GTK_PACK_DIRECTION_BTT);

Siamo ancora all’inizio del lavoro, perchè ora dovremo creare: i menu grafici principali ( quelli che si vedono nella barra dei menu ) e i menu astratti ognuno dei quali bisognerà collegarlo a un menu grafico principale così da poter inserire gli elementi ( o meglio le operazioni ) di ogni singolo menu. Dunque partiamo con solo una barra di menu con i menu grafici senza sotto-menu:

1
2
3
4
5
6
7
8
 file = gtk_menu_item_new_with_label ("File");
 gtk_menu_shell_append (GTK_MENU_SHELL (bar), file);
 
 view = gtk_menu_item_new_with_label ("Visualizza");
 gtk_menu_shell_append (GTK_MENU_SHELL (bar), view);
 
 help = gtk_menu_item_new_with_label ("Aiuto");
 gtk_menu_shell_append (GTK_MENU_SHELL (bar), help);

I menu principali della barra solitamente si crea con solo il testo, senza utilizzare checkbutton, radiobutton o icone associate come invece succede per le voci del menu, per fare ciò si utilizza come si può vedere la funzione gtk_menu_item_new_with_label () che riceve come argomento il label da utilizzare e ritorna il widget riguardante il menu principale da inserire nella barra dei menu.Un menu principale si può anche allineare a destra ( mentre l’azione predefinita che eseguono le gtk+ è quella di allinearli a sinistra ) tramite la funzione gtk_menu_item_set_right_justified ().Continuando, per inserire poi il menu nella barra si utilizza la funzione gtk_menu_shell_append () per inserire il nuovo menu in coda agli altri, gtk_menu_shell_prepend () per inserirlo prima degli altri o in alternativa gtk_menu_shell_insert () per impostare manualmente il punto in cui inserirlo, questa funzione come si può immagine oltre ai primi due parametri ( GtkMenuShell che sarà la nostra barra convertita con la macro GTK_MENU_SHELL () e il GtkWidget rappresentate il nostro menu principale ) anche un intero che rappresenta la posizione in cui inserire il menu che va da 0 ( inizio ) a N-1 ( dove N è il numero dei menu inseriti ).Per velocizzare le operazioni di inserimento delle voci dei vari menu nella prossima puntata creeremo delle funzioni apposite perchè come potete immaginare richiamare tante funzioni per ogni singola operazione rende il lavoro di creazione lungo, stancante e poco mantenibile.

Fine Diciannovesima Puntata
Preferisco fermarmi qui per ora perchè inserire le voci sarà abbastanza lungo da spiegare.
Ciauz ;)

  1. Nessun commento ancora...
  1. Nessun trackback ancora...