1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
public class CelluleCombo extends KTableCellEditor {
private CCombo m_Combo;
private String m_Items[];
private Cursor m_ArrowCursor = new Cursor(Display.getDefault(), SWT.CURSOR_ARROW);
private KeyAdapter keyListener = new KeyAdapter() {
public void keyPressed(KeyEvent e) {
try {
onKeyPressed(e);
} catch (Exception ex) {
// Do nothing
}
e.doit = false;
}
};
private TraverseListener travListener = new TraverseListener() {
public void keyTraversed(TraverseEvent e) {
onTraverse(e);
}
};
public void open(KTable table, int row, int col, Rectangle rect) {
super.open(table, row, col, rect);
String content = m_Model.getContentAt(m_Col, m_Row).toString();
int oIndexEspace = content.indexOf(" ");
if (oIndexEspace != -1)
{
content = content.substring(0, oIndexEspace);
}
m_Combo.setText(content);
m_Combo.setSelection(new Point(0, content.length()));
}
public void close(boolean save)
{
String content = m_Combo.getText();
int oIndexEspace = content.indexOf(" ");
if (oIndexEspace != -1)
{
content = content.substring(0, oIndexEspace);
}
if (save)
m_Model.setContentAt(m_Col, m_Row, content);
m_Combo.removeKeyListener(keyListener);
m_Combo.removeTraverseListener(travListener);
super.close(save);
m_Combo = null;
m_ArrowCursor.dispose();
}
protected Control createControl() {
m_Combo = new CCombo(m_Table, SWT.NORMAL);
m_Combo.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
if (m_Items != null)
m_Combo.setItems(m_Items);
m_Combo.addKeyListener(keyListener);
m_Combo.addTraverseListener(travListener);
m_Combo.setCursor(m_ArrowCursor);
return m_Combo;
}
protected void onTraverse(TraverseEvent e)
{
// set selection to the appropriate next element:
switch (e.keyCode)
{
case SWT.ARROW_UP: // Go to previous item
case SWT.ARROW_DOWN: // Go to next item
{
break;
}
default: {
super.onTraverse(e);
break;
}
}
}
public void setBounds(Rectangle rect)
{
super.setBounds(new Rectangle(rect.x, rect.y+1,
rect.width, rect.height-2));
}
public void setItems(String items[]) {
m_Items = items;
}
public void setContent(Object content) {
if (content instanceof Integer) {
m_Combo.select(((Integer)content).intValue());
} else if (content instanceof String) {
setSelectionToClosestMatch((String)content);
} else {
setSelectionToClosestMatch(content.toString());
}
}
private void setSelectionToClosestMatch(String content) {
content = content.toLowerCase();
String[] citems = m_Combo.getItems();
String[] items = new String[citems.length];
for (int i=0; i<citems.length; i++)
items[i] = citems[i].toLowerCase();
for (int length=content.length(); length>=0; length--) {
String part = content.substring(0, length);
for (int i=0; i<items.length; i++)
if (items[i].startsWith(part)) {
m_Combo.select(i);
return;
}
}
}
} |
Partager