Subversion Repositories eFlore/Applications.cel

Rev

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

Rev Author Line No. Line
1940 aurelien 1
package org.tela_botanica.client.util;
2
 
3
import java.util.ArrayList;
4
import java.util.Iterator;
5
 
6
import org.tela_botanica.client.interfaces.Rafraichissable;
7
import org.tela_botanica.client.modeles.dao.ListeReferentielChampsEtendusDAO;
1943 aurelien 8
import org.tela_botanica.client.modeles.objets.Configuration;
1940 aurelien 9
 
10
import com.google.gwt.user.client.Timer;
11
import com.gwtext.client.core.EventCallback;
12
import com.gwtext.client.core.EventObject;
13
import com.gwtext.client.core.Ext;
14
import com.gwtext.client.core.ListenerConfig;
15
import com.gwtext.client.data.ArrayReader;
16
import com.gwtext.client.data.FieldDef;
17
import com.gwtext.client.data.MemoryProxy;
18
import com.gwtext.client.data.Record;
19
import com.gwtext.client.data.RecordDef;
20
import com.gwtext.client.data.Store;
21
import com.gwtext.client.data.StringFieldDef;
22
import com.gwtext.client.widgets.Component;
23
import com.gwtext.client.widgets.event.ComponentListenerAdapter;
24
import com.gwtext.client.widgets.form.ComboBox;
25
import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter;
26
 
27
public class ChampSaisieEtendu extends ComboBox implements Rafraichissable {
28
		// TODO: faire un enum
29
		private final int KEY_ALT = 18;
30
		private final int KEY_BACKSPACE = 8;
31
		private final int KEY_CTRL = 17;
32
		private final int KEY_DELETE = 46;
33
		private final int KEY_DOWN = 40;
34
		private final int KEY_END = 35;
35
		private final int KEY_ENTER = 13;
36
		private final int KEY_ESCAPE = 27;
37
		private final int KEY_HOME = 36;
38
		private final int KEY_LEFT = 37;
39
		private final int KEY_PAGEDOWN = 34;
40
		private final int KEY_PAGEUP = 33;
41
		private final int KEY_RIGHT = 39;
42
		private final int KEY_SHIFT = 16;
43
		private final int KEY_TAB = 9;
44
		private final int KEY_UP = 38;
45
 
46
		private boolean selectionValeur = false;
47
		private boolean estModifie = false;
48
 
49
		private String cle = null;
50
		private String label = null;
51
 
52
		private Timer timer = null;
53
 
54
		final String resultTplRefPerso = "<div class=\"search-item-ref\">{valeur}</div>";
55
 
56
		public ChampSaisieEtendu(String label, String cle) {
57
 
58
			// Accesskey pour debugging
59
			super(label,cle);
60
 
61
			this.cle =cle;
62
			this.label = label;
63
 
64
			setTpl(resultTplRefPerso);
65
			setMode(ComboBox.REMOTE);
66
			setItemSelector("div.search-item-ref");
67
			setTypeAhead(true);
68
			setLoadingText("Recherche...");
69
			setHideTrigger(true);
70
 
71
		    ListenerConfig listenerConfigAutocompletion=new ListenerConfig();
72
		    listenerConfigAutocompletion.setDelay(200);
73
		    listenerConfigAutocompletion.setStopPropagation(false);
74
		    listenerConfigAutocompletion.setStopEvent(false);
75
 
1943 aurelien 76
		    if(Configuration.saisieChampsEtendusActivee()) {
77
				addKeyPressListener(new EventCallback() {
78
 
79
					@Override
80
					public void execute(EventObject e) {
81
 
82
						switch(e.getKey()) {
83
 
84
						  case KEY_ALT:
85
		  	    	      case KEY_CTRL:
86
		  	    	      case KEY_END:
87
		  	    	      case KEY_ESCAPE:
88
		  	    	      case KEY_HOME:
89
		  	    	      case KEY_LEFT:
90
		  	    	      case KEY_PAGEDOWN:
91
		  	    	      case KEY_PAGEUP:
92
		  	    	      case KEY_RIGHT:
93
		  	    	      case KEY_SHIFT:
94
		  	    	      case KEY_TAB:
95
		  	    	      case KEY_UP:
96
 
97
			    	        break;
98
 
99
		  	    	      case KEY_DOWN:
100
		  	    	    	  if(getValueAsString().isEmpty() && !isExpanded()) {
101
		  	    	    		  obtenirListeValeurs("*");
102
		  	    	    	  }
103
		  	    	      break;
104
 
105
		  	    	      default:
106
		  	    	    	if(timer != null) {
107
			    	    		timer.cancel();
108
			    	    	}
109
			    	    	timer = new Timer() {
110
 
111
								@Override
112
								public void run() {
113
				  	    	      	obtenirListeValeurs();
114
								}
115
							};
116
							timer.schedule(300);
117
						}
1940 aurelien 118
					}
1943 aurelien 119
			    },listenerConfigAutocompletion);
120
		    } else {
121
		    	initStoreVide();
122
		    }
1940 aurelien 123
 
124
			// Listener completion
125
			addListener(new ComboBoxListenerAdapter() {
126
	             @Override
127
				public void onSelect(ComboBox comboBox, Record record, int index) {
128
	            	 setValue(record.getAsString("valeur"));
129
	            	 selectionValeur=true;
130
	                 collapse();
131
	             }
132
	         });
133
 
134
			this.addListener(new ComponentListenerAdapter() {
135
				@Override
136
				public void onRender(Component component) {
137
					setLargeurChamp();
138
				}
139
			});
140
 
141
		}
142
 
143
		@Override
144
		public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) {
145
 
146
			@SuppressWarnings("unchecked")
147
			ArrayList<String> valeurs = (ArrayList<String>)nouvelleDonnees;
148
 
149
			int i = 0;
150
			Object[][] refData = new Object[valeurs.size()][1];
151
 
152
			for (Iterator<String> it = valeurs.iterator(); it.hasNext();)
153
			{
154
				refData[i][0]= it.next();
155
				i++;
156
			}
157
 
158
			FieldDef defValeur = new StringFieldDef("valeur");
159
			FieldDef[] defTab = {defValeur};
160
 
161
			RecordDef rd = new RecordDef(defTab);
162
 
163
			final MemoryProxy dataProxy = new MemoryProxy(refData);
164
			final ArrayReader reader = new ArrayReader(rd);
165
 
1943 aurelien 166
			Store store = new Store(dataProxy,reader);
1940 aurelien 167
 
168
			setStore(store);
169
			store.load();
170
		}
171
 
172
		private void obtenirListeValeurs() {
173
			String valeurChamp = getValue();
174
			obtenirListeValeurs(valeurChamp);
175
		}
176
 
177
		private void obtenirListeValeurs(String valeurChamp) {
178
			if(valeurChamp == null) {
179
				valeurChamp = "";
180
			} else {
181
				valeurChamp += "*";
182
			}
183
			ListeReferentielChampsEtendusDAO lrceDao = new ListeReferentielChampsEtendusDAO(null);
184
			lrceDao.obtenirListeValeursChampEtendu(this, cle, valeurChamp);
185
		}
186
 
187
		public void setLargeurChamp() {
188
			// Correction un peu moche pour améliorer l'affichage du champ
189
			String idElementEnfant = Ext.get(("x-form-el-"+cle)).getFirstChild().getId();
190
			Ext.get(idElementEnfant).setWidth("90%", false);
191
			Ext.get(cle).setWidth("100%", false);
192
		}
1943 aurelien 193
 
194
		private void initStoreVide() {
195
			Object[][] refData = new Object[0][1];
196
 
197
			FieldDef defValeur = new StringFieldDef("valeur");
198
			FieldDef[] defTab = {defValeur};
199
 
200
			RecordDef rd = new RecordDef(defTab);
201
 
202
			final MemoryProxy dataProxy = new MemoryProxy(refData);
203
			final ArrayReader reader = new ArrayReader(rd);
204
 
205
			Store store = new Store(dataProxy,reader);
206
 
207
			setStore(store);
208
			store.load();
209
		}
1940 aurelien 210
}