RSS
 

XML SWT Design

20 nov

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.

 
2 Comments

Posted by Sébastien Letélié in Eclipse, Français

 
  • hackingcode

    Bon, ben rien de nouveau sous le soleil ;-)

    tu ferais bien de venir au barcamp de sun le 8 décembre tu devrais y voir des choses qui t’interesserons je pense.

    Autant je suis d’accord sur la méthode, autant je pense que les outils utilisés ne sons pas les bons…

    Mais suis-je reellement objectif ;-)

    dans tous les cas, une génération de XML UI en wysiwig permettant de faire du couplage lâche, cela existe déjà depuis longtemp … mais pas dans eclipse.

  • http://www.itaware.eu Sébastien Letélié

    tu veux parler de xwidglets je pense ? quels autres outils connais tu pour faire du WYSIWYG XML UI ? Pourquoi SWT et Eclipse ne seraient pas les bons outils pour cela ?
    Je ne pourrais pas être au barcamp le 8, je suis déjà pris dommage, j’aurais bien aimé en effet voir ces demos.