Subversion Repositories eFlore/Applications.coel

Rev

Rev 66 | Rev 311 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
61 jpm 1
package org.tela_botanica.client.composants;
2
 
66 jpm 3
 
69 jpm 4
import org.tela_botanica.client.ComposantClass;
66 jpm 5
import org.tela_botanica.client.ComposantId;
6
import org.tela_botanica.client.RegistreId;
7
import org.tela_botanica.client.modeles.Aide;
8
import org.tela_botanica.client.modeles.Configuration;
9
import org.tela_botanica.client.modeles.Menu;
10
 
11
import com.extjs.gxt.ui.client.Events;
12
import com.extjs.gxt.ui.client.Registry;
61 jpm 13
import com.extjs.gxt.ui.client.Style.LayoutRegion;
66 jpm 14
import com.extjs.gxt.ui.client.Style.Scroll;
15
import com.extjs.gxt.ui.client.binder.TreeBinder;
16
import com.extjs.gxt.ui.client.data.BaseTreeModel;
69 jpm 17
import com.extjs.gxt.ui.client.event.ComponentEvent;
66 jpm 18
import com.extjs.gxt.ui.client.event.Listener;
69 jpm 19
import com.extjs.gxt.ui.client.event.SelectionListener;
66 jpm 20
import com.extjs.gxt.ui.client.event.TreeEvent;
21
import com.extjs.gxt.ui.client.store.Store;
22
import com.extjs.gxt.ui.client.store.TreeStore;
61 jpm 23
import com.extjs.gxt.ui.client.util.Margins;
24
import com.extjs.gxt.ui.client.widget.ContentPanel;
25
import com.extjs.gxt.ui.client.widget.Dialog;
66 jpm 26
import com.extjs.gxt.ui.client.widget.HtmlContainer;
27
import com.extjs.gxt.ui.client.widget.StoreFilterField;
28
import com.extjs.gxt.ui.client.widget.VerticalPanel;
61 jpm 29
import com.extjs.gxt.ui.client.widget.button.Button;
30
import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
31
import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;
66 jpm 32
import com.extjs.gxt.ui.client.widget.tree.Tree;
33
import com.extjs.gxt.ui.client.widget.tree.TreeItem;
34
import com.google.gwt.core.client.GWT;
35
import com.google.gwt.user.client.Event;
36
import com.google.gwt.user.client.Window;
61 jpm 37
 
38
public class AideFenetre extends Dialog {
39
 
66 jpm 40
	private Tree arbre = null;
69 jpm 41
	private TreeStore<Menu> magazin = null;
42
	private TreeBinder<Menu> binder = null;
43
	private StoreFilterField<Menu> filtre = null;
66 jpm 44
	private VerticalPanel sommairePanneau = null;
45
	private ContentPanel contenuPanneau = null;
46
	private HtmlContainer contenuHtml = null;
47
 
61 jpm 48
	public AideFenetre() {
49
		setBodyBorder(false);
69 jpm 50
		setButtons(Dialog.OK);
51
		setIconStyle("icone-appli-panneau-liste");
61 jpm 52
		setHeading("COEL - Aide");
66 jpm 53
		setWidth(675);
54
		setHeight(400);
61 jpm 55
		setHideOnButtonClick(true);
66 jpm 56
		setLayout(new BorderLayout());
61 jpm 57
 
66 jpm 58
		// Panneau Ouest : sommaire
59
		sommairePanneau = new VerticalPanel();
60
		sommairePanneau.setSpacing(8);
61
		sommairePanneau.addStyleName("x-small-editor");
69 jpm 62
		BorderLayoutData sommaireDisposition = new BorderLayoutData(LayoutRegion.WEST, 200, 175, 250);
66 jpm 63
		sommaireDisposition.setMargins(new Margins(0, 5, 0, 0));
64
		sommaireDisposition.setSplit(true);
65
		sommaireDisposition.setCollapsible(true);
66
		sommaireDisposition.setFloatable(true);
67
		add(sommairePanneau, sommaireDisposition);
61 jpm 68
 
66 jpm 69
		// Chargement de l'arbre du sommaire et de son filtre
70
		chargerSommaireArbre();
71
		sommairePanneau.add(filtre);
72
		sommairePanneau.add(arbre);
61 jpm 73
 
66 jpm 74
		// Panneau Central : contenu
75
		contenuPanneau = new ContentPanel();
76
		contenuPanneau.setScrollMode(Scroll.AUTO);
69 jpm 77
		// Barre d'outils
78
		Button imprimerBtn = new Button(null, new SelectionListener<ComponentEvent>() {
79
			public void componentSelected(ComponentEvent ce) {
80
				Window.print();
81
			}
82
		});
83
		imprimerBtn.setIconStyle(ComposantClass.ICONE_IMPRIMER);
84
		contenuPanneau.getHeader().insertTool(imprimerBtn, 0);
66 jpm 85
		BorderLayoutData contenuDisposition = new BorderLayoutData(LayoutRegion.CENTER);
86
		add(contenuPanneau, contenuDisposition);
87
 
88
		// Chargement de la page racine
69 jpm 89
		// FIXME : apparement il faut ouvrir chaque menu pour pouvoir sélectionner la bonne page... Une meilleure solution doit exister.
90
		arbre.getItem(0).toggle();
91
		arbre.getItem(0).getItem(0).toggle();
92
		arbre.setSelectedItem(arbre.getItem(0).getItem(0).getItem(0));
93
		selectionSommaire((String) arbre.getItem(0).getItem(0).getModel().get("code"));
61 jpm 94
	}
95
 
66 jpm 96
	private void chargerSommaireArbre() {
97
		arbre = new Tree();
69 jpm 98
		arbre.setStyleName("no-icon");
99
		magazin = new TreeStore<Menu>();
66 jpm 100
		magazin.add(getSommaireArbreModele(), true);
101
 
69 jpm 102
		binder = new TreeBinder<Menu>(arbre, magazin);
66 jpm 103
		binder.setAutoLoad(true);
104
		binder.setDisplayProperty("nom");
105
		binder.init();
106
 
107
		inititialiserSommaireArbreFiltre();
108
		filtre.bind(magazin);
69 jpm 109
		filtre.setWidth(170);
110
		filtre.setToolTip("Filtrer le sommaire");
66 jpm 111
		arbre.addListener(Events.OnClick, new Listener<TreeEvent>(){
112
 
113
			public void handleEvent(TreeEvent be) {
114
				TreeItem f = be.item;
115
				if (f.isLeaf()) {
116
					selectionSommaire((String) f.getModel().get("code"));
117
				}
118
			}
119
 
120
		});
121
	}
122
 
123
	private void selectionSommaire(String page) {
124
		String serviceUrl = ((Configuration) Registry.get(RegistreId.CONFIG)).getServiceBaseUrl();
125
		String aidePageUrl = serviceUrl+"CoelAide/"+page;
126
		GWT.log("Sélection : "+aidePageUrl, null);
127
		chargerPageAide(aidePageUrl);
128
	}
129
 
130
	private void chargerPageAide(String url) {
131
		GWT.log("Charger : "+url, null);
132
		contenuHtml = new HtmlContainer() {
133
			public void onBrowserEvent(Event e) {
134
				// Nous vérifions que l'évenement est un clic et qu'il a lieu sur un lien
135
				if (e.getTypeInt()== Event.ONCLICK && e.getTarget().getTagName().equals("A")) {
136
					e.preventDefault();
137
					GWT.log("Clic : "+e.getTarget().getTagName()+"::"+e.getTarget().toString(), null);
138
					chargerPageAide(e.getTarget().toString());
139
				}
140
			}
141
		};
142
		contenuHtml.setId(ComposantId.PANNEAU_AIDE);
143
		contenuHtml.setWidth(400);
144
		contenuHtml.sinkEvents(Event.ONCLICK);
145
		contenuHtml.setUrl(url);
146
		contenuHtml.recalculate();
147
		contenuPanneau.removeAll();
148
		contenuPanneau.add(contenuHtml);
149
		contenuPanneau.layout();
150
	}
151
 
152
	private void inititialiserSommaireArbreFiltre() {
69 jpm 153
		filtre = new StoreFilterField<Menu>() {
66 jpm 154
			@Override
69 jpm 155
			protected boolean doSelect(Store<Menu> magazin, Menu parent, Menu enregistrement, String propriete, String filtre) {
156
				// Seul les feuilles sont traitées par le filtre
157
				if (enregistrement instanceof Menu) {
158
					return false;
159
				}
66 jpm 160
				String nom = enregistrement.getNom();
161
				nom = nom.toLowerCase();
162
				if (nom.startsWith(filtre.toLowerCase())) {
163
					return true;
164
				}
165
				return false;
166
			}
167
		};
168
	}
169
 
170
 
69 jpm 171
	public static Menu getSommaireArbreModele() {
172
		// TODO : charger automatiquement l'arbre depuis le contenu de la page wikini de sommaire...
173
		Menu[] menus = new Menu[] {
174
			new Menu("Débuter avec COEL", new BaseTreeModel[] {
175
				new Aide("Accueil", "AideCEL", "Jean-Pascal MILCENT", "debutant"),
176
				new Aide("S'identifier", "AideCoelIdentification", "Jean-Pascal MILCENT", "debutant"),
177
				new Aide("Institutions", "AideCoelInstitution", "Jean-Pascal MILCENT", "debutant"),
178
				new Aide("Collections", "AideCoelCollection", "Jean-Pascal MILCENT", "debutant"),
179
				new Aide("Personnes", "AideCoelPersonne", "Jean-Pascal MILCENT", "debutant"),
180
				new Aide("Publications", "AideCoelPublication", "Jean-Pascal MILCENT", "debutant")
181
			}),
182
			new Menu("Aller plus loin...", new BaseTreeModel[] {
183
				new Aide("Régler les paramêtres", "AideCoelParametre", "Jean-Pascal MILCENT", "expert"),
184
				new Aide("Modifier ses préférences", "AideCoelPreference", "Jean-Pascal MILCENT", "expert")
185
			})
66 jpm 186
		};
187
 
69 jpm 188
		Menu racine = new Menu("Sommaire");
66 jpm 189
		for (int i = 0; i < menus.length; i++) {
190
			racine.add((Menu) menus[i]);
191
		}
69 jpm 192
 
66 jpm 193
		return racine;
194
	}
195
 
196
 
61 jpm 197
	/**
198
	 * Sur une fermeture on fait un fadeOut.
199
	 *
200
	 */
66 jpm 201
	/*
61 jpm 202
	protected void onButtonPressed(Button btn) {
203
		if (this.isHideOnButtonClick()) {
66 jpm 204
			// FIXME : apparament le fade In/Fade Out pose problème sur les navigateurs...
205
			//this.el().fadeOut(FxConfig.NONE);
61 jpm 206
		} else {
207
			super.onButtonPressed(btn);
208
		}
66 jpm 209
	}*/
61 jpm 210
}