Rev 69 | Rev 324 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.composants;import java.util.Iterator;import java.util.List;import org.tela_botanica.client.ComposantClass;import org.tela_botanica.client.ComposantId;import org.tela_botanica.client.RegistreId;import org.tela_botanica.client.modeles.Aide;import org.tela_botanica.client.modeles.Configuration;import org.tela_botanica.client.modeles.Menu;import org.tela_botanica.client.util.Print;import com.extjs.gxt.ui.client.Events;import com.extjs.gxt.ui.client.Registry;import com.extjs.gxt.ui.client.Style.LayoutRegion;import com.extjs.gxt.ui.client.Style.Scroll;import com.extjs.gxt.ui.client.binder.TreeBinder;import com.extjs.gxt.ui.client.data.BaseTreeModel;import com.extjs.gxt.ui.client.event.BaseEvent;import com.extjs.gxt.ui.client.event.ComponentEvent;import com.extjs.gxt.ui.client.event.HtmlContainerEvent;import com.extjs.gxt.ui.client.event.Listener;import com.extjs.gxt.ui.client.event.SelectionListener;import com.extjs.gxt.ui.client.event.TreeEvent;import com.extjs.gxt.ui.client.store.Store;import com.extjs.gxt.ui.client.store.TreeStore;import com.extjs.gxt.ui.client.util.Margins;import com.extjs.gxt.ui.client.widget.ContentPanel;import com.extjs.gxt.ui.client.widget.Dialog;import com.extjs.gxt.ui.client.widget.Html;import com.extjs.gxt.ui.client.widget.HtmlContainer;import com.extjs.gxt.ui.client.widget.StoreFilterField;import com.extjs.gxt.ui.client.widget.VerticalPanel;import com.extjs.gxt.ui.client.widget.button.Button;import com.extjs.gxt.ui.client.widget.layout.BorderLayout;import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;import com.extjs.gxt.ui.client.widget.tree.Tree;import com.extjs.gxt.ui.client.widget.tree.TreeItem;import com.google.gwt.core.client.GWT;import com.google.gwt.user.client.Event;public class AideFenetre extends Dialog {private static final String SERVICE_NOM = "CoelAide";private static final String PAGE_A_OUVRIR_CODE = "AideCoelPresentationGenerale";private static Menu pagePrincipale = null;private static TreeItem treeItemAOuvrirParDefaut = null;private Tree arbre = null;private TreeStore<Menu> magazin = null;private TreeBinder<Menu> binder = null;private StoreFilterField<Menu> filtre = null;private VerticalPanel sommairePanneau = null;private ContentPanel contenuPanneau = null;private Html contenuHtml = null;public AideFenetre() {setBodyBorder(false);setButtons(Dialog.OK);setIconStyle(ComposantClass.ICONE_PANNEAU_LISTE);setHeading("COEL - Aide");setWidth(675);setHeight(400);setHideOnButtonClick(true);setLayout(new BorderLayout());// Panneau Ouest : sommairesommairePanneau = new VerticalPanel();sommairePanneau.setSpacing(5);// FIXME : plutôt que d'utiliser ce style propre à GXT faudrait utiliser une méthode...sommairePanneau.setStyleName("x-panel-body");BorderLayoutData sommaireDisposition = new BorderLayoutData(LayoutRegion.WEST, 200, 175, 250);sommaireDisposition.setMargins(new Margins(0, 5, 0, 0));sommaireDisposition.setSplit(true);sommaireDisposition.setCollapsible(true);sommaireDisposition.setFloatable(true);add(sommairePanneau, sommaireDisposition);// Chargement de l'arbre du sommaire et de son filtrechargerSommaireArbre();attribuerIdAuxTreeItem();sommairePanneau.add(filtre);sommairePanneau.add(arbre);// Panneau Central : contenucontenuPanneau = new ContentPanel();contenuPanneau.setScrollMode(Scroll.AUTO);// Barre d'outilsButton imprimerBtn = new Button(null, new SelectionListener<ComponentEvent>() {public void componentSelected(ComponentEvent ce) {//Print.it(contenuHtml.);GWT.log(contenuHtml.getHtml(), null);}});imprimerBtn.setIconStyle(ComposantClass.ICONE_IMPRIMER);contenuPanneau.getHeader().insertTool(imprimerBtn, 0);BorderLayoutData contenuDisposition = new BorderLayoutData(LayoutRegion.CENTER);add(contenuPanneau, contenuDisposition);// Chargement de la page racineetendreArbre(treeItemAOuvrirParDefaut);//selectionSommaire((String) arbre.getItem(0).getItem(0).getModel().get("code"));selectionSommaire(pagePrincipale.getCode());}private void etendreArbre(TreeItem treeItemAOuvrir) {arbre.setSelectedItem(treeItemAOuvrir);arbre.expandPath(arbre.getSelectedItem().getPath());}private void etendreArbre(String treeItemId) {arbre.setSelectedItem(chercherTreeItemParItemId(treeItemId));arbre.expandPath(arbre.getSelectedItem().getPath());}private void chargerSommaireArbre() {arbre = new Tree();arbre.getStyle().setLeafIconStyle(ComposantClass.ICONE_AIDE);magazin = new TreeStore<Menu>();magazin.add(getSommaireArbreModele(), true);binder = new TreeBinder<Menu>(arbre, magazin);binder.setAutoLoad(true);binder.setDisplayProperty("nom");binder.init();inititialiserSommaireArbreFiltre();filtre.bind(magazin);filtre.setWidth(170);filtre.setToolTip("Filtrer le sommaire");arbre.addListener(Events.OnClick, new Listener<TreeEvent>(){public void handleEvent(TreeEvent be) {TreeItem f = be.item;if (f.getModel() != null && f.getModel().get("code") != null) {selectionSommaire((String) f.getModel().get("code"));}}});}private void attribuerIdAuxTreeItem() {List<TreeItem> liste = arbre.getAllItems();Iterator<TreeItem> it = liste.iterator();while(it.hasNext()) {TreeItem ti = (TreeItem) it.next();if (ti.isLeaf()) {String code = (String) ti.getModel().get("code");ti.setItemId(code);definirPageAOuvrirParDefaut(ti);}}}private TreeItem chercherTreeItemParItemId(String itemIdAChercher) {TreeItem treeItemTrouve = null;if (itemIdAChercher != null) {String itemIdAChercherEnMinuscule = itemIdAChercher.toLowerCase();List<TreeItem> liste = arbre.getAllItems();Iterator<TreeItem> it = liste.iterator();while(it.hasNext()) {TreeItem ti = (TreeItem) it.next();if (ti.getModel() != null) {String codePageAide = (String) ti.getModel().get("code");if (codePageAide != null) {String codePageAideEnMinuscule = codePageAide.toLowerCase();if (itemIdAChercherEnMinuscule.equals(codePageAideEnMinuscule)) {treeItemTrouve = ti;break;}}}}}return treeItemTrouve;}private void definirPageAOuvrirParDefaut(TreeItem menu) {String code = menu.getModel().get("code");if (PAGE_A_OUVRIR_CODE.equals(code)) {treeItemAOuvrirParDefaut = menu;}}private void selectionSommaire(String page) {String serviceUrl = ((Configuration) Registry.get(RegistreId.CONFIG)).getServiceBaseUrl();String aidePageUrl = serviceUrl+SERVICE_NOM+"/"+page;GWT.log("Sélection : "+aidePageUrl, null);chargerPageAide(aidePageUrl);}private void chargerPageAide(String url) {GWT.log("Charger : "+url, null);HtmlContainer conteneurDuHtml = new HtmlContainer() {public void onBrowserEvent(Event e) {// Nous vérifions que l'évenement est un clic et qu'il a lieu sur un lienif (e.getTypeInt() == Event.ONCLICK && e.getTarget().getTagName().equals("A")) {e.preventDefault();String urlPageAideCible = e.getTarget().toString();chargerPageAide(urlPageAideCible);String codePageAideCible = urlPageAideCible.substring(urlPageAideCible.lastIndexOf("/")+1);etendreArbre(codePageAideCible);GWT.log("Clic : "+urlPageAideCible+"::"+codePageAideCible, null);} else {GWT.log("Event :"+e.getType(), null);}}};conteneurDuHtml.setId(ComposantId.PANNEAU_AIDE);conteneurDuHtml.setWidth(400);conteneurDuHtml.sinkEvents(Event.ONCLICK);conteneurDuHtml.setUrl(url);conteneurDuHtml.recalculate();contenuPanneau.removeAll();contenuPanneau.add(conteneurDuHtml);contenuPanneau.layout();}private void inititialiserSommaireArbreFiltre() {filtre = new StoreFilterField<Menu>() {@Overrideprotected boolean doSelect(Store<Menu> magazin, Menu parent, Menu enregistrement, String propriete, String filtre) {Boolean retour = false;// Seul les feuilles sont traitées par le filtreString nomMenu = enregistrement.getNom();String nomMenuMinuscule = nomMenu.toLowerCase();String nomFiltreMinuscule = filtre.toLowerCase();if (nomMenuMinuscule.matches(".*"+nomFiltreMinuscule+".*")) {retour = true;}return retour;}};}public static Menu getSommaireArbreModele() {// TODO : charger automatiquement l'arbre depuis le contenu de la page wikini de sommaire...pagePrincipale = new Menu("Accueil", "AideCoelAccueil");Menu[] menus = new Menu[] {new Menu("Débuter avec COEL", new BaseTreeModel[] {new Menu("Présentation rapide", "AideCoelPresentationGenerale"),new Menu("Comment s'identifier", "AideCoelCommentIdentifier"),new Menu("Pourquoi s'identifier", "AideCoelPourquoiIdentifier")}),new Menu("Les menus", new BaseTreeModel[] {new Menu("Institutions", "AideCoelInstitution"),new Menu("Collections", "AideCoelCollection"),new Menu("Personnes", "AideCoelPersonne"),new Menu("Publications", "AideCoelPublication")}),new Menu("Aller plus loin...", new BaseTreeModel[] {new Menu("Régler les paramêtres", "AideCoelParametre"),new Menu("Modifier ses préférences", "AideCoelPreference")})};Menu racine = pagePrincipale;for (int i = 0; i < menus.length; i++) {racine.add((Menu) menus[i]);}return racine;}/*** Sur une fermeture on fait un fadeOut.**//*protected void onButtonPressed(Button btn) {if (this.isHideOnButtonClick()) {// FIXME : apparament le fade In/Fade Out pose problème sur les navigateurs...//this.el().fadeOut(FxConfig.NONE);} else {super.onButtonPressed(btn);}}*/}