Subversion Repositories eFlore/Applications.coel

Rev

Rev 1687 | Rev 1764 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1687 Rev 1762
1
package org.tela_botanica.client.vues.personne;
1
package org.tela_botanica.client.vues.personne;
2
 
2
 
3
import java.util.ArrayList;
3
import java.util.ArrayList;
4
import java.util.Iterator;
4
import java.util.Iterator;
5
import java.util.List;
5
import java.util.List;
6
 
-
 
7
 
6
 
8
import org.tela_botanica.client.Mediateur;
7
import org.tela_botanica.client.Mediateur;
9
import org.tela_botanica.client.RegistreId;
8
import org.tela_botanica.client.RegistreId;
10
import org.tela_botanica.client.composants.ChampFiltreRecherche;
9
import org.tela_botanica.client.composants.ChampFiltreRecherche;
11
import org.tela_botanica.client.composants.InfoLogger;
10
import org.tela_botanica.client.composants.InfoLogger;
12
import org.tela_botanica.client.images.Images;
11
import org.tela_botanica.client.images.Images;
13
import org.tela_botanica.client.interfaces.Rafraichissable;
12
import org.tela_botanica.client.interfaces.Rafraichissable;
14
import org.tela_botanica.client.modeles.Information;
13
import org.tela_botanica.client.modeles.Information;
15
import org.tela_botanica.client.modeles.Utilisateur;
14
import org.tela_botanica.client.modeles.Utilisateur;
16
import org.tela_botanica.client.modeles.personne.Personne;
15
import org.tela_botanica.client.modeles.personne.Personne;
-
 
16
import org.tela_botanica.client.modeles.personne.PersonneAsyncDao;
17
import org.tela_botanica.client.modeles.personne.PersonneListe;
17
import org.tela_botanica.client.modeles.personne.PersonneListe;
18
import org.tela_botanica.client.modeles.projet.Projet;
18
import org.tela_botanica.client.modeles.projet.Projet;
19
import org.tela_botanica.client.util.Debug;
19
import org.tela_botanica.client.util.Debug;
20
import org.tela_botanica.client.vues.BarrePaginationVue;
20
import org.tela_botanica.client.vues.BarrePaginationVue;
21
 
21
 
22
import com.extjs.gxt.ui.client.Registry;
22
import com.extjs.gxt.ui.client.Registry;
23
import com.extjs.gxt.ui.client.Style.SortDir;
23
import com.extjs.gxt.ui.client.Style.SortDir;
24
import com.extjs.gxt.ui.client.data.ModelComparer;
24
import com.extjs.gxt.ui.client.data.ModelComparer;
25
import com.extjs.gxt.ui.client.event.BaseEvent;
25
import com.extjs.gxt.ui.client.event.BaseEvent;
26
import com.extjs.gxt.ui.client.event.ButtonEvent;
26
import com.extjs.gxt.ui.client.event.ButtonEvent;
27
import com.extjs.gxt.ui.client.event.Events;
27
import com.extjs.gxt.ui.client.event.Events;
-
 
28
import com.extjs.gxt.ui.client.event.GridEvent;
28
import com.extjs.gxt.ui.client.event.Listener;
29
import com.extjs.gxt.ui.client.event.Listener;
29
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
30
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
30
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
31
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
31
import com.extjs.gxt.ui.client.event.SelectionListener;
32
import com.extjs.gxt.ui.client.event.SelectionListener;
32
import com.extjs.gxt.ui.client.store.ListStore;
33
import com.extjs.gxt.ui.client.store.ListStore;
33
import com.extjs.gxt.ui.client.store.Store;
34
import com.extjs.gxt.ui.client.store.Store;
34
import com.extjs.gxt.ui.client.store.StoreSorter;
35
import com.extjs.gxt.ui.client.store.StoreSorter;
35
import com.extjs.gxt.ui.client.widget.ContentPanel;
36
import com.extjs.gxt.ui.client.widget.ContentPanel;
36
import com.extjs.gxt.ui.client.widget.button.Button;
37
import com.extjs.gxt.ui.client.widget.button.Button;
37
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
38
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
38
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
39
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
39
import com.extjs.gxt.ui.client.widget.grid.Grid;
40
import com.extjs.gxt.ui.client.widget.grid.Grid;
40
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
41
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
41
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
42
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
42
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
43
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
43
import com.google.gwt.core.client.GWT;
44
import com.google.gwt.core.client.GWT;
44
import com.google.gwt.i18n.client.Constants;
45
import com.google.gwt.i18n.client.Constants;
-
 
46
import com.google.gwt.user.client.Window;
45
 
47
 
46
public class PersonneListeVue extends ContentPanel implements Rafraichissable {
48
public class PersonneListeVue extends ContentPanel implements Rafraichissable {
47
	
49
	
48
	private Mediateur mediateur = null ;
50
	private Mediateur mediateur = null ;
49
	
51
	
50
	private Grid<Personne> grille = null;
52
	private Grid<Personne> grille = null;
51
	private ListStore<Personne> store = null;
53
	private ListStore<Personne> store = null;
52
	
54
	
53
	private ChampFiltreRecherche champFiltreRecherche = null;
55
	private ChampFiltreRecherche champFiltreRecherche = null;
54
	private BarrePaginationVue pagination = null;
56
	private BarrePaginationVue pagination = null;
55
	
57
	
56
	private ColumnModel modeleColonnes = null;
58
	private ColumnModel modeleColonnes = null;
57
	private Button ajouter = null;
59
	private Button ajouter = null;
58
	private Button modifier = null;
60
	private Button modifier = null;
59
	private Button supprimer = null;
61
	private Button supprimer = null;
60
	
62
	
61
	private int indexElementSelectionne = 0;
63
	private int indexElementSelectionne = 0;
62
	private Personne personneSelectionnee = null;
64
	private Personne personneSelectionnee = null;
63
	
65
	
64
	public PersonneListeVue() {
66
	public PersonneListeVue() {
65
		mediateur = Registry.get(RegistreId.MEDIATEUR);
67
		mediateur = Registry.get(RegistreId.MEDIATEUR);
66
		Constants i18nC = mediateur.i18nC;
68
		Constants i18nC = mediateur.i18nC;
67
		
69
		
68
		setHeadingHtml(Mediateur.i18nC.personneListeLabel());
70
		setHeadingHtml(Mediateur.i18nC.personneListeLabel());
69
		setLayout(new FitLayout());
71
		setLayout(new FitLayout());
70
		
72
		
71
		//Définition de la barre d'outil
73
		//Définition de la barre d'outil
72
		ToolBar toolBar = new ToolBar();
74
		ToolBar toolBar = new ToolBar();
73
		ajouter = new Button(Mediateur.i18nC.ajouter());
75
		ajouter = new Button(Mediateur.i18nC.ajouter());
74
		ajouter.setIcon(Images.ICONES.ajouter());
76
		ajouter.setIcon(Images.ICONES.ajouter());
75
		ajouter.addSelectionListener(new SelectionListener<ButtonEvent>() {  
77
		ajouter.addSelectionListener(new SelectionListener<ButtonEvent>() {  
76
			public void componentSelected(ButtonEvent ce) {  
78
			public void componentSelected(ButtonEvent ce) {  
77
				mediateur.clicAjouterPersonne();
79
				mediateur.clicAjouterPersonne();
78
			}  
80
			}  
79
		});
81
		});
80
		ajouter.setToolTip(mediateur.i18nC.indicationCreerUneFiche()+" "+mediateur.i18nC.collectionSingulier());
82
		ajouter.setToolTip(mediateur.i18nC.indicationCreerUneFiche()+" "+mediateur.i18nC.collectionSingulier());
81
		toolBar.add(ajouter);
83
		toolBar.add(ajouter);
82
 
84
 
83
		modifier = new Button(Mediateur.i18nC.modifier());
85
		modifier = new Button(Mediateur.i18nC.modifier());
84
		modifier.setIcon(Images.ICONES.formModifier());
86
		modifier.setIcon(Images.ICONES.formModifier());
85
		modifier.addSelectionListener(new SelectionListener<ButtonEvent>() {  
87
		modifier.addSelectionListener(new SelectionListener<ButtonEvent>() {  
86
			public void componentSelected(ButtonEvent ce) {  
88
			public void componentSelected(ButtonEvent ce) {  
87
				mediateur.clicModifierPersonne(grille.getSelectionModel().getSelectedItems());
89
				mediateur.clicModifierPersonne(grille.getSelectionModel().getSelectedItems());
88
			}  
90
			}  
89
		});
91
		});
90
		modifier.setToolTip(mediateur.i18nC.indicationModifierUneFiche());
92
		modifier.setToolTip(mediateur.i18nC.indicationModifierUneFiche());
91
		toolBar.add(modifier);
93
		toolBar.add(modifier);
92
		
94
		
93
		supprimer = new Button(Mediateur.i18nC.supprimer());
95
		supprimer = new Button(Mediateur.i18nC.supprimer());
94
		supprimer.setIcon(Images.ICONES.supprimer());
96
		supprimer.setIcon(Images.ICONES.supprimer());
95
		supprimer.addSelectionListener(new SelectionListener<ButtonEvent>() {  
97
		supprimer.addSelectionListener(new SelectionListener<ButtonEvent>() {  
96
			public void componentSelected(ButtonEvent ce) {  
98
			public void componentSelected(ButtonEvent ce) {  
97
				clicSupprimerPersonne(grille.getSelectionModel().getSelectedItems());
99
				clicSupprimerPersonne(grille.getSelectionModel().getSelectedItems());
98
			}  
100
			}  
99
		});
101
		});
100
		supprimer.setToolTip(mediateur.i18nC.indicationSupprimerUneFiche());
102
		supprimer.setToolTip(mediateur.i18nC.indicationSupprimerUneFiche());
101
		toolBar.add(supprimer);
103
		toolBar.add(supprimer);
102
		setTopComponent(toolBar);
104
		setTopComponent(toolBar);
103
 
105
 
104
		// Définition des colomnes de la grille:
106
		// Définition des colomnes de la grille:
105
		List<ColumnConfig> lstColumns = new ArrayList<ColumnConfig>();
107
		List<ColumnConfig> lstColumns = new ArrayList<ColumnConfig>();
106
		lstColumns.add(new ColumnConfig("id_personne", "Id", 45));
108
		lstColumns.add(new ColumnConfig("id_personne", "Id", 45));
107
		lstColumns.add(new ColumnConfig("nom", "Nom", 100));
109
		lstColumns.add(new ColumnConfig("nom", "Nom", 100));
108
		lstColumns.add(new ColumnConfig("prenom", "Prénom", 100));
110
		lstColumns.add(new ColumnConfig("prenom", "Prénom", 100));
109
		lstColumns.add(new ColumnConfig("fmt_nom_complet", "Nom Complet", 200));
111
		lstColumns.add(new ColumnConfig("fmt_nom_complet", "Nom Complet", 200));
110
		lstColumns.add(new ColumnConfig("code_postal", "Code postal", 100));
112
		lstColumns.add(new ColumnConfig("code_postal", "Code postal", 100));
111
		lstColumns.add(new ColumnConfig("ville", "Ville", 100));
113
		lstColumns.add(new ColumnConfig("ville", "Ville", 100));
112
		lstColumns.add(new ColumnConfig("_courriel_princ_", "Courriel", 200));
114
		lstColumns.add(new ColumnConfig("_courriel_princ_", "Courriel", 200));
113
 
115
 
114
		lstColumns.get(0).setHidden(true);
116
		lstColumns.get(0).setHidden(true);
115
		lstColumns.get(1).setHidden(true);
117
		lstColumns.get(1).setHidden(true);
116
		lstColumns.get(2).setHidden(true);
118
		lstColumns.get(2).setHidden(true);
117
		
119
		
118
		modeleColonnes = new ColumnModel(lstColumns);
120
		modeleColonnes = new ColumnModel(lstColumns);
119
 
121
 
120
		// Définition de la grille
122
		// Définition de la grille
121
		GridSelectionModel<Personne> gsmSelectionGrille = new GridSelectionModel<Personne>();
123
		GridSelectionModel<Personne> gsmSelectionGrille = new GridSelectionModel<Personne>();
122
		gsmSelectionGrille.addSelectionChangedListener(new SelectionChangedListener<Personne>() {
124
		gsmSelectionGrille.addSelectionChangedListener(new SelectionChangedListener<Personne>() {
123
			public void selectionChanged(SelectionChangedEvent<Personne> event) {
125
			public void selectionChanged(SelectionChangedEvent<Personne> event) {
124
				personneSelectionnee = (Personne) event.getSelectedItem();
126
				personneSelectionnee = (Personne) event.getSelectedItem();
125
				indexElementSelectionne = store.indexOf(personneSelectionnee);
127
				indexElementSelectionne = store.indexOf(personneSelectionnee);
126
				clicListe(personneSelectionnee);
128
				clicListe(personneSelectionnee);
127
			}
129
			}
128
		});
130
		});
129
		
131
		
130
		store = new ListStore<Personne>();
132
		store = new ListStore<Personne>();
131
		store.sort("nom", SortDir.ASC);
-
 
132
		
133
		
133
		grille = new Grid<Personne>(store, modeleColonnes);		
134
		grille = new Grid<Personne>(store, modeleColonnes);		
134
		grille.setSelectionModel(gsmSelectionGrille);
135
		grille.setSelectionModel(gsmSelectionGrille);
135
		grille.setWidth("100%");
136
		grille.setWidth("100%");
136
		grille.setAutoExpandColumn("fmt_nom_complet");
137
		grille.setAutoExpandColumn("fmt_nom_complet");
137
		grille.getView().setAutoFill(true);
138
		grille.getView().setAutoFill(true);
138
		grille.getView().setForceFit(true);
139
		grille.getView().setForceFit(true);
139
		grille.addListener(Events.ViewReady, new Listener<BaseEvent>() {
140
		grille.addListener(Events.ViewReady, new Listener<BaseEvent>() {
140
			public void handleEvent(BaseEvent be) {
141
			public void handleEvent(BaseEvent be) {
141
				grille.getStore().sort("nom", SortDir.ASC);
-
 
142
				grille.getSelectionModel().select(0, false);
142
				grille.getSelectionModel().select(0, false);
143
			}
143
			}
144
		});
144
		});
145
		grille.addListener(Events.OnDoubleClick, new Listener<BaseEvent>(){
145
		grille.addListener(Events.OnDoubleClick, new Listener<BaseEvent>(){
146
			public void handleEvent(BaseEvent be) {
146
			public void handleEvent(BaseEvent be) {
147
				modifier.fireEvent(Events.Select);
147
				modifier.fireEvent(Events.Select);
148
			}
148
			}
149
		});
149
		});
-
 
150
 
-
 
151
		grille.addListener(Events.SortChange, new Listener<BaseEvent>() {
-
 
152
 
-
 
153
			@Override
-
 
154
			public void handleEvent(BaseEvent be) {
-
 
155
				GridEvent ge = (GridEvent<Personne>) be;
-
 
156
				// TODO rajouter un test sur le sort state pour trier par nom par défaut 
-
 
157
				// bref, on verra plus tard parce que c'est chiant et qu'on en a marre de coel
-
 
158
				String tri = ge.getSortInfo().getSortField();
-
 
159
				if(tri.equals("_courriel_princ_")) {
-
 
160
					tri = "truk_courriel";
-
 
161
				}
-
 
162
				
-
 
163
				if(tri.equals("fmt_nom_complet")) {
-
 
164
					tri = "nom";
-
 
165
				}
-
 
166
				PersonneAsyncDao.tri = Personne.PREFIXE+"_"+tri+" "+ge.getSortInfo().getSortDir().toString();
-
 
167
				pagination.changePage();
-
 
168
			}
-
 
169
		});
150
		add(grille);
170
		add(grille);
151
		
171
		
152
		PersonneListe personneListe = new PersonneListe();
172
		PersonneListe personneListe = new PersonneListe();
153
		champFiltreRecherche = new ChampFiltreRecherche(mediateur, toolBar, personneListe);
173
		champFiltreRecherche = new ChampFiltreRecherche(mediateur, toolBar, personneListe);
154
		// Définition de la barre de pagination
174
		// Définition de la barre de pagination
155
		pagination = new BarrePaginationVue(personneListe, mediateur, champFiltreRecherche);
175
		pagination = new BarrePaginationVue(personneListe, mediateur, champFiltreRecherche);
156
		setBottomComponent(pagination);
176
		setBottomComponent(pagination);
157
	}
177
	}
158
 
178
 
159
	private void clicListe(Personne personne) {
179
	private void clicListe(Personne personne) {
160
		if (personne != null && store.getCount() > 0) {
180
		if (personne != null && store.getCount() > 0) {
161
			mediateur.clicListePersonne(personne);
181
			mediateur.clicListePersonne(personne);
162
		}
182
		}
163
	}
183
	}
164
	
184
	
165
	private void clicSupprimerPersonne(List<Personne> personnesASupprimer) {
185
	private void clicSupprimerPersonne(List<Personne> personnesASupprimer) {
166
		if (store.getCount() > 0) {
186
		if (store.getCount() > 0) {
167
			mediateur.clicSupprimerPersonne(this, personnesASupprimer);
187
			mediateur.clicSupprimerPersonne(this, personnesASupprimer);
168
		}
188
		}
169
	}
189
	}
170
	
190
	
171
	private void gererEtatActivationBouton()	{
191
	private void gererEtatActivationBouton()	{
172
		int nbreElementDuMagazin = store.getCount();
192
		int nbreElementDuMagazin = store.getCount();
173
		ajouter.enable();
193
		ajouter.enable();
174
		if (nbreElementDuMagazin == 0) {
194
		if (nbreElementDuMagazin == 0) {
175
			supprimer.disable();
195
			supprimer.disable();
176
			modifier.disable();
196
			modifier.disable();
177
		} else if (nbreElementDuMagazin > 0) {
197
		} else if (nbreElementDuMagazin > 0) {
178
			modifier.enable();
198
			modifier.enable();
179
			if (((Utilisateur) Registry.get(RegistreId.UTILISATEUR_COURANT)).isIdentifie()) {
199
			if (((Utilisateur) Registry.get(RegistreId.UTILISATEUR_COURANT)).isIdentifie()) {
180
				supprimer.enable();
200
				supprimer.enable();
181
			}
201
			}
182
		}
202
		}
183
	}
203
	}
184
	
204
	
185
	public void rafraichir(Object nouvellesDonnees) {
205
	public void rafraichir(Object nouvellesDonnees) {
186
		
206
		
187
		if (nouvellesDonnees instanceof PersonneListe) {
207
		if (nouvellesDonnees instanceof PersonneListe) {
188
			PersonneListe listePersonnes = (PersonneListe) nouvellesDonnees;
208
			PersonneListe listePersonnes = (PersonneListe) nouvellesDonnees;
189
			
209
			
190
			// la grille de gxt est case sensitive, on harmonise donc tous les noms en majuscule et sans espaces
210
			// la grille de gxt est case sensitive, on harmonise donc tous les noms en majuscule et sans espaces
191
			// au début et à la fin  afin de pouvoir trier correctement 
211
			// au début et à la fin  afin de pouvoir trier correctement 
192
			// (la colonne nom ne sert qu'au tri et n'est pas affichée)
212
			// (la colonne nom ne sert qu'au tri et n'est pas affichée)
193
			for (Iterator<Personne> iterator = listePersonnes.toList().iterator(); iterator.hasNext();) {
213
			for (Iterator<Personne> iterator = listePersonnes.toList().iterator(); iterator.hasNext();) {
194
				 Personne personne =  iterator.next();
214
				 Personne personne =  iterator.next();
195
				 personne.setNom(personne.getNom().toUpperCase().trim());
215
				 personne.setNom(personne.getNom().toUpperCase().trim());
196
			}
216
			}
197
			
217
			
198
			champFiltreRecherche.setListePaginable(listePersonnes);
218
			champFiltreRecherche.setListePaginable(listePersonnes);
199
			pagination.setlistePaginable(listePersonnes);
219
			pagination.setlistePaginable(listePersonnes);
200
			pagination.rafraichir(listePersonnes.getPageTable());
220
			pagination.rafraichir(listePersonnes.getPageTable());
201
			
221
			
202
			if (listePersonnes != null) {
222
			if (listePersonnes != null) {
203
				List<Personne> liste = (List<Personne>) listePersonnes.toList();
223
				List<Personne> liste = (List<Personne>) listePersonnes.toList();
204
				store.removeAll();
224
				store.removeAll();
205
				store.add(liste);
225
				store.add(liste);
206
				store.sort("nom", SortDir.ASC);
-
 
207
				mediateur.actualiserPanneauCentral();
226
				mediateur.actualiserPanneauCentral();
208
				grille.fireEvent(Events.ViewReady);
227
				grille.fireEvent(Events.ViewReady);
209
			}
228
			}
210
		} else if (nouvellesDonnees instanceof Information)	{
229
		} else if (nouvellesDonnees instanceof Information)	{
211
			Information info = (Information) nouvellesDonnees;
230
			Information info = (Information) nouvellesDonnees;
212
			if (info.getType().equals("maj_utilisateur")) {
231
			if (info.getType().equals("maj_utilisateur")) {
213
				gererEtatActivationBouton();
232
				gererEtatActivationBouton();
214
			} else if(info.getType().equals("personne_modifiee")) {
233
			} else if(info.getType().equals("personne_modifiee")) {
215
				if(personneSelectionnee != null) {
234
				if(personneSelectionnee != null) {
216
					store.remove(indexElementSelectionne);
235
					store.remove(indexElementSelectionne);
217
					personneSelectionnee = null;
236
					personneSelectionnee = null;
218
				}
237
				}
219
				Personne personneModifiee = (Personne)info.getDonnee(0);
238
				Personne personneModifiee = (Personne)info.getDonnee(0);
220
				// au cas ou le bouton appliquer aurait été cliqué avant de valider
239
				// au cas ou le bouton appliquer aurait été cliqué avant de valider
221
				store.remove(personneModifiee);
240
				store.remove(personneModifiee);
222
				store.insert(personneModifiee, indexElementSelectionne);
241
				store.insert(personneModifiee, indexElementSelectionne);
223
				personneSelectionnee = personneModifiee;
242
				personneSelectionnee = personneModifiee;
224
				int indexElementSelectionne = store.indexOf(personneSelectionnee);
243
				int indexElementSelectionne = store.indexOf(personneSelectionnee);
225
				grille.getSelectionModel().select(indexElementSelectionne, false);
244
				grille.getSelectionModel().select(indexElementSelectionne, false);
226
				grille.getView().focusRow(indexElementSelectionne);
245
				grille.getView().focusRow(indexElementSelectionne);
227
				clicListe(personneSelectionnee);
246
				clicListe(personneSelectionnee);
228
			} else if (info.getType().equals("suppression_personne")) 	{
247
			} else if (info.getType().equals("suppression_personne")) 	{
229
				InfoLogger.display("Suppression de personne", info.getMessages().toString());	
248
				InfoLogger.display("Suppression de personne", info.getMessages().toString());	
230
				pagination.getlistePaginable().recharger();
249
				pagination.getlistePaginable().recharger();
231
				gererEtatActivationBouton();
250
				gererEtatActivationBouton();
232
			} else if (info.getType().equals("maj_utilisateur"))	{
251
			} else if (info.getType().equals("maj_utilisateur"))	{
233
				gererEtatActivationBouton();
252
				gererEtatActivationBouton();
234
			} else {
253
			} else {
235
				InfoLogger.display("Erreur", info.getMessages().toString(), true);
254
				InfoLogger.display("Erreur", info.getMessages().toString(), true);
236
			}
255
			}
237
		} else {
256
		} else {
238
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
257
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
239
		}
258
		}
240
		
259
		
241
		layout();
260
		layout();
242
	}
261
	}
243
}
262
}
244
 
263
 
245
 
264
 
246
 
265
 
247
 
266
 
248
 
267
 
249
 
268