Subversion Repositories eFlore/Applications.coel

Rev

Rev 69 | Rev 324 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 69 Rev 311
Line 1... Line 1...
1
package org.tela_botanica.client.composants;
1
package org.tela_botanica.client.composants;
Line -... Line 2...
-
 
2
 
-
 
3
 
-
 
4
import java.util.Iterator;
2
 
5
import java.util.List;
3
 
6
 
4
import org.tela_botanica.client.ComposantClass;
7
import org.tela_botanica.client.ComposantClass;
5
import org.tela_botanica.client.ComposantId;
8
import org.tela_botanica.client.ComposantId;
6
import org.tela_botanica.client.RegistreId;
9
import org.tela_botanica.client.RegistreId;
7
import org.tela_botanica.client.modeles.Aide;
10
import org.tela_botanica.client.modeles.Aide;
-
 
11
import org.tela_botanica.client.modeles.Configuration;
Line 8... Line 12...
8
import org.tela_botanica.client.modeles.Configuration;
12
import org.tela_botanica.client.modeles.Menu;
9
import org.tela_botanica.client.modeles.Menu;
13
import org.tela_botanica.client.util.Print;
10
 
14
 
11
import com.extjs.gxt.ui.client.Events;
15
import com.extjs.gxt.ui.client.Events;
12
import com.extjs.gxt.ui.client.Registry;
16
import com.extjs.gxt.ui.client.Registry;
13
import com.extjs.gxt.ui.client.Style.LayoutRegion;
17
import com.extjs.gxt.ui.client.Style.LayoutRegion;
-
 
18
import com.extjs.gxt.ui.client.Style.Scroll;
14
import com.extjs.gxt.ui.client.Style.Scroll;
19
import com.extjs.gxt.ui.client.binder.TreeBinder;
-
 
20
import com.extjs.gxt.ui.client.data.BaseTreeModel;
15
import com.extjs.gxt.ui.client.binder.TreeBinder;
21
import com.extjs.gxt.ui.client.event.BaseEvent;
16
import com.extjs.gxt.ui.client.data.BaseTreeModel;
22
import com.extjs.gxt.ui.client.event.ComponentEvent;
17
import com.extjs.gxt.ui.client.event.ComponentEvent;
23
import com.extjs.gxt.ui.client.event.HtmlContainerEvent;
18
import com.extjs.gxt.ui.client.event.Listener;
24
import com.extjs.gxt.ui.client.event.Listener;
19
import com.extjs.gxt.ui.client.event.SelectionListener;
25
import com.extjs.gxt.ui.client.event.SelectionListener;
20
import com.extjs.gxt.ui.client.event.TreeEvent;
26
import com.extjs.gxt.ui.client.event.TreeEvent;
21
import com.extjs.gxt.ui.client.store.Store;
27
import com.extjs.gxt.ui.client.store.Store;
22
import com.extjs.gxt.ui.client.store.TreeStore;
28
import com.extjs.gxt.ui.client.store.TreeStore;
-
 
29
import com.extjs.gxt.ui.client.util.Margins;
23
import com.extjs.gxt.ui.client.util.Margins;
30
import com.extjs.gxt.ui.client.widget.ContentPanel;
24
import com.extjs.gxt.ui.client.widget.ContentPanel;
31
import com.extjs.gxt.ui.client.widget.Dialog;
25
import com.extjs.gxt.ui.client.widget.Dialog;
32
import com.extjs.gxt.ui.client.widget.Html;
26
import com.extjs.gxt.ui.client.widget.HtmlContainer;
33
import com.extjs.gxt.ui.client.widget.HtmlContainer;
27
import com.extjs.gxt.ui.client.widget.StoreFilterField;
34
import com.extjs.gxt.ui.client.widget.StoreFilterField;
28
import com.extjs.gxt.ui.client.widget.VerticalPanel;
35
import com.extjs.gxt.ui.client.widget.VerticalPanel;
29
import com.extjs.gxt.ui.client.widget.button.Button;
36
import com.extjs.gxt.ui.client.widget.button.Button;
30
import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
37
import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
31
import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;
38
import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;
32
import com.extjs.gxt.ui.client.widget.tree.Tree;
39
import com.extjs.gxt.ui.client.widget.tree.Tree;
33
import com.extjs.gxt.ui.client.widget.tree.TreeItem;
-
 
Line 34... Line 40...
34
import com.google.gwt.core.client.GWT;
40
import com.extjs.gxt.ui.client.widget.tree.TreeItem;
Line -... Line 41...
-
 
41
import com.google.gwt.core.client.GWT;
-
 
42
import com.google.gwt.user.client.Event;
-
 
43
 
-
 
44
public class AideFenetre extends Dialog {
35
import com.google.gwt.user.client.Event;
45
 
36
import com.google.gwt.user.client.Window;
46
	private static final String SERVICE_NOM = "CoelAide";
37
 
47
	private static final String PAGE_A_OUVRIR_CODE = "AideCoelPresentationGenerale";
38
public class AideFenetre extends Dialog {
48
	private static Menu pagePrincipale = null;
39
 
49
	private static TreeItem treeItemAOuvrirParDefaut = null;
40
	private Tree arbre = null; 
50
	private Tree arbre = null; 
41
	private TreeStore<Menu> magazin = null;
51
	private TreeStore<Menu> magazin = null;
Line 42... Line 52...
42
	private TreeBinder<Menu> binder = null;
52
	private TreeBinder<Menu> binder = null;
43
	private StoreFilterField<Menu> filtre = null;
53
	private StoreFilterField<Menu> filtre = null;
44
	private VerticalPanel sommairePanneau = null;
54
	private VerticalPanel sommairePanneau = null;
45
	private ContentPanel contenuPanneau = null;
55
	private ContentPanel contenuPanneau = null;
46
	private HtmlContainer contenuHtml = null;
56
	private Html contenuHtml = null;
47
	
57
	
48
	public AideFenetre() {
58
	public AideFenetre() {
49
		setBodyBorder(false);  
59
		setBodyBorder(false);  
50
		setButtons(Dialog.OK);
60
		setButtons(Dialog.OK);
Line 51... Line 61...
51
		setIconStyle("icone-appli-panneau-liste");  
61
		setIconStyle(ComposantClass.ICONE_PANNEAU_LISTE);  
52
		setHeading("COEL - Aide");  
62
		setHeading("COEL - Aide");  
53
		setWidth(675);  
63
		setWidth(675);  
-
 
64
		setHeight(400);  
54
		setHeight(400);  
65
		setHideOnButtonClick(true);  
55
		setHideOnButtonClick(true);  
66
		setLayout(new BorderLayout());  
56
		setLayout(new BorderLayout());  
67
		
57
		
68
		// Panneau Ouest : sommaire
58
		// Panneau Ouest : sommaire
69
		sommairePanneau = new VerticalPanel();  
59
		sommairePanneau = new VerticalPanel();  
70
		sommairePanneau.setSpacing(5);
60
		sommairePanneau.setSpacing(8);
71
		// FIXME : plutôt que d'utiliser ce style propre à GXT faudrait utiliser une méthode...
Line 61... Line 72...
61
		sommairePanneau.addStyleName("x-small-editor");
72
		sommairePanneau.setStyleName("x-panel-body");
62
		BorderLayoutData sommaireDisposition = new BorderLayoutData(LayoutRegion.WEST, 200, 175, 250);  
73
		BorderLayoutData sommaireDisposition = new BorderLayoutData(LayoutRegion.WEST, 200, 175, 250);  
-
 
74
		sommaireDisposition.setMargins(new Margins(0, 5, 0, 0));  
63
		sommaireDisposition.setMargins(new Margins(0, 5, 0, 0));  
75
		sommaireDisposition.setSplit(true);  
64
		sommaireDisposition.setSplit(true);  
76
		sommaireDisposition.setCollapsible(true);  
Line 65... Line 77...
65
		sommaireDisposition.setCollapsible(true);  
77
		sommaireDisposition.setFloatable(true);
66
		sommaireDisposition.setFloatable(true);
78
		add(sommairePanneau, sommaireDisposition);  
67
		add(sommairePanneau, sommaireDisposition);  
79
		
68
		
80
		// Chargement de l'arbre du sommaire et de son filtre
69
		// Chargement de l'arbre du sommaire et de son filtre
81
		chargerSommaireArbre();
70
		chargerSommaireArbre();
82
		attribuerIdAuxTreeItem();
71
		sommairePanneau.add(filtre);
83
		sommairePanneau.add(filtre);
-
 
84
		sommairePanneau.add(arbre);
72
		sommairePanneau.add(arbre);
85
		
73
		
86
		// Panneau Central : contenu
74
		// Panneau Central : contenu
87
		contenuPanneau = new ContentPanel();
75
		contenuPanneau = new ContentPanel();
88
		contenuPanneau.setScrollMode(Scroll.AUTO);
76
		contenuPanneau.setScrollMode(Scroll.AUTO);
89
		// Barre d'outils
77
		// Barre d'outils
90
		Button imprimerBtn = new Button(null, new SelectionListener<ComponentEvent>() {  
Line 78... Line 91...
78
		Button imprimerBtn = new Button(null, new SelectionListener<ComponentEvent>() {  
91
			public void componentSelected(ComponentEvent ce) {  
-
 
92
				//Print.it(contenuHtml.);
-
 
93
				GWT.log(contenuHtml.getHtml(), null);
79
			public void componentSelected(ComponentEvent ce) {  
94
			}
-
 
95
		});
-
 
96
		imprimerBtn.setIconStyle(ComposantClass.ICONE_IMPRIMER);
-
 
97
		contenuPanneau.getHeader().insertTool(imprimerBtn, 0);
-
 
98
		BorderLayoutData contenuDisposition = new BorderLayoutData(LayoutRegion.CENTER);  
80
				Window.print();
99
		add(contenuPanneau, contenuDisposition);
81
			}  
100
		
-
 
101
		// Chargement de la page racine
-
 
102
		etendreArbre(treeItemAOuvrirParDefaut);
-
 
103
		
82
		});
104
		//selectionSommaire((String) arbre.getItem(0).getItem(0).getModel().get("code"));
83
		imprimerBtn.setIconStyle(ComposantClass.ICONE_IMPRIMER);
105
		selectionSommaire(pagePrincipale.getCode());
84
		contenuPanneau.getHeader().insertTool(imprimerBtn, 0);
106
	}
Line 85... Line 107...
85
		BorderLayoutData contenuDisposition = new BorderLayoutData(LayoutRegion.CENTER);  
107
	
86
		add(contenuPanneau, contenuDisposition);
108
	private void etendreArbre(TreeItem treeItemAOuvrir) {
87
		
109
		arbre.setSelectedItem(treeItemAOuvrir);
-
 
110
		arbre.expandPath(arbre.getSelectedItem().getPath());
88
		// Chargement de la page racine
111
	}
89
		// FIXME : apparement il faut ouvrir chaque menu pour pouvoir sélectionner la bonne page... Une meilleure solution doit exister.
112
	
Line 90... Line 113...
90
		arbre.getItem(0).toggle();
113
	private void etendreArbre(String treeItemId) {
91
		arbre.getItem(0).getItem(0).toggle();
114
		arbre.setSelectedItem(chercherTreeItemParItemId(treeItemId));
Line 110... Line 133...
110
		filtre.setToolTip("Filtrer le sommaire");
133
		filtre.setToolTip("Filtrer le sommaire");
111
		arbre.addListener(Events.OnClick, new Listener<TreeEvent>(){
134
		arbre.addListener(Events.OnClick, new Listener<TreeEvent>(){
Line 112... Line 135...
112
 
135
 
113
			public void handleEvent(TreeEvent be) {
136
			public void handleEvent(TreeEvent be) {
114
				TreeItem f = be.item;
137
				TreeItem f = be.item;
115
				if (f.isLeaf()) {
138
				if (f.getModel() != null && f.getModel().get("code") != null) {
116
					selectionSommaire((String) f.getModel().get("code"));
139
					selectionSommaire((String) f.getModel().get("code"));
117
				}
140
				}
Line 118... Line 141...
118
			}
141
			}
119
			
142
			
Line -... Line 143...
-
 
143
		});
-
 
144
	}
-
 
145
 
-
 
146
	private void attribuerIdAuxTreeItem() {
-
 
147
		List<TreeItem> liste = arbre.getAllItems();
-
 
148
		Iterator<TreeItem> it = liste.iterator();
-
 
149
		while(it.hasNext()) {
-
 
150
			TreeItem ti = (TreeItem) it.next();
-
 
151
			if (ti.isLeaf()) {
-
 
152
				String code = (String) ti.getModel().get("code");
-
 
153
				ti.setItemId(code);
-
 
154
				definirPageAOuvrirParDefaut(ti);
-
 
155
			}
-
 
156
		}
-
 
157
	}
-
 
158
	
-
 
159
	private TreeItem chercherTreeItemParItemId(String itemIdAChercher) {
-
 
160
		TreeItem treeItemTrouve = null;
-
 
161
		if (itemIdAChercher != null) {
-
 
162
			String itemIdAChercherEnMinuscule = itemIdAChercher.toLowerCase();
-
 
163
			List<TreeItem> liste = arbre.getAllItems();
-
 
164
			Iterator<TreeItem> it = liste.iterator();
-
 
165
			while(it.hasNext()) {
-
 
166
				TreeItem ti = (TreeItem) it.next();
-
 
167
				if (ti.getModel() != null) {
-
 
168
					String codePageAide = (String) ti.getModel().get("code");
-
 
169
					if (codePageAide != null) {
-
 
170
						String codePageAideEnMinuscule = codePageAide.toLowerCase();
-
 
171
						if (itemIdAChercherEnMinuscule.equals(codePageAideEnMinuscule)) {
-
 
172
							treeItemTrouve = ti;
-
 
173
							break;
-
 
174
						}
-
 
175
					}
-
 
176
				}
-
 
177
			}
-
 
178
		}
-
 
179
		return treeItemTrouve;
-
 
180
	}
-
 
181
	
-
 
182
	private void definirPageAOuvrirParDefaut(TreeItem menu) {
-
 
183
		String code = menu.getModel().get("code");
-
 
184
		if (PAGE_A_OUVRIR_CODE.equals(code)) {
-
 
185
			treeItemAOuvrirParDefaut = menu;
120
		});
186
		}
121
	}
187
	}
122
	
188
 
123
	private void selectionSommaire(String page) {
189
	private void selectionSommaire(String page) {
124
		String serviceUrl = ((Configuration) Registry.get(RegistreId.CONFIG)).getServiceBaseUrl();
190
		String serviceUrl = ((Configuration) Registry.get(RegistreId.CONFIG)).getServiceBaseUrl();
125
		String aidePageUrl = serviceUrl+"CoelAide/"+page;
191
		String aidePageUrl = serviceUrl+SERVICE_NOM+"/"+page;
Line 126... Line 192...
126
		GWT.log("Sélection : "+aidePageUrl, null);
192
		GWT.log("Sélection : "+aidePageUrl, null);
127
		chargerPageAide(aidePageUrl);
193
		chargerPageAide(aidePageUrl);
128
	}
194
	}
129
	
195
	
130
	private void chargerPageAide(String url) {
196
	private void chargerPageAide(String url) {
131
		GWT.log("Charger : "+url, null);
197
		GWT.log("Charger : "+url, null);
132
		contenuHtml = new HtmlContainer() {
198
		HtmlContainer conteneurDuHtml = new HtmlContainer() {
133
			public void onBrowserEvent(Event e) {
199
			public void onBrowserEvent(Event e) {
134
				// Nous vérifions que l'évenement est un clic et qu'il a lieu sur un lien
200
				// Nous vérifions que l'évenement est un clic et qu'il a lieu sur un lien
-
 
201
				if (e.getTypeInt() == Event.ONCLICK && e.getTarget().getTagName().equals("A")) {
-
 
202
					e.preventDefault();
-
 
203
					String urlPageAideCible = e.getTarget().toString();
-
 
204
					chargerPageAide(urlPageAideCible);
-
 
205
					String codePageAideCible = urlPageAideCible.substring(urlPageAideCible.lastIndexOf("/")+1);
135
				if (e.getTypeInt()== Event.ONCLICK && e.getTarget().getTagName().equals("A")) {
206
					etendreArbre(codePageAideCible);
136
					e.preventDefault();
207
					GWT.log("Clic : "+urlPageAideCible+"::"+codePageAideCible, null);
137
					GWT.log("Clic : "+e.getTarget().getTagName()+"::"+e.getTarget().toString(), null);
208
				} else {
-
 
209
					GWT.log("Event :"+e.getType(), null);
138
					chargerPageAide(e.getTarget().toString());
210
				}
139
				}
211
			}
140
			}
212
		};
141
		};
213
		
142
		contenuHtml.setId(ComposantId.PANNEAU_AIDE);
214
		conteneurDuHtml.setId(ComposantId.PANNEAU_AIDE);
-
 
215
		conteneurDuHtml.setWidth(400);
-
 
216
		conteneurDuHtml.sinkEvents(Event.ONCLICK);
-
 
217
		conteneurDuHtml.setUrl(url);
143
		contenuHtml.setWidth(400);
218
		conteneurDuHtml.recalculate();
144
		contenuHtml.sinkEvents(Event.ONCLICK);
219
		
145
		contenuHtml.setUrl(url);
220
		
146
		contenuHtml.recalculate();
221
		
Line 147... Line 222...
147
		contenuPanneau.removeAll();
222
		contenuPanneau.removeAll();
148
		contenuPanneau.add(contenuHtml);
223
		contenuPanneau.add(conteneurDuHtml);
149
		contenuPanneau.layout();
224
		contenuPanneau.layout();
150
	}
225
	}
-
 
226
	
151
	
227
	private void inititialiserSommaireArbreFiltre() {
152
	private void inititialiserSommaireArbreFiltre() {
228
		filtre = new StoreFilterField<Menu>() {  
153
		filtre = new StoreFilterField<Menu>() {  
-
 
154
			@Override
-
 
155
			protected boolean doSelect(Store<Menu> magazin, Menu parent, Menu enregistrement, String propriete, String filtre) {  
229
			@Override
156
				// Seul les feuilles sont traitées par le filtre
230
			protected boolean doSelect(Store<Menu> magazin, Menu parent, Menu enregistrement, String propriete, String filtre) {  
157
				if (enregistrement instanceof Menu) {  
231
				Boolean retour = false;
158
					return false;  
232
				// Seul les feuilles sont traitées par le filtre
159
				}
233
				String nomMenu = enregistrement.getNom();
160
				String nom = enregistrement.getNom();
234
				String nomMenuMinuscule = nomMenu.toLowerCase();
161
				nom = nom.toLowerCase();  
235
				String nomFiltreMinuscule = filtre.toLowerCase();
162
				if (nom.startsWith(filtre.toLowerCase())) {  
236
				if (nomMenuMinuscule.matches(".*"+nomFiltreMinuscule+".*")) {  
163
					return true;  
237
					retour = true;  
Line 164... Line 238...
164
				}
238
				}
165
				return false;  
239
				return retour;  
-
 
240
			}
166
			}
241
		};
167
		};
242
	}
168
	}
243
	
169
	
244
	
-
 
245
	public static Menu getSommaireArbreModele() {
-
 
246
		// TODO : charger automatiquement l'arbre depuis le contenu de la page wikini de sommaire...
-
 
247
		pagePrincipale = new Menu("Accueil", "AideCoelAccueil");
170
	
248
		Menu[] menus = new Menu[] {
171
	public static Menu getSommaireArbreModele() {
249
			new Menu("Débuter avec COEL", new BaseTreeModel[] {
172
		// TODO : charger automatiquement l'arbre depuis le contenu de la page wikini de sommaire...
250
				new Menu("Présentation rapide", "AideCoelPresentationGenerale"),
173
		Menu[] menus = new Menu[] {
251
				new Menu("Comment s'identifier", "AideCoelCommentIdentifier"),
174
			new Menu("Débuter avec COEL", new BaseTreeModel[] {
252
				new Menu("Pourquoi s'identifier", "AideCoelPourquoiIdentifier")
175
				new Aide("Accueil", "AideCEL", "Jean-Pascal MILCENT", "debutant"),
253
			}),
176
				new Aide("S'identifier", "AideCoelIdentification", "Jean-Pascal MILCENT", "debutant"),
254
			new Menu("Les menus", new BaseTreeModel[] {
177
				new Aide("Institutions", "AideCoelInstitution", "Jean-Pascal MILCENT", "debutant"),
255
				new Menu("Institutions", "AideCoelInstitution"),
178
				new Aide("Collections", "AideCoelCollection", "Jean-Pascal MILCENT", "debutant"),
256
				new Menu("Collections", "AideCoelCollection"),
179
				new Aide("Personnes", "AideCoelPersonne", "Jean-Pascal MILCENT", "debutant"),
257
				new Menu("Personnes", "AideCoelPersonne"),
Line 180... Line 258...
180
				new Aide("Publications", "AideCoelPublication", "Jean-Pascal MILCENT", "debutant")
258
				new Menu("Publications", "AideCoelPublication")	
181
			}),
259
			}),
182
			new Menu("Aller plus loin...", new BaseTreeModel[] {
260
			new Menu("Aller plus loin...", new BaseTreeModel[] {
183
				new Aide("Régler les paramêtres", "AideCoelParametre", "Jean-Pascal MILCENT", "expert"),
261
				new Menu("Régler les paramêtres", "AideCoelParametre"),
Line 184... Line 262...
184
				new Aide("Modifier ses préférences", "AideCoelPreference", "Jean-Pascal MILCENT", "expert")
262
				new Menu("Modifier ses préférences", "AideCoelPreference")