FlightGear/Un esempio di integrazione NASAL-XML: differenze tra le versioni

Wikibooks, manuali e libri di testo liberi.
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Riga 17: Riga 17:
<menu>
<menu>
<label>File</label>
<label>File</label>
<item> ... </item>
<item>
<item>
<label>Joystick Configuration</label>
<label>Joystick Configuration</label>
Riga 24: Riga 25:
</binding>
</binding>
</item>
</item>
<item> ... </item>
</menu>
</menu>
...
<menu> ... </menu>
...
...
</PropertyList>
</PropertyList>
</source>
</source>

Analizziamo ora questo script, intanto si nota che ogni voce di menu è definita all'interno dei tag <menu> ... </menu>, questi non hanno un limite, ma ovviamente non possono essere troppi altrimenti la barra orizzontale in alto diventerebbe troppo lunga. Normalmente conviene introdurre la nuova voce all'interno di un menu già esistente, può essere una buona scelta il menu con label '''File''' (''<label>File</label>'') che contiene varie chiamate a funzioni di ''servizio''. Ogni sottovoce di menu viene descritta tra i tag ''<item> ... </item>'' anche i singoli items hanno una label che non è altro la scritta visualizzata nel menu a tendina, nel nostro caso la label è: ''<label>'''Joystick Configuration'''</label>''. A questo punto inizia la parte più importante, ovvero la chiamata alla finestra che verrà mostrata al fine di permettere la visualizzazione e modifica dei parametri. Questa finestra è anche essa descritta tramite un codice XML, questa finestra si chiama ''finestra di dialogo''. Viene attivata all'interno di una connessione (''binding'') tra due differenti insiemi di codici.

Versione delle 14:56, 7 mar 2012

L'integrazione tra l'XML e il linguaggio di script Nasal può non essere banale ad un primo approccio da parte anche di chi ha programmato, ma sicuramente un esempio pratico può dare molte più possibilità di comprensione.
L'esempio che si inserisce in questo capitolo è relativo alla aggiunta della funzionalità di configurazione del joystick che stranamente manca in FlightGear. Questa funzionalità è richiesta dal fatto che normalmente i joystick commerciali non hanno una buona stabilità sugli assi. Normalmente i 3-4 assi dovrebbero rilasciare un valore numerico tra -1 ed 1, ma in realtà questo valore può cambiare ad esempio tra -0,7 a 0,8, non solo ma lo zero ben difficilmente è 0, spesso è un valore tra -0,2 a 0,2. Tutto questo fa si che pilotare un aereo spesso è più difficile di quanto in realtà non sia.
È utile anche poter inserire un parametro che permette di dare una risposta meno lineare, come del resto avviene nella realtà.

Nota: Questo esempio è stato realizzato su di una macchina con sistema operativo Linux e quindi gli esempi sono fatti con notazione tipica di questo ambiente. Il FlightGear installato è la versione che viene compilata localmente e che quindi risulta aggiornata sempre alla ultima release di sviluppo. Questa versione può avere delle differenze rispetto a quella installata nelle varie distribuzioni di Linux e negli altri sistemi operativi come Windows e Mac OS. Comunque una persona con un minimo di pratica di programmazione non dovrebbe incontrare particolari problemi.
Il miglior sistema operativo per lo sviluppo: quasi tutto l'ambiente FlightGear è inizialmente sviluppato su macchine Linux, questo non impedisce che si possa fare le stesse cose su Windows o su Mac OS, ma sicuramente è più difficile trovare pratici sistemi di sviluppo e sicuramente l'organizzazione di questi sistemi non è così pratica per lo sviluppo come lo è invece Linux. Quindi un consiglio, per chi vuole mettere le mani all'interno del codice di FlightGear, è quello di utilizzare una qualsiasi distribuzione Linux per lo sviluppo, magari sfruttando un sistema di emulazione.

Organizzare il menu

La costruzione della applicazione inizia realizzandone un punto di avvio per mezzo di una voce di menu gestita tramite codice XML che è il mezzo di programmazione della GUI (Graphic User Interface). Questa fase va fatta a programma spento in quanto non è possibile verificarla fin quando non si riavvia l'applicazione.

Comando di avvio dal menu principale

Il file da modificare è il menubar.xml che si trova in $FG_ROOT/fgdata/gui che contiene tutte le voci di menu nella forma:

  <PropertyList>
    ...
    <menu>
      <label>File</label>
      <item> ... </item>
      <item>
        <label>Joystick Configuration</label>
          <binding>
             <command>dialog-show</command>
             <dialog-name>joystick-configuration</dialog-name>
	  </binding>
      </item>
      <item> ... </item>
    </menu>
    ...
    <menu> ... </menu>
    ...
  </PropertyList>

Analizziamo ora questo script, intanto si nota che ogni voce di menu è definita all'interno dei tag <menu> ... </menu>, questi non hanno un limite, ma ovviamente non possono essere troppi altrimenti la barra orizzontale in alto diventerebbe troppo lunga. Normalmente conviene introdurre la nuova voce all'interno di un menu già esistente, può essere una buona scelta il menu con label File (<label>File</label>) che contiene varie chiamate a funzioni di servizio. Ogni sottovoce di menu viene descritta tra i tag <item> ... </item> anche i singoli items hanno una label che non è altro la scritta visualizzata nel menu a tendina, nel nostro caso la label è: <label>Joystick Configuration</label>. A questo punto inizia la parte più importante, ovvero la chiamata alla finestra che verrà mostrata al fine di permettere la visualizzazione e modifica dei parametri. Questa finestra è anche essa descritta tramite un codice XML, questa finestra si chiama finestra di dialogo. Viene attivata all'interno di una connessione (binding) tra due differenti insiemi di codici.