02.07.2013 Views

article de presse - Cap Data Consulting

article de presse - Cap Data Consulting

article de presse - Cap Data Consulting

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

P ratique<br />

String editorArea = layout.getEditorArea();<br />

layout.setEditorAreaVisible(false);<br />

layout.setFixed(true);<br />

layout.addStandaloneView(MyView.ID,<br />

false,<br />

IPageLayout.LEFT,<br />

1.0f, editorArea);<br />

}<br />

Ce co<strong>de</strong> mérite d'être commenté pas à pas. Nous commençons par obtenir<br />

l'i<strong>de</strong>ntificateur <strong>de</strong> la zone <strong>de</strong> l'éditeur par défaut. Ensuite, nous <strong>de</strong>mandons<br />

au gestionnaire <strong>de</strong> masquer cette zone. Puis nous ajoutons notre vue dans<br />

l'emplacement <strong>de</strong> la zone <strong>de</strong> l'éditeur qui est donc remplacée par notre vue.<br />

Si vous mettez la <strong>de</strong>uxième ligne en commentaire, la vue apparaît à gauche<br />

<strong>de</strong> l'éditeur comme illustré, mais elle rési<strong>de</strong> dans la zone <strong>de</strong> l'éditeur.<br />

Si vous voulez obtenir un résultat <strong>de</strong> ce<br />

genre mais plus raffiné, c'est-à-dire avec une<br />

vue à gauche <strong>de</strong> l'éditeur, mais en <strong>de</strong>hors<br />

<strong>de</strong> sa zone, alors vous ajouterez un emplacement<br />

pour la vue dans la page au moyen<br />

<strong>de</strong> la métho<strong>de</strong><br />

Ajout d'une vue<br />

sans masquage <strong>de</strong> l'éditeur.<br />

IPageLayout.AddPlaceHol<strong>de</strong>r().<br />

Notre vue est ajoutée en tant que vue autonome(<br />

Standalone), ce qui signifie qu'elle ne<br />

peut être arrimée. Nous remarquons que la métho<strong>de</strong> addStandaloneView ne<br />

reçoit pas une référence sur un objet. Nous travaillons avec Eclipse, pas avec<br />

Swing. La métho<strong>de</strong> reçoit simplement un i<strong>de</strong>ntificateur, c'est à dire une chaîne.<br />

Le runtime va alors examiner les points d'extensions "Views" dans le<br />

<strong>de</strong>scriptif XML, et s'il trouve l'i<strong>de</strong>ntificateur, il instanciera lui même la classe<br />

mise en correspondance et notre vue apparaîtra. Mais pour l'instant, ni la<br />

classe ni son i<strong>de</strong>ntificateur n'existent. Nous nous en occupons maintenant.<br />

3<br />

Plein la vue<br />

Revenez à l'éditeur <strong>de</strong> plug-in, au besoin en double-cliquant sur plugin.xml<br />

dans l'explorateur. Puis, dans l'éditeur, sélectionnez l'onglet extension. A ce<br />

point, cliquez sur le bouton Add. Dans le dialogue qui suit, sélectionnez<br />

org.eclipse.ui.views puis cliquez sur 'Finish', ce qui vous ramène à l'éditeur.<br />

Cliquez alors sur org.eclipse.ui.views avec le bouton droit et dans le menu<br />

contextuel, sélectionnez 'View'. Remplissez ensuite les champs en haut à<br />

droite comme ceci<br />

id: monrcp.myview<br />

name: monrcp.myview<br />

class: monrcp.MyView<br />

L'éditeur <strong>de</strong><br />

plug-in, volet<br />

extensions.<br />

La classe MyView n'existe pas encore. Ajoutez la à votre projet en la faisant<br />

dériver <strong>de</strong> org.eclipse.ui.part.ViewPart. Le terme Part apparaît, car<br />

nous passons à la concrétisation <strong>de</strong> la vue. On pourrait alors penser que<br />

la classe serait mieux nommée MyPart. Disons que ce n'est pas l'habitu<strong>de</strong><br />

sous Eclipse, sans doute pour l'homogénéité <strong>de</strong>s informations<br />

dans le <strong>de</strong>scriptif XML. Ebauchons le co<strong>de</strong> <strong>de</strong> la classe.<br />

public class MyView extends ViewPart<br />

implements PaintListener {<br />

public static final String ID = "monrcp.myview";<br />

}<br />

private Canvas canvas;<br />

private Display display;<br />

private Color red;<br />

private final String texte = "Programmez!";<br />

public void createPartControl(Composite parent) {<br />

canvas = new Canvas(parent, SWT.Paint);<br />

canvas.addPaintListener(this);<br />

display = canvas.getDisplay();<br />

red = display.getSystemColor(SWT.COLOR_RED);<br />

}<br />

Notre classe se déclare comme implémentant PaintListener afin <strong>de</strong> s'enregistrer<br />

comme écouteur d'événement <strong>de</strong> <strong>de</strong>ssin. Nous verrons l'implémentation<br />

plus loin. Remarquons la présence du membre ID dont la valeur est<br />

la même que celle déclarée dans le <strong>de</strong>scriptif XML. Le constructeur <strong>de</strong> notre<br />

classe ne fait rien. Quand le runtime a instancié notre classe, il invoque sa<br />

métho<strong>de</strong> createPartControl. Dans celle-ci nous instancions un composant<br />

enfant Canvas, puis nous nous abonnons aux événements <strong>de</strong> <strong>de</strong>ssin. Enfin,<br />

nous <strong>de</strong>mandons un objet préfabriqué en prévision du <strong>de</strong>ssin. Toutefois, le<br />

système ne peut pas toujours nous fournir tout ce dont nous avons besoin.<br />

4<br />

Programmez n°85 78 avril 2006<br />

Mais café la police ?<br />

Niveau<br />

java facile avancé expert<br />

Ajout d'un branchement sur le point<br />

d'extension org.eclipse.ui.views.<br />

Nous abordons un point très particulier <strong>de</strong> la programme Eclipse/Java: la gestion<br />

<strong>de</strong> ressources. En effet, dès que nous travaillons avec <strong>de</strong>s widgets, nous<br />

travaillons avec SWT, et SWT <strong>de</strong>man<strong>de</strong> au programmeur <strong>de</strong> gérer la libération<br />

d'objets comme contexte graphique (GC), polices, etc. par la métho<strong>de</strong><br />

dispose <strong>de</strong> l'objet concerné. Pour chaque classe SWT utilisée, la première<br />

chose à faire est <strong>de</strong> consulter la documentation afin <strong>de</strong> savoir si effective-

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!