1,6 → 1,9 |
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; |
7,6 → 10,7 |
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; |
14,7 → 18,9 |
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; |
23,6 → 29,7 |
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; |
33,10 → 40,13 |
import com.extjs.gxt.ui.client.widget.tree.TreeItem; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.user.client.Event; |
import com.google.gwt.user.client.Window; |
|
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; |
43,12 → 53,12 |
private StoreFilterField<Menu> filtre = null; |
private VerticalPanel sommairePanneau = null; |
private ContentPanel contenuPanneau = null; |
private HtmlContainer contenuHtml = null; |
private Html contenuHtml = null; |
|
public AideFenetre() { |
setBodyBorder(false); |
setButtons(Dialog.OK); |
setIconStyle("icone-appli-panneau-liste"); |
setIconStyle(ComposantClass.ICONE_PANNEAU_LISTE); |
setHeading("COEL - Aide"); |
setWidth(675); |
setHeight(400); |
57,8 → 67,9 |
|
// Panneau Ouest : sommaire |
sommairePanneau = new VerticalPanel(); |
sommairePanneau.setSpacing(8); |
sommairePanneau.addStyleName("x-small-editor"); |
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); |
68,6 → 79,7 |
|
// Chargement de l'arbre du sommaire et de son filtre |
chargerSommaireArbre(); |
attribuerIdAuxTreeItem(); |
sommairePanneau.add(filtre); |
sommairePanneau.add(arbre); |
|
77,8 → 89,9 |
// Barre d'outils |
Button imprimerBtn = new Button(null, new SelectionListener<ComponentEvent>() { |
public void componentSelected(ComponentEvent ce) { |
Window.print(); |
} |
//Print.it(contenuHtml.); |
GWT.log(contenuHtml.getHtml(), null); |
} |
}); |
imprimerBtn.setIconStyle(ComposantClass.ICONE_IMPRIMER); |
contenuPanneau.getHeader().insertTool(imprimerBtn, 0); |
86,16 → 99,26 |
add(contenuPanneau, contenuDisposition); |
|
// Chargement de la page racine |
// FIXME : apparement il faut ouvrir chaque menu pour pouvoir sélectionner la bonne page... Une meilleure solution doit exister. |
arbre.getItem(0).toggle(); |
arbre.getItem(0).getItem(0).toggle(); |
arbre.setSelectedItem(arbre.getItem(0).getItem(0).getItem(0)); |
selectionSommaire((String) arbre.getItem(0).getItem(0).getModel().get("code")); |
etendreArbre(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.setStyleName("no-icon"); |
arbre.getStyle().setLeafIconStyle(ComposantClass.ICONE_AIDE); |
|
magazin = new TreeStore<Menu>(); |
magazin.add(getSommaireArbreModele(), true); |
|
112,7 → 135,7 |
|
public void handleEvent(TreeEvent be) { |
TreeItem f = be.item; |
if (f.isLeaf()) { |
if (f.getModel() != null && f.getModel().get("code") != null) { |
selectionSommaire((String) f.getModel().get("code")); |
} |
} |
119,10 → 142,53 |
|
}); |
} |
|
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+"CoelAide/"+page; |
String aidePageUrl = serviceUrl+SERVICE_NOM+"/"+page; |
GWT.log("Sélection : "+aidePageUrl, null); |
chargerPageAide(aidePageUrl); |
} |
129,23 → 195,32 |
|
private void chargerPageAide(String url) { |
GWT.log("Charger : "+url, null); |
contenuHtml = new HtmlContainer() { |
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 lien |
if (e.getTypeInt()== Event.ONCLICK && e.getTarget().getTagName().equals("A")) { |
if (e.getTypeInt() == Event.ONCLICK && e.getTarget().getTagName().equals("A")) { |
e.preventDefault(); |
GWT.log("Clic : "+e.getTarget().getTagName()+"::"+e.getTarget().toString(), null); |
chargerPageAide(e.getTarget().toString()); |
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); |
} |
} |
}; |
contenuHtml.setId(ComposantId.PANNEAU_AIDE); |
contenuHtml.setWidth(400); |
contenuHtml.sinkEvents(Event.ONCLICK); |
contenuHtml.setUrl(url); |
contenuHtml.recalculate(); |
|
conteneurDuHtml.setId(ComposantId.PANNEAU_AIDE); |
conteneurDuHtml.setWidth(400); |
conteneurDuHtml.sinkEvents(Event.ONCLICK); |
conteneurDuHtml.setUrl(url); |
conteneurDuHtml.recalculate(); |
|
|
|
contenuPanneau.removeAll(); |
contenuPanneau.add(contenuHtml); |
contenuPanneau.add(conteneurDuHtml); |
contenuPanneau.layout(); |
} |
|
153,16 → 228,15 |
filtre = new StoreFilterField<Menu>() { |
@Override |
protected boolean doSelect(Store<Menu> magazin, Menu parent, Menu enregistrement, String propriete, String filtre) { |
Boolean retour = false; |
// Seul les feuilles sont traitées par le filtre |
if (enregistrement instanceof Menu) { |
return false; |
String nomMenu = enregistrement.getNom(); |
String nomMenuMinuscule = nomMenu.toLowerCase(); |
String nomFiltreMinuscule = filtre.toLowerCase(); |
if (nomMenuMinuscule.matches(".*"+nomFiltreMinuscule+".*")) { |
retour = true; |
} |
String nom = enregistrement.getNom(); |
nom = nom.toLowerCase(); |
if (nom.startsWith(filtre.toLowerCase())) { |
return true; |
} |
return false; |
return retour; |
} |
}; |
} |
170,22 → 244,26 |
|
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 Aide("Accueil", "AideCEL", "Jean-Pascal MILCENT", "debutant"), |
new Aide("S'identifier", "AideCoelIdentification", "Jean-Pascal MILCENT", "debutant"), |
new Aide("Institutions", "AideCoelInstitution", "Jean-Pascal MILCENT", "debutant"), |
new Aide("Collections", "AideCoelCollection", "Jean-Pascal MILCENT", "debutant"), |
new Aide("Personnes", "AideCoelPersonne", "Jean-Pascal MILCENT", "debutant"), |
new Aide("Publications", "AideCoelPublication", "Jean-Pascal MILCENT", "debutant") |
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 Aide("Régler les paramêtres", "AideCoelParametre", "Jean-Pascal MILCENT", "expert"), |
new Aide("Modifier ses préférences", "AideCoelPreference", "Jean-Pascal MILCENT", "expert") |
new Menu("Régler les paramêtres", "AideCoelParametre"), |
new Menu("Modifier ses préférences", "AideCoelPreference") |
}) |
}; |
|
Menu racine = new Menu("Sommaire"); |
Menu racine = pagePrincipale; |
for (int i = 0; i < menus.length; i++) { |
racine.add((Menu) menus[i]); |
} |