XUL et SWT

Cette section explique pas à pas comment interpréter un fichier XUL qui contient une textbox en SWT à l'aide de Tk-UI . Le fichier XUL avec le contenu suivant :
<page>
  <vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" >
    <hbox>
      <textbox id="expression" flex="1" />
    </hbox>
  </vbox>
</page>

sera interprété en SWT pour donner la fenétre suivante :

XUL

Créer le fichier xul/calc.xul dans votre projet avec le contenu suivant :
<page>
  <vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" >
    <hbox>
      <textbox id="expression" flex="1" />
    </hbox>
  </vbox>
</page>
Voici une explication du contenu de ce fichier :
  • Dans ce cas ci, l'élement racine XUL est vbox . Il est associé au namespace http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul qui est obligatoire car il permet d'indiquer à Tk-UI que la grammaire à utiliser est XUL.
  • Les valeurs possibles pour l'élement racine XUL sont box , vbox et hbox .
  • L'élement XML page ne sert a rien dans notre cas, mais il permet de montrer qu'il est possible de mettre n'importe qu'elle XML avant la description XUL.
  • L'attribut flex de la textbox permet d'indiquer que la textbox prend 100% de la place fournit par la fenêtre. Le redimensionnement de la fenêtre redimensionnera la textbox.

Java

Créer la classe SwtXULCalc dans votre projet :
package org.akrogen.tkui.samples.calc;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import org.akrogen.tkui.core.ITkuiConfiguration;
import org.akrogen.tkui.core.TkuiConfigurationFactory;
import org.akrogen.tkui.core.dom.ITkuiDocument;
import org.akrogen.tkui.core.gui.IGuiBuilder;
import org.akrogen.tkui.core.loader.ITkuiLoader;
import org.akrogen.tkui.grammars.xul.loader.XulLoader;
import org.akrogen.tkui.gui.swt.SwtGuiBuilderImpl;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class SwtXULCalc {

	public static void main(String[] args) {
		try {
			// 1. Get Tkui Builder
			TkuiConfigurationFactory factory = TkuiConfigurationFactory
					.newInstance();
			ITkuiConfiguration configuration = factory.getConfiguration();

			// 2. Register SWT Builder into TK-UI configuration
			IGuiBuilder swtGuiBuilder = new SwtGuiBuilderImpl();
			configuration.registerGuiBuilder(swtGuiBuilder);
			String guiId = swtGuiBuilder.getId();

			// 3. Register Tk-UI XUL Loader
			ITkuiLoader xulLoader = XulLoader.getInstance();
			configuration.registerTkuiLoader(xulLoader);

			// 4. Instanciate SWT Shell
			Display display = new Display();
			Shell shell = new Shell(display, SWT.SHELL_TRIM);
			FillLayout layout = new FillLayout();
			shell.setLayout(layout);

			// 5. Get Instance of XULDocumentImpl
			// guiId =swtGui
			ITkuiDocument xulDocument = xulLoader.newDocument(guiId, shell);

			// 6. Load XUL source stream into XUL DOM Document
			File f = new File("xul/calc.xul");
			InputStream sourceStream = new FileInputStream(f);
			xulLoader.load(sourceStream, xulDocument);

			// 7. Display SWT Shell
			shell.pack();
			shell.open();

			while (!shell.isDisposed()) {
				if (!display.readAndDispatch())
					display.sleep();
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
Voici une explication de la classe :
  • Etape 1 : récupèration d'une Configuration Tk-UI . La configuration Tk-UI contient toutes les informations pour rendre un fichier de description d'UI, comme :
    • les renderer disponibles comme SWT, Swing, SwingX, SWT Form...
    • les grammaires disponibles comme XUL, XHTML...
    • d'autres informations comme les URI Resolver (pour retrouver le chemin des ressources comme les images).

    Remarque : les étapes 1, 2 et 3 qui consistent à initialiser la configuration Tk-Ui peuvent étre effectuées qu'une seule fois. Une fois la configuration initalisée, il est possible de la stocker dans un singleton et l'utiliser dans votre application.

  • Etape 2 : enregistrement du renderer SWT à l'aide du SWT Builder fourni par défaut par Tk-UI.
  • Etape 3 : enregistrement de la grammaire XUL à l'aide du XUL loader fourni par défaut par Tk-UI.
  • Etape 4 : Création du conteneur SWT Shell .
  • Etape 5 : récupération d'une instance d'un DOM Document XUL à l'aide du XUL Loader. Lors de cette initialisation, le shell SWT est passé au DOM Document ainsi que l'ID du GUI Builder (dans notre cas swt) à utiliser pour rendre la description XUL.
  • Etape 6 : chargement du DOM Document XUL à l'aide du XUL Loader pour créer les élements SWT de la description du fichier XUL et les attacher ensuite au Shell SWT.
  • Etape 7 : affichage du Shell SWT .