New file |
0,0 → 1,170 |
package org.tela_botanica.client.util; |
|
import java.util.Iterator; |
|
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.objets.ListeReferentielPerso; |
import org.tela_botanica.client.modeles.objets.ListeReferentielPerso.TypesReferentiels; |
import org.tela_botanica.client.observation.ObservationMediateur; |
|
import com.gwtext.client.core.EventCallback; |
import com.gwtext.client.core.EventObject; |
import com.gwtext.client.core.ListenerConfig; |
import com.gwtext.client.data.ArrayReader; |
import com.gwtext.client.data.FieldDef; |
import com.gwtext.client.data.MemoryProxy; |
import com.gwtext.client.data.Record; |
import com.gwtext.client.data.RecordDef; |
import com.gwtext.client.data.Store; |
import com.gwtext.client.data.StringFieldDef; |
import com.gwtext.client.widgets.form.ComboBox; |
import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter; |
|
public abstract class AutoCompletionRefComboBox extends ComboBox implements Rafraichissable { |
|
// TODO: faire un enum |
private final int KEY_ALT = 18; |
private final int KEY_BACKSPACE = 8; |
private final int KEY_CTRL = 17; |
private final int KEY_DELETE = 46; |
private final int KEY_DOWN = 40; |
private final int KEY_END = 35; |
private final int KEY_ENTER = 13; |
private final int KEY_ESCAPE = 27; |
private final int KEY_HOME = 36; |
private final int KEY_LEFT = 37; |
private final int KEY_PAGEDOWN = 34; |
private final int KEY_PAGEUP = 33; |
private final int KEY_RIGHT = 39; |
private final int KEY_SHIFT = 16; |
private final int KEY_TAB = 9; |
private final int KEY_UP = 38; |
|
private ObservationMediateur oMediateur = null; |
private TypesReferentiels typeRef = null; |
private boolean selectionValeur = false; |
private boolean estModifie = false; |
|
final String resultTplRefPerso = "<div class=\"search-item-ref\">{element_referentiel}</div>"; |
|
public AutoCompletionRefComboBox(String label, String nom, ObservationMediateur oMediateur, TypesReferentiels typeRef) { |
|
// Accesskey pour debugging |
super(label,nom); |
|
this.oMediateur = oMediateur; |
this.typeRef = typeRef; |
|
setTpl(resultTplRefPerso); |
setMode(ComboBox.REMOTE); |
setItemSelector("div.search-item-ref"); |
setTypeAhead(true); |
setLoadingText("Recherche..."); |
setHideTrigger(true); |
|
ListenerConfig listenerConfigAutocompletion=new ListenerConfig(); |
listenerConfigAutocompletion.setDelay(200); |
listenerConfigAutocompletion.setStopPropagation(false); |
listenerConfigAutocompletion.setStopEvent(false); |
|
addKeyPressListener(new EventCallback() { |
|
@Override |
public void execute(EventObject e) { |
|
switch(e.getKey()) { |
|
case KEY_ALT: |
case KEY_CTRL: |
case KEY_DOWN: |
case KEY_END: |
case KEY_ESCAPE: |
case KEY_HOME: |
case KEY_LEFT: |
case KEY_PAGEDOWN: |
case KEY_PAGEUP: |
case KEY_RIGHT: |
case KEY_SHIFT: |
case KEY_TAB: |
case KEY_UP: |
|
break; |
|
case KEY_ENTER: |
if (selectionValeur) { |
estModifie= true; |
selectionValeur=false; |
onModificationValeur(); |
} |
else { |
onValidationSaisie(); |
} |
break; |
|
default: |
estModifie = true; |
onModificationValeur(); |
obtenirReferentiel(); |
} |
} |
},listenerConfigAutocompletion); |
|
|
// Listener completion |
addListener(new ComboBoxListenerAdapter() { |
@Override |
public void onSelect(ComboBox comboBox, Record record, int index) { |
setValue(record.getAsString("element_referentiel")); |
selectionValeur=true; |
collapse(); |
} |
}); |
|
} |
|
@Override |
public void rafraichir(Object nouvelleDonnees, |
boolean repandreRaffraichissement) { |
|
ListeReferentielPerso referentielPerso = (ListeReferentielPerso)nouvelleDonnees; |
|
int i = 0; |
Object[][] refData = new Object[referentielPerso.size()][1]; |
|
for (Iterator it = referentielPerso.keySet().iterator(); it.hasNext();) |
{ |
String ref= referentielPerso.get(it.next()); |
refData[i][0]= ref; |
|
i++; |
} |
|
FieldDef defStation = new StringFieldDef("element_referentiel"); |
FieldDef[] defTab = {defStation}; |
|
RecordDef rd = new RecordDef(defTab); |
|
final MemoryProxy dataProxy = new MemoryProxy(refData); |
final ArrayReader reader = new ArrayReader(rd); |
|
Store store=new Store(dataProxy,reader); |
|
setStore(store); |
store.load(); |
} |
|
private void obtenirReferentiel() { |
|
String valeurChamp = getValue(); |
|
if(valeurChamp == null) { |
valeurChamp = ""; |
} |
|
oMediateur.obtenirListeReferentielPerso(this, typeRef, valeurChamp); |
} |
|
public abstract void onValidationSaisie(); |
public abstract void onModificationValeur(); |
|
} |