[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[platform-swt-dev] ComboAutoComplete
|
Hello,
If someone is interested, you can take a look at finished(? ;D) auto
complete combo class.
Current errata: if incorrect char is inserted within middle of text it don't
resets to the character, but removes it, deselects and jumps to end of text.
Code: ----------------------------------------------------------------------
-------
package lv.raksta.swt.widgets;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
/**
* Created by IntelliJ IDEA.
* User: karlisz
* Date: 2003.3.12
* Time: 13:19:34
* To change this template use Options | File Templates.
*/
public class ComboAutoComplete extends Combo {
public ComboAutoComplete(Composite composite, int i) {
super(composite, i);
this.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent event) {
updateText();
}
});
}
private void updateText() {
//empty autocomplete boxes should be disabled, so no unpleasant
errors can happen.
int count = getItemCount();
if (count == 0) {
setEnabled(false);
return;
} else {
setEnabled(true);
}
//if no data selected/entered let's activate first one
if (getText().equalsIgnoreCase("")) {
select(0);
return;
}
String[] entries = getItems();
String text = getText();
//first check, case sensitive (avoids hiding values with different
cases)
for (int i = 0; i < entries.length; i++) {
//search for match
if (entries[i].startsWith(text)) {
select(i);
Point selection = new Point(text.length(),
entries[i].length());
setSelection(selection);
redraw();
return;
}
}
//second - case insensitive
for (int i = 0; i < entries.length; i++) {
//search for match
if (entries[i].toLowerCase().startsWith(text.toLowerCase())) {
select(i);
Point selection = new Point(text.length(),
entries[i].length());
setSelection(selection);
redraw();
return;
}
}
//third - fallback to previous character
String oldString = getText();
String newString = oldString.substring(0, oldString.length() - 1);
setText(newString);
Point point = new Point(newString.length(), newString.length());
setSelection(point);
}
protected void checkSubclass() {
//nah, disable subclass check.
}
}
------------------------------------------------------
Karlis Zigurs