jeudi 3 mai 2012

BreadCrumbs / Fil d'ariane

 Exemple de rendu:
Tous mes panels de contenu étant chargé dans un Layout du panel principal HomePanel celui ci offre la possibilité d'afficher une sorte de fil d'ariane.
La classe abstraite dont hérite tous ces panels de contenus implémente les deux méthode addAriane et clearAriane et déclare la méthode abstraite majAriane qu'implémente  les panels de contenu.
La méthode addAriane a pour paramètre le libelle de ce qui va apparaitre dans la section du fil d'ariane et  une référence vers le panel à charger si l'utilisateur clique sur cette section. Si le deuxième paramètre est null la section exposera juste le texte qui correspond en fait au panel ou on est rendu dans la navigation.
Le fil d'ariane est rendu à l'aide d'un ToolStrip composé de bouton (un par section).
La méthode addAriane implémentée dans HomePanel permet d'ajouter des boutons séparé par un ToolStripSeparator.

public void addAriane(String lien,final ContentPanel p){
 Canvas[] lesBoutons =  this.ariane.getMembers();
 int nbrButtons = lesBoutons.length;
 if(nbrButtons >0){
  this.ariane.addSeparator();
 }
 if(p!=null){
   ToolStripButton btnLien = new ToolStripButton(lien);
   btnLien.setTitleStyle("plUnderline");
   btnLien.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() {
 @Override
 public void onClick(ClickEvent event) {
       chargePanel(p); //charge le panel dans HomePanel              
}
});
this.ariane.addButton(btnLien);
}else{
  ToolStripButton btnLien = new ToolStripButton(lien);
  btnLien.setDisabled(true);
  btnLien.setShowDisabled(false);
  this.ariane.addButton(btnLien);
}
}
   
/**
 * Nettoie le fil d'ariane.
*/
public void clearAriane(){
   Canvas[] lesBoutons =  this.ariane.getMembers();
   int nbrButtonss = lesBoutons.length;
   if(nbrButtonss != 0){
   this.ariane.removeMembers(lesBoutons);   
   if(nbrButtonss !=0){
    for (int i =0 ;i < nbrButtonss;i++){
    lesBoutons[i].destroy();
    }
   }   
}
}

@Override
public void majAriane() {
   clearAriane();
   addAriane("Home", MyAppContext.getHomePanel());       addAriane("The panel where I come from",
MyAppContext.getThePanelWhereIComeFrom());
addAriane("The panel where I am", null);
}


All my content panels are loaded in a Layout of the main panel HomePanel and this one offer a some sort of breadcrumbs.
The abstract class from which are derived all the content panels implement the two methods  addAriane and clearAriane and declare the abstract method majAriane implémented by the content panels.
The addAriane method get some parameters: the label of the section , a reference to the panel which be loaded if the user click on the section, if this parameter is null only text will be displayed as it is the last eleemnt of the breadcrumb, where we are.
The breadcrumb is rendered usin a Toolstrip composed of a buttons set (one per section).
 addAriane method  implemented in HomePanel allow to add buttons separated by a ToolStripSeparator.