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
728 aurelien 1
package org.tela_botanica.client.util;
2
 
3
import java.util.Iterator;
4
 
5
import org.tela_botanica.client.interfaces.Rafraichissable;
989 aurelien 6
import org.tela_botanica.client.modeles.objets.ListeReferentielPerso;
7
import org.tela_botanica.client.modeles.objets.ListeReferentielPerso.TypesReferentiels;
728 aurelien 8
import org.tela_botanica.client.observation.ObservationMediateur;
9
 
2602 aurelien 10
import com.google.gwt.user.client.Window;
728 aurelien 11
import com.gwtext.client.core.EventCallback;
12
import com.gwtext.client.core.EventObject;
13
import com.gwtext.client.core.ListenerConfig;
14
import com.gwtext.client.data.ArrayReader;
15
import com.gwtext.client.data.FieldDef;
16
import com.gwtext.client.data.MemoryProxy;
17
import com.gwtext.client.data.Record;
18
import com.gwtext.client.data.RecordDef;
19
import com.gwtext.client.data.Store;
20
import com.gwtext.client.data.StringFieldDef;
21
import com.gwtext.client.widgets.form.ComboBox;
2602 aurelien 22
import com.gwtext.client.widgets.form.Field;
728 aurelien 23
import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter;
24
 
25
public abstract class AutoCompletionRefComboBox extends ComboBox implements Rafraichissable {
26
 
27
	// TODO: faire un enum
28
	private final int KEY_ALT = 18;
29
	private final int KEY_BACKSPACE = 8;
30
	private final int KEY_CTRL = 17;
31
	private final int KEY_DELETE = 46;
32
	private final int KEY_DOWN = 40;
33
	private final int KEY_END = 35;
34
	private final int KEY_ENTER = 13;
35
	private final int KEY_ESCAPE = 27;
36
	private final int KEY_HOME = 36;
37
	private final int KEY_LEFT = 37;
38
	private final int KEY_PAGEDOWN = 34;
39
	private final int KEY_PAGEUP = 33;
40
	private final int KEY_RIGHT = 39;
41
	private final int KEY_SHIFT = 16;
42
	private final int KEY_TAB = 9;
43
	private final int KEY_UP = 38;
44
 
45
	private ObservationMediateur oMediateur = null;
46
	private TypesReferentiels typeRef = null;
47
	private boolean selectionValeur = false;
48
	private boolean estModifie = false;
49
 
2602 aurelien 50
	private Record rdSelectionne = null;
51
	private String valeurBrute = null;
52
 
728 aurelien 53
	final String resultTplRefPerso = "<div class=\"search-item-ref\">{element_referentiel}</div>";
54
 
55
	public AutoCompletionRefComboBox(String label, String nom, ObservationMediateur oMediateur, TypesReferentiels typeRef) {
56
 
57
		// Accesskey pour debugging
58
		super(label,nom);
59
 
60
		this.oMediateur = oMediateur;
61
		this.typeRef = typeRef;
62
 
63
		setTpl(resultTplRefPerso);
64
		setMode(ComboBox.REMOTE);
65
		setItemSelector("div.search-item-ref");
66
		setTypeAhead(true);
67
		setLoadingText("Recherche...");
68
		setHideTrigger(true);
69
 
70
	    ListenerConfig listenerConfigAutocompletion=new ListenerConfig();
71
	    listenerConfigAutocompletion.setDelay(200);
72
	    listenerConfigAutocompletion.setStopPropagation(false);
73
	    listenerConfigAutocompletion.setStopEvent(false);
74
 
75
		addKeyPressListener(new EventCallback() {
76
 
1291 aurelien 77
			@Override
728 aurelien 78
			public void execute(EventObject e) {
79
 
80
				switch(e.getKey()) {
81
 
82
				case KEY_ALT:
83
  	    	      case KEY_CTRL:
84
  	    	      case KEY_DOWN:
85
  	    	      case KEY_END:
86
  	    	      case KEY_ESCAPE:
87
  	    	      case KEY_HOME:
88
  	    	      case KEY_LEFT:
89
  	    	      case KEY_PAGEDOWN:
90
  	    	      case KEY_PAGEUP:
91
  	    	      case KEY_RIGHT:
92
  	    	      case KEY_SHIFT:
93
  	    	      case KEY_TAB:
94
  	    	      case KEY_UP:
95
 
96
	    	        break;
97
 
98
  	    	    case KEY_ENTER:
99
  	    	    	if (selectionValeur) {
100
  	    	    		estModifie= true;
101
  	    	    		selectionValeur=false;
2602 aurelien 102
  	    	    		if(rdSelectionne != null) {
103
  	    	    			Window.alert("ergregegegegergre");
104
  	    	    			setRawValue(rdSelectionne.getAsString("element_referentiel"));
105
  	    	    		}
728 aurelien 106
  	    	    		onModificationValeur();
107
   	    	    	}
108
   	    	    	else {
109
  	    	    		onValidationSaisie();
110
  	    	    	}
111
  	    	    break;
112
 
113
  	    	      default:
114
  	    	    	estModifie = true;
815 aurelien 115
  	    	      	onModificationValeur();
728 aurelien 116
  	    	      	obtenirReferentiel();
117
				}
118
			}
119
	    },listenerConfigAutocompletion);
120
 
121
 
122
		// Listener completion
123
		addListener(new ComboBoxListenerAdapter() {
1291 aurelien 124
             @Override
2602 aurelien 125
			public void onSelect(ComboBox comboBox, Record record, int index) {
126
            	 Window.alert(rdSelectionne.getAsString("element_referentiel")+" "+getRawValue());
127
            	 valeurBrute = getRawValue();
128
            	 rdSelectionne = record;
728 aurelien 129
            	 selectionValeur=true;
130
                 collapse();
2602 aurelien 131
             }
132
 
133
            @Override
134
			public void onBlur(Field field) {
135
            	/*if(rdSelectionne == null || rdSelectionne.getAsString("element_referentiel").equals(getRawValue())) {
136
            		setValue(getRawValue());
137
            	}*/
138
            }
728 aurelien 139
         });
140
	}
141
 
1291 aurelien 142
	@Override
728 aurelien 143
	public void rafraichir(Object nouvelleDonnees,
144
			boolean repandreRaffraichissement) {
145
 
146
		ListeReferentielPerso referentielPerso = (ListeReferentielPerso)nouvelleDonnees;
147
 
148
		int i = 0;
149
		Object[][] refData = new Object[referentielPerso.size()][1];
150
 
1940 aurelien 151
		for (Iterator<String> it = referentielPerso.keySet().iterator(); it.hasNext();)
728 aurelien 152
		{
153
			String ref= referentielPerso.get(it.next());
154
			refData[i][0]= ref;
155
 
156
			i++;
157
		}
158
 
159
		FieldDef defStation = new StringFieldDef("element_referentiel");
160
		FieldDef[] defTab = {defStation};
161
 
162
		RecordDef rd = new RecordDef(defTab);
163
 
164
		final MemoryProxy dataProxy = new MemoryProxy(refData);
165
		final ArrayReader reader = new ArrayReader(rd);
166
 
167
		Store store=new Store(dataProxy,reader);
168
 
169
		setStore(store);
170
		store.load();
171
	}
172
 
173
	private void obtenirReferentiel() {
174
 
175
		String valeurChamp = getValue();
176
 
177
		if(valeurChamp == null) {
178
			valeurChamp = "";
179
		}
180
 
181
		oMediateur.obtenirListeReferentielPerso(this, typeRef, valeurChamp);
182
	}
183
 
184
	public abstract void onValidationSaisie();
185
	public abstract void onModificationValeur();
186
 
187
}