Kitty

Kitty
Aros Mascotte By Eric Schwartz

mercoledì 13 luglio 2011

Sempre sui MUI Menu

Siamo a metà luglio e fa un caldo boia.
Rebulator è andato avanti e i menu sono completi da un pò.
In questi giorni sto affrontando l'uso dei font per i singoli oggetti.
Qualcuno dirà: e che c'è da studiare sui font? Risposta: poi si vedrà...

Ritornando ai nostri bravi menu...

Come dicevo si tratta di creare la nostra menu strip e definire le nostre voci di menu, sottomenu e i loro attributi.
Qualche tempo fa accennavo alla struttura newmenu.
Cos'è nello specifico?
E'una struttura che contiene "la descrizione" di tutte le singole voci di menu con gli attributi.
L'uso di strutture per definire oggetti è una pratica che nasce "prima" dell'epoca degli oggetti.
Non per niente, in mui, che è object oriented grazie a boopsi, è vero che si può usare la struttura NewMenu ma, contemporaneamente, si può usare anche la gestione diretta degli oggetti in tempo reale.
Per carità ognuno ha o suoi gusti, io ho preferito optare per la seconda possibilità visto che MUI mi dava tale possibilità.
Spiegheremo anche la NewMenu ma prima parleremo dell'implementazione dei menu di rebulator alla maniera di MUI.
Riporto un frammento di codice che definisce i menu in rebulator 0.4:

La prima riga crea l'oggetto menustrip (notare il cast verso IPTR sennò Gcc rompe)
MUIA_Application_Menustrip, (IPTR)(MenustripObject,
La seconda crea invece il primo menu come oggetto Child della classe family (MUIA_Family_Child).
MUIA_Menu_Title come dice il nome imposta il nome del menu

MUIA_Family_Child,(IPTR)(MenuObject,MUIA_Menu_Title, "Rebulator",
Qui, sempre come oggetto child, creiamo (MUI_MakeObject) un Menuitem (cioè una voce di menu) a nome "About, che abbia come lettera di tastiera per selezionarlo (con il tasto amiga) la lettera "A" e che non abbia altre particolarità (0,0) a questo associo una variabile oggetto "infomenu"
MUIA_Family_Child, (IPTR)(infomenu = MUI_MakeObject(MUIO_Menuitem,"About", "A", 0,0)),
Idem qui:creo una voce di menu Quit associata a un oggetto quit.
MUIA_Family_Child, (IPTR) (quit = MUI_MakeObject(MUIO_Menuitem, "Quit", "Q",0,0)),
Lo end chiude "il menu object": i menu item non hanno bisogno di end!!
End),

Secondo menu chiamato Tools!
MUIA_Family_Child, (IPTR) (MenuObject,
MUIA_Menu_Title, "Tools",
Oops... ma come? prima di chiudere con un End il menu Tools aggiungo, non un menu item, bensì un altro oggetto menu (menuobject) chiamato keys?
Ebbene si: inserire un oggetto menu in un altro oggetto menu è la maniera di MUI per creare... I SOTTOMENU!!!
Niente di più semplice ma non so quanto tempo ho penato per capirlo (giuro per puro caso) Non c'è scritto da nessuna parte nella documentazione se non buttato la, in maniera peraltro semplicistica, nell'introduzione al capitolo dei menu. Roba che io le introduzioni non le leggo manco di solito...
MUIA_Family_Child, (IPTR) (MenuObject,
MUIA_Menu_Title, "Keys",
Qui riprende il flusso congeniale: un menu item per il nostro menu!! il suo titolo è base ed è associato all'oggetto "menu_standard", ed ha alcune particolarità:
1) possiede l'attributo MUIA_Menuitem_Checkit, TRUE: serve a dire che la voce di menu è "checkabile", cioè il click su di esso fa apparire un segno di spunta vicino al suo nome (per impostare qualcosa...)
2)

MUIA_Family_Child,(IPTR) (menu_standard = MenuitemObject, MUIA_Menuitem_Title, (IPTR)"Base",
MUIA_Menuitem_Shortcut, (IPTR) "b", MUIA_Menuitem_Checkit, TRUE, MUIA_Menuitem_Checked, TRUE, MUIA_Menuitem_Exclude, 2+4+8, End),


MUIA_Family_Child,(IPTR) (menu_extended = MenuitemObject, MUIA_Menuitem_Title, (IPTR)"+Extended",
MUIA_Menuitem_Shortcut, (IPTR) "x", MUIA_Menuitem_Checkit, TRUE, MUIA_Menuitem_Exclude, 1+4+8, End),

MUIA_Family_Child, (IPTR) (menu_trigonometric = MenuitemObject, MUIA_Menuitem_Title, (IPTR)"+Trigonometric",
MUIA_Menuitem_Shortcut, (IPTR) "t", MUIA_Menuitem_Checkit, TRUE, MUIA_Menuitem_Exclude, 1+2+8,End),




End),
End),
End),