Après XSWT par Dave J. Orme pour SWT en XML, Tom Schindl l’a fait evoluer avec EXSWT.
Lorsque j’ai choisi RCP pour développer mes applications riches, j’ai commencé directement par créer mes UI avec du XML. Je pense que c’est la bonne méthode car ça réduit considérablement la taille de code (bien qu’aujourd’hui les editeurs Java le masque facilement), mais la plus importante raison est l’aspect couplage lâche et la capacité à avoir plusieurs version d’interfaces utilisateur. Par exemple si votre application est destinée à différents clients il est probable que certains utilisateurs voudront bénéficier de certaines parties personnalisées de l’interface. Une UI en XML est la meilleure approche pour répondre à cette attente. Par exemple l’utilisation de XInclude dans un fichier EXSWT vous donne la possibilité d’avoir une version spécifique d’une partie de votre UI en gérant la résolution de l’attribut « href ».
Voici quelques exemples EXSWT qui donnent une idée de la simplicité de composition d’UI avec cette méthode :
– Composite, Label, Text, ComboViewer
<w:composite background="#82cff1">
<a:layout x:class="gridLayout" f:numColumns="2" />
<w:label background="#82cff1" text="Raison :">
<a:layoutData x:class="gridData" f:horizontalAlignment="GridData.END" />
</w:label>
<w:text w:style="SWT.BORDER" x:id="callReason" font="Arial,10,SWT.BOLD">
<a:layoutData x:class="gridData" f:widthHint="320" f:horizontalAlignment="GridData.BEGINNING" />
</w:text>
<w:label background="#82cff1" text="Type :">
<a:layoutData x:class="gridData" f:horizontalAlignment="GridData.END" />
</w:label>
<v:comboViewer x:id="missionType" v:style="SWT.READ_ONLY" font="Arial,10,SWT.BOLD">
<a:combo.layoutData x:class="gridData" f:widthHint="120" f:horizontalAlignment="GridData.BEGINNING" />
</v:comboViewer>
</w:composite>
|
|
– TableViewer, Group, ToolBar
<w:group text="Victimes" background="#82cff1" x:id="victimGroup" enabled="false">
<a:layout x:class="gridLayout" f:numColumns="2" f:marginHeight="0" f:marginWidth="0" marginTop="5" f:verticalSpacing="4" />
<v:tableViewer x:id="victims" v:style="SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.FULL_SELECTION | SWT.HIDE_SELECTION" table.linesVisible="true" table.headerVisible="true">
<a:table.layoutData x:class="gridData" f:horizontalAlignment="GridData.FILL" f:grabExcessHorizontalSpace="true" f:heightHint="95" />
<v:tableViewerColumn column.text="Nom" x:id="victim.name" />
<v:tableViewerColumn column.text="Sexe/Age" x:id="victim.sexeAge" v:column.style="SWT.CENTER" />
<v:tableViewerColumn column.text="Motif" x:id="victim.motif" v:column.style="SWT.CENTER" />
<v:tableViewerColumn column.text="Transport" x:id="victim.transport" />
</v:tableViewer>
<w:toolBar background="#82cff1" w:style="SWT.FLAT | SWT.VERTICAL">
<w:toolItem toolTipText="Supprimer" x:id="victim.remove" />
<w:toolItem toolTipText="Ajouter" x:id="victim.add" />
<w:toolItem toolTipText="Exporter" x:id="victim.export" />
</w:toolBar>
</w:group>
|
|
– Combo, ListViewer, CDateTime (Nebula Widget)
<a:layout x:class="fillLayout" />
<w:composite background="#82cff1">
<a:layout x:class="gridLayout" f:marginHeight="0" f:marginWidth="0" />
<w:combo x:id="filter" w:style="SWT.READ_ONLY">
<a:layoutData x:class="gridData" f:horizontalAlignment="GridData.CENTER" f:grabExcessHorizontalSpace="true" f:widthHint="140" />
</w:combo>
<v:listViewer v:style="SWT.MULTI | SWT.BORDER | SWT.V_SCROLL" x:id="resources">
<a:list.layoutData x:class="gridData" f:horizontalAlignment="GridData.CENTER" f:verticalAlignment="GridData.FILL" f:grabExcessVerticalSpace="true" f:widthHint="140" />
</v:listViewer>
</w:composite>
<w:cDateTime background="#82cff1" x:id="takeAt" w:style="CDT.TIME_SHORT | CDT.BORDER | CDT.SIMPLE | CDT.CLOCK_12_HOUR">
</w:cDateTime>
|
|
Je rêve d’un jour où VE me générera mon code EXSWT en WYSIWYG.
A noter que Tom a aussi implémenté JFace Data Binding avec EXSWT (XBL) et il est simple de relier l’UI à son modèle de donnée dans le XML.
