Skip to main content



      Home
Home » Eclipse Projects » JFace » [content assist] Problem with ContentAssist at TextCellEditor
[content assist] Problem with ContentAssist at TextCellEditor [message #9146] Mon, 25 May 2009 14:36 Go to next message
Eclipse UserFriend
This is a multi-part message in MIME format.
--------------020503070603090709070006
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 7bit

Hi,
I try to add a content assist system on my TextCellEditors in a Table
with filtering and so on.
It works fine if I use the cursor and enter keys but if I select an
entry from the proposallist with the mouse it dosen't work.

Thanks in advance for tips and best regards,

Heiko

PS: for this snippet I use Eclipse 3.5RC2 and Java 1.6 on Vista.

Here are my code snippet to demonstrate my problem:

package de.nacorswelt.contentassist;

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import org.eclipse.jface.bindings.keys.KeyStroke;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.fieldassist.ContentProposalAdapter;
import org.eclipse.jface.fieldassist.ControlDecoration;
import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
import org.eclipse.jface.fieldassist.IContentProposal;
import org.eclipse.jface.fieldassist.IContentProposalListener;
import org.eclipse.jface.fieldassist.IContentProposalListener2;
import org.eclipse.jface.fieldassist.IContentProposalProvider;
import org.eclipse.jface.fieldassist.TextContentAdapter;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;

public class TestSnippet {

public abstract class AbstractModelObject {
private PropertyChangeSupport propertyChangeSupport = new
PropertyChangeSupport(
this);

public void addPropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(listener);
}

public void addPropertyChangel_istener(String propertyName,
PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(propertyName ,
listener);
}

public void removePropertyChangeListener(PropertyChangeListener
listener) {
propertyChangeSupport.removePropertyChangeListener(listener) ;
}

public void removePropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(propertyN ame,
listener);
}

protected void firePropertyChange(String propertyName, Object oldValue,
Object newValue) {
propertyChangeSupport.firePropertyChange(propertyName, oldValue,
newValue);
}
}

public class Person extends AbstractModelObject {
String name;
String firstName;

public Person(String firstName, String name) {
this.name = name;
this.firstName = firstName;
}

public String getName() {
return name;
}

public void setName(String name) {
firePropertyChange("name", this.name, this.name = name);
}

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
firePropertyChange("firstName", this.firstName,
this.firstName = firstName);
}
}

public class CommiterList {
private List<Person> people = new LinkedList<Person>();
{
people.add(new Person("Dave", "Orme"));
people.add(new Person("David", "Orme"));
people.add(new Person("Gili", "Mendel"));
people.add(new Person("Ginger", "Mendel"));
people.add(new Person("Joe", "Winchester"));
people.add(new Person("Boris", "Bokowski"));
people.add(new Person("Brad", "Reynolds"));
people.add(new Person("Matthew", "Hall"));
people.add(new Person("Mobi", "Hall"));
}

public List<Person> getPeople() {
return people;
}
}

public class MyEditingSupport extends EditingSupport {
private CellEditor textEditor;
private Image contentHelpImage;

public MyEditingSupport(TableViewer viewer) {
super(viewer);
textEditor = new TextCellEditor(viewer.getTable());
if (contentHelpImage == null)
contentHelpImage = FieldDecorationRegistry.getDefault()
.getFieldDecoration(
FieldDecorationRegistry.DEC_CONTENT_PROPOSAL)
.getImage();
PersonProposalProvider proposalProvider = new PersonProposalProvider(
commiterList.getPeople());
proposalProvider.setFiltering(true);
ContentProposalAdapter adapter = new ContentProposalAdapter(
textEditor.getControl(), new TextContentAdapter(),
proposalProvider, KeyStroke.getInstance(SWT.CTRL, 32), null);
adapter.setPropagateKeys(true);
adapter
.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_ REPLACE);
ControlDecoration dec = new ControlDecoration(textEditor
.getControl(), SWT.BOTTOM | SWT.RIGHT);
dec.setImage(contentHelpImage);
dec.setDescriptionText("Use VCtrl+SpaceV to open List");
}

protected boolean canEdit(Object element) {
if (element != null) {
return true;
}
return false;
}

protected CellEditor getCellEditor(Object element) {
return textEditor;
}

protected Object getValue(Object element) {
if (element instanceof Person) {
return ((Person) element).getFirstName();
}
return element.toString();
}

protected void setValue(Object element, Object value) {
Person _newPerson = null;
if (value != null) {
for (Person p : commiterList.getPeople()) {
if (p.getFirstName().equals(value)) {
_newPerson = p;
break;
}
}
}
if (_newPerson != null) {
int oldElementlndex = model.indexOf(element);
model.remove(oldElementlndex);
model.add(oldElementlndex, _newPerson);
MessageDialog.openInformation(shell, "successful", "Element ist set
to: " + _newPerson.getFirstName() + " " + _newPerson.getName());
getViewer().refresh(true);
} else {
MessageDialog.openError(shell, "Error", "The given value are:"
+ value);
}
}
}

public class FirstNameLabelProvider extends ColumnLabelProvider {
public String getText(Object element) {
if (element instanceof Person) {
return ((Person) element).getFirstName();
}
return super.getText(element);
}
}

public class SureNameLabelProvider extends ColumnLabelProvider {
public String getText(Object element) {
if (element instanceof Person) {
return ((Person) element).getName();
}
return super.getText(element);
}
}

public class PersonProposalProvider implements IContentProposalProvider {
private IContentProposal[] contentProposals;
private boolean filterProposals = false;
private List<Person> proposals;

public PersonProposalProvider(List<Person> proposals) {
super();
this.proposals = proposals;
}

public IContentProposal[] getProposals(String contents, int position) {
if (filterProposals) {
ArrayList list = new ArrayList();
for (Person p : proposals) {
if (p.getFirstName().length() >= contents.length()
&& p.getFirstName().substring(0, contents.length())
.equalsIgnoreCase(contents)) {
list.add(makeContentProposal(p));
}
}
return (IContentProposal[]) list
.toArray(new IContentProposal[list.size()]);
}
if (contentProposals == null) {
contentProposals = new IContentProposal[proposals.size()];
for (int i = 0; i < proposals.size(); i++) {
contentProposals[i] = makeContentProposal(proposals.get(i));
}
}
return contentProposals;
}

public void setProposals(List<Person> items) {
this.proposals = items;
contentProposals = null;
}

public void setFiltering(boolean filterProposals) {
this.filterProposals = filterProposals;
contentProposals = null;
}

private IContentProposal makeContentProposal(final Person proposal) {
return new IContentProposal() {
public String getContent() {
return proposal.getFirstName();
}

public String getDescription() {
return null;
}

public String getLabel() {
return proposal.getFirstName() + " - " + proposal.getName();
}

public int getCursorPosition() {
return proposal.firstName.length();
}
};
}
}

private static Shell shell;
private CommiterList commiterList;
private ArrayList<Person> model;

public TestSnippet(Shell shell) {
commiterList = new CommiterList();
model = createModel();
final Table table = new Table(shell, SWT.BORDER | SWT.FULL_SELECTION);
final TableViewer v = new TableViewer(table);
v.getTable().setLinesVisible(true);
v.setContentProvider(new ArrayContentProvider());

TableViewerColumn column = new TableViewerColumn(v, SWT.NONE);
column.getColumn().setWidth(200);
column.setLabelProvider(new FirstNameLabelProvider());
column.setEditingSupport(new MyEditingSupport(v));

column.setLabelProvider(new FirstNameLabelProvider());
TableViewerColumn columnName = new TableViewerColumn(v, SWT.NONE);
columnName.getColumn().setWidth(200);
columnName.setLabelProvider(new SureNameLabelProvider());

v.setInput(model);
}

private ArrayList<Person> createModel() {
ArrayList<Person> result = new ArrayList<Person>();
result.add(commiterList.getPeople().get(0));
return result;
}

public static void main(String[] args) {
Display display = new Display();
shell = new Shell(display);
shell.setLayout(new FillLayout());
new TestSnippet(shell);
shell.open();

while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}

display.dispose();

}

}




--------------020503070603090709070006
Content-Type: text/plain;
name="TestSnippet.java"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="TestSnippet.java"

cGFja2FnZSBkZS5uYWNvcnN3ZWx0LmNvbnRlbnRhc3Npc3Q7DQoNCmltcG9y dCBqYXZhLmJl
YW5zLlByb3BlcnR5Q2hhbmdlTGlzdGVuZXI7DQppbXBvcnQgamF2YS5iZWFu cy5Qcm9wZXJ0
eUNoYW5nZVN1cHBvcnQ7DQppbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsN CmltcG9ydCBq
YXZhLnV0aWwuTGlua2VkTGlzdDsNCmltcG9ydCBqYXZhLnV0aWwuTGlzdDsN Cg0KaW1wb3J0
IG9yZy5lY2xpcHNlLmpmYWNlLmJpbmRpbmdzLmtleXMuS2V5U3Ryb2tlOw0K aW1wb3J0IG9y
Zy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsNCmltcG9y dCBvcmcuZWNs
aXBzZS5qZmFjZS5maWVsZGFzc2lzdC5Db250ZW50UHJvcG9zYWxBZGFwdGVy Ow0KaW1wb3J0
IG9yZy5lY2xpcHNlLmpmYWNlLmZpZWxkYXNzaXN0LkNvbnRyb2xEZWNvcmF0 aW9uOw0KaW1w
b3J0IG9yZy5lY2xpcHNlLmpmYWNlLmZpZWxkYXNzaXN0LkZpZWxkRGVjb3Jh dGlvblJlZ2lz
dHJ5Ow0KaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmZpZWxkYXNzaXN0LklD b250ZW50UHJv
cG9zYWw7DQppbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZmllbGRhc3Npc3Qu SUNvbnRlbnRQ
cm9wb3NhbExpc3RlbmVyOw0KaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmZp ZWxkYXNzaXN0
LklDb250ZW50UHJvcG9zYWxMaXN0ZW5lcjI7DQppbXBvcnQgb3JnLmVjbGlw c2UuamZhY2Uu
ZmllbGRhc3Npc3QuSUNvbnRlbnRQcm9wb3NhbFByb3ZpZGVyOw0KaW1wb3J0 IG9yZy5lY2xp
cHNlLmpmYWNlLmZpZWxkYXNzaXN0LlRleHRDb250ZW50QWRhcHRlcjsNCmlt cG9ydCBvcmcu
ZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkFycmF5Q29udGVudFByb3ZpZGVyOw0K aW1wb3J0IG9y
Zy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2VsbEVkaXRvcjsNCmltcG9ydCBv cmcuZWNsaXBz
ZS5qZmFjZS52aWV3ZXJzLkNvbHVtbkxhYmVsUHJvdmlkZXI7DQppbXBvcnQg b3JnLmVjbGlw
c2UuamZhY2Uudmlld2Vycy5FZGl0aW5nU3VwcG9ydDsNCmltcG9ydCBvcmcu ZWNsaXBzZS5q
ZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOw0KaW1wb3J0IG9yZy5lY2xpcHNl LmpmYWNlLnZp
ZXdlcnMuVGFibGVWaWV3ZXJDb2x1bW47DQppbXBvcnQgb3JnLmVjbGlwc2Uu amZhY2Uudmll
d2Vycy5UZXh0Q2VsbEVkaXRvcjsNCmltcG9ydCBvcmcuZWNsaXBzZS5zd3Qu U1dUOw0KaW1w
b3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsNCmltcG9ydCBv cmcuZWNsaXBz
ZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7DQppbXBvcnQgb3JnLmVjbGlwc2Uu c3d0LndpZGdl
dHMuRGlzcGxheTsNCmltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5T aGVsbDsNCmlt
cG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsNCg0KcHVibGlj IGNsYXNzIFRl
c3RTbmlwcGV0IHsNCg0KCXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFj dE1vZGVsT2Jq
ZWN0IHsNCgkJcHJpdmF0ZSBQcm9wZXJ0eUNoYW5nZVN1cHBvcnQgcHJvcGVy dHlDaGFuZ2VT
dXBwb3J0ID0gbmV3IFByb3BlcnR5Q2hhbmdlU3VwcG9ydCgNCgkJCQl0aGlz KTsNCg0KCQlw
dWJsaWMgdm9pZCBhZGRQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKFByb3BlcnR5 Q2hhbmdlTGlz
dGVuZXIgbGlzdGVuZXIpIHsNCgkJCXByb3BlcnR5Q2hhbmdlU3VwcG9ydC5h ZGRQcm9wZXJ0
eUNoYW5nZUxpc3RlbmVyKGxpc3RlbmVyKTsNCgkJfQ0KDQoJCXB1YmxpYyB2 b2lkIGFkZFBy
b3BlcnR5Q2hhbmdlbF9pc3RlbmVyKFN0cmluZyBwcm9wZXJ0eU5hbWUsDQoJ CQkJUHJvcGVy
dHlDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lcikgew0KCQkJcHJvcGVydHlDaGFu Z2VTdXBwb3J0
LmFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIocHJvcGVydHlOYW1lLA0KCQkJ CQlsaXN0ZW5l
cik7DQoJCX0NCg0KCQlwdWJsaWMgdm9pZCByZW1vdmVQcm9wZXJ0eUNoYW5n ZUxpc3RlbmVy
KFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIpIHsNCgkJCXByb3Bl cnR5Q2hhbmdl
U3VwcG9ydC5yZW1vdmVQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKGxpc3RlbmVy KTsNCgkJfQ0K
DQoJCXB1YmxpYyB2b2lkIHJlbW92ZVByb3BlcnR5Q2hhbmdlTGlzdGVuZXIo U3RyaW5nIHBy
b3BlcnR5TmFtZSwNCgkJCQlQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyIGxpc3Rl bmVyKSB7DQoJ
CQlwcm9wZXJ0eUNoYW5nZVN1cHBvcnQucmVtb3ZlUHJvcGVydHlDaGFuZ2VM aXN0ZW5lcihw
cm9wZXJ0eU5hbWUsDQoJCQkJCWxpc3RlbmVyKTsNCgkJfQ0KDQoJCXByb3Rl Y3RlZCB2b2lk
IGZpcmVQcm9wZXJ0eUNoYW5nZShTdHJpbmcgcHJvcGVydHlOYW1lLCBPYmpl Y3Qgb2xkVmFs
dWUsDQoJCQkJT2JqZWN0IG5ld1ZhbHVlKSB7DQoJCQlwcm9wZXJ0eUNoYW5n ZVN1cHBvcnQu
ZmlyZVByb3BlcnR5Q2hhbmdlKHByb3BlcnR5TmFtZSwgb2xkVmFsdWUsDQoJ CQkJCW5ld1Zh
bHVlKTsNCgkJfQ0KCX0NCg0KCXB1YmxpYyBjbGFzcyBQZXJzb24gZXh0ZW5k cyBBYnN0cmFj
dE1vZGVsT2JqZWN0IHsNCgkJU3RyaW5nIG5hbWU7DQoJCVN0cmluZyBmaXJz dE5hbWU7DQoN
CgkJcHVibGljIFBlcnNvbihTdHJpbmcgZmlyc3ROYW1lLCBTdHJpbmcgbmFt ZSkgew0KCQkJ
dGhpcy5uYW1lID0gbmFtZTsNCgkJCXRoaXMuZmlyc3ROYW1lID0gZmlyc3RO YW1lOw0KCQl9
DQoNCgkJcHVibGljIFN0cmluZyBnZXROYW1lKCkgew0KCQkJcmV0dXJuIG5h bWU7DQoJCX0N
Cg0KCQlwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7DQoJCQlm aXJlUHJvcGVy
dHlDaGFuZ2UoIm5hbWUiLCB0aGlzLm5hbWUsIHRoaXMubmFtZSA9IG5hbWUp Ow0KCQl9DQoN
CgkJcHVibGljIFN0cmluZyBnZXRGaXJzdE5hbWUoKSB7DQoJCQlyZXR1cm4g Zmlyc3ROYW1l
Ow0KCQl9DQoNCgkJcHVibGljIHZvaWQgc2V0Rmlyc3ROYW1lKFN0cmluZyBm aXJzdE5hbWUp
IHsNCgkJCWZpcmVQcm9wZXJ0eUNoYW5nZSgiZmlyc3ROYW1lIiwgdGhpcy5m aXJzdE5hbWUs
DQoJCQkJCXRoaXMuZmlyc3ROYW1lID0gZmlyc3ROYW1lKTsNCgkJfQ0KCX0N Cg0KCXB1Ymxp
YyBjbGFzcyBDb21taXRlckxpc3Qgew0KCQlwcml2YXRlIExpc3Q8UGVyc29u PiBwZW9wbGUg
PSBuZXcgTGlua2VkTGlzdDxQZXJzb24+KCk7DQoJCXsNCgkJCXBlb3BsZS5h ZGQobmV3IFBl
cnNvbigiRGF2ZSIsICJPcm1lIikpOw0KCQkJcGVvcGxlLmFkZChuZXcgUGVy c29uKCJEYXZp
ZCIsICJPcm1lIikpOw0KCQkJcGVvcGxlLmFkZChuZXcgUGVyc29uKCJHaWxp IiwgIk1lbmRl
bCIpKTsNCgkJCXBlb3BsZS5hZGQobmV3IFBlcnNvbigiR2luZ2VyIiwgIk1l bmRlbCIpKTsN
CgkJCXBlb3BsZS5hZGQobmV3IFBlcnNvbigiSm9lIiwgIldpbmNoZXN0ZXIi KSk7DQoJCQlw
ZW9wbGUuYWRkKG5ldyBQZXJzb24oIkJvcmlzIiwgIkJva293c2tpIikpOw0K CQkJcGVvcGxl
LmFkZChuZXcgUGVyc29uKCJCcmFkIiwgIlJleW5vbGRzIikpOw0KCQkJcGVv cGxlLmFkZChu
ZXcgUGVyc29uKCJNYXR0aGV3IiwgIkhhbGwiKSk7DQoJCQlwZW9wbGUuYWRk KG5ldyBQZXJz
b24oIk1vYmkiLCAiSGFsbCIpKTsNCgkJfQ0KDQoJCXB1YmxpYyBMaXN0PFBl cnNvbj4gZ2V0
UGVvcGxlKCkgew0KCQkJcmV0dXJuIHBlb3BsZTsNCgkJfQ0KCX0NCg0KCXB1 YmxpYyBjbGFz
cyBNeUVkaXRpbmdTdXBwb3J0IGV4dGVuZHMgRWRpdGluZ1N1cHBvcnQgew0K CQlwcml2YXRl
IENlbGxFZGl0b3IgdGV4dEVkaXRvcjsNCgkJcHJpdmF0ZSBJbWFnZSBjb250 ZW50SGVscElt
YWdlOw0KDQoJCXB1YmxpYyBNeUVkaXRpbmdTdXBwb3J0KFRhYmxlVmlld2Vy IHZpZXdlcikg
ew0KCQkJc3VwZXIodmlld2VyKTsNCgkJCXRleHRFZGl0b3IgPSBuZXcgVGV4 dENlbGxFZGl0
b3Iodmlld2VyLmdldFRhYmxlKCkpOw0KCQkJaWYgKGNvbnRlbnRIZWxwSW1h Z2UgPT0gbnVs
bCkNCgkJCQljb250ZW50SGVscEltYWdlID0gRmllbGREZWNvcmF0aW9uUmVn aXN0cnkuZ2V0
RGVmYXVsdCgpDQoJCQkJCQkuZ2V0RmllbGREZWNvcmF0aW9uKA0KCQkJCQkJ CQlGaWVsZERl
Y29yYXRpb25SZWdpc3RyeS5ERUNfQ09OVEVOVF9QUk9QT1NBTCkNCgkJCQkJ CS5nZXRJbWFn
ZSgpOw0KCQkJUGVyc29uUHJvcG9zYWxQcm92aWRlciBwcm9wb3NhbFByb3Zp ZGVyID0gbmV3
IFBlcnNvblByb3Bvc2FsUHJvdmlkZXIoDQoJCQkJCWNvbW1pdGVyTGlzdC5n ZXRQZW9wbGUo
KSk7DQoJCQlwcm9wb3NhbFByb3ZpZGVyLnNldEZpbHRlcmluZyh0cnVlKTsN CgkJCUNvbnRl
bnRQcm9wb3NhbEFkYXB0ZXIgYWRhcHRlciA9IG5ldyBDb250ZW50UHJvcG9z YWxBZGFwdGVy
KA0KCQkJCQl0ZXh0RWRpdG9yLmdldENvbnRyb2woKSwgbmV3IFRleHRDb250 ZW50QWRhcHRl
cigpLA0KCQkJCQlwcm9wb3NhbFByb3ZpZGVyLCBLZXlTdHJva2UuZ2V0SW5z dGFuY2UoU1dU
LkNUUkwsIDMyKSwgbnVsbCk7DQoJCQlhZGFwdGVyLnNldFByb3BhZ2F0ZUtl eXModHJ1ZSk7
DQoJCQlhZGFwdGVyDQoJCQkJCS5zZXRQcm9wb3NhbEFjY2VwdGFuY2VTdHls ZShDb250ZW50
UHJvcG9zYWxBZGFwdGVyLlBST1BPU0FMX1JFUExBQ0UpOw0KCQkJQ29udHJv bERlY29yYXRp
b24gZGVjID0gbmV3IENvbnRyb2xEZWNvcmF0aW9uKHRleHRFZGl0b3INCgkJ CQkJLmdldENv
bnRyb2woKSwgU1dULkJPVFRPTSB8IFNXVC5SSUdIVCk7DQoJCQlkZWMuc2V0 SW1hZ2UoY29u
dGVudEhlbHBJbWFnZSk7DQoJCQlkZWMuc2V0RGVzY3JpcHRpb25UZXh0KCJV c2UgVkN0cmwr
U3BhY2VWIHRvIG9wZW4gTGlzdCIpOw0KCQl9DQoNCgkJcHJvdGVjdGVkIGJv b2xlYW4gY2Fu
RWRpdChPYmplY3QgZWxlbWVudCkgew0KCQkJaWYgKGVsZW1lbnQgIT0gbnVs bCkgew0KCQkJ
CXJldHVybiB0cnVlOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoN CgkJcHJvdGVj
dGVkIENlbGxFZGl0b3IgZ2V0Q2VsbEVkaXRvcihPYmplY3QgZWxlbWVudCkg ew0KCQkJcmV0
dXJuIHRleHRFZGl0b3I7DQoJCX0NCg0KCQlwcm90ZWN0ZWQgT2JqZWN0IGdl dFZhbHVlKE9i
amVjdCBlbGVtZW50KSB7DQoJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFBl cnNvbikgew0K
CQkJCXJldHVybiAoKFBlcnNvbikgZWxlbWVudCkuZ2V0Rmlyc3ROYW1lKCk7 DQoJCQl9DQoJ
CQlyZXR1cm4gZWxlbWVudC50b1N0cmluZygpOw0KCQl9DQoNCgkJcHJvdGVj dGVkIHZvaWQg
c2V0VmFsdWUoT2JqZWN0IGVsZW1lbnQsIE9iamVjdCB2YWx1ZSkgew0KCQkJ UGVyc29uIF9u
ZXdQZXJzb24gPSBudWxsOw0KCQkJaWYgKHZhbHVlICE9IG51bGwpIHsNCgkJ CQlmb3IgKFBl
cnNvbiBwIDogY29tbWl0ZXJMaXN0LmdldFBlb3BsZSgpKSB7DQoJCQkJCWlm IChwLmdldEZp
cnN0TmFtZSgpLmVxdWFscyh2YWx1ZSkpIHsNCgkJCQkJCV9uZXdQZXJzb24g PSBwOw0KCQkJ
CQkJYnJlYWs7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQlpZiAoX25ld1Bl cnNvbiAhPSBu
dWxsKSB7DQoJCQkJaW50IG9sZEVsZW1lbnRsbmRleCA9IG1vZGVsLmluZGV4 T2YoZWxlbWVu
dCk7DQoJCQkJbW9kZWwucmVtb3ZlKG9sZEVsZW1lbnRsbmRleCk7DQoJCQkJ bW9kZWwuYWRk
KG9sZEVsZW1lbnRsbmRleCwgX25ld1BlcnNvbik7DQoJCQkJTWVzc2FnZURp YWxvZy5vcGVu
SW5mb3JtYXRpb24oc2hlbGwsICJzdWNjZXNzZnVsIiwgIkVsZW1lbnQgaXN0 IHNldCB0bzog
IiArIF9uZXdQZXJzb24uZ2V0Rmlyc3ROYW1lKCkgKyAiICIgKyBfbmV3UGVy c29uLmdldE5h
bWUoKSk7DQoJCQkJZ2V0Vmlld2VyKCkucmVmcmVzaCh0cnVlKTsNCgkJCX0g ZWxzZSB7DQoJ
CQkJTWVzc2FnZURpYWxvZy5vcGVuRXJyb3Ioc2hlbGwsICJFcnJvciIsICJU aGUgZ2l2ZW4g
dmFsdWUgYXJlOiINCgkJCQkJCSsgdmFsdWUpOw0KCQkJfQ0KCQl9DQoJfQ0K DQoJcHVibGlj
IGNsYXNzIEZpcnN0TmFtZUxhYmVsUHJvdmlkZXIgZXh0ZW5kcyBDb2x1bW5M YWJlbFByb3Zp
ZGVyIHsNCgkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50 KSB7DQoJCQlp
ZiAoZWxlbWVudCBpbnN0YW5jZW9mIFBlcnNvbikgew0KCQkJCXJldHVybiAo KFBlcnNvbikg
ZWxlbWVudCkuZ2V0Rmlyc3ROYW1lKCk7DQoJCQl9DQoJCQlyZXR1cm4gc3Vw ZXIuZ2V0VGV4
dChlbGVtZW50KTsNCgkJfQ0KCX0NCgkNCglwdWJsaWMgY2xhc3MgU3VyZU5h bWVMYWJlbFBy
b3ZpZGVyIGV4dGVuZHMgQ29sdW1uTGFiZWxQcm92aWRlciB7DQoJCXB1Ymxp YyBTdHJpbmcg
Z2V0VGV4dChPYmplY3QgZWxlbWVudCkgew0KCQkJaWYgKGVsZW1lbnQgaW5z dGFuY2VvZiBQ
ZXJzb24pIHsNCgkJCQlyZXR1cm4gKChQZXJzb24pIGVsZW1lbnQpLmdldE5h bWUoKTsNCgkJ
CX0NCgkJCXJldHVybiBzdXBlci5nZXRUZXh0KGVsZW1lbnQpOw0KCQl9DQoJ fQ0KDQoJcHVi
bGljIGNsYXNzIFBlcnNvblByb3Bvc2FsUHJvdmlkZXIgaW1wbGVtZW50cyBJ Q29udGVudFBy
b3Bvc2FsUHJvdmlkZXIgew0KCQlwcml2YXRlIElDb250ZW50UHJvcG9zYWxb XSBjb250ZW50
UHJvcG9zYWxzOw0KCQlwcml2YXRlIGJvb2xlYW4gZmlsdGVyUHJvcG9zYWxz ID0gZmFsc2U7
DQoJCXByaXZhdGUgTGlzdDxQZXJzb24+IHByb3Bvc2FsczsNCg0KCQlwdWJs aWMgUGVyc29u
UHJvcG9zYWxQcm92aWRlcihMaXN0PFBlcnNvbj4gcHJvcG9zYWxzKSB7DQoJ CQlzdXBlcigp
Ow0KCQkJdGhpcy5wcm9wb3NhbHMgPSBwcm9wb3NhbHM7DQoJCX0NCg0KCQlw dWJsaWMgSUNv
bnRlbnRQcm9wb3NhbFtdIGdldFByb3Bvc2FscyhTdHJpbmcgY29udGVudHMs IGludCBwb3Np
dGlvbikgew0KCQkJaWYgKGZpbHRlclByb3Bvc2Fscykgew0KCQkJCUFycmF5 TGlzdCBsaXN0
ID0gbmV3IEFycmF5TGlzdCgpOw0KCQkJCWZvciAoUGVyc29uIHAgOiBwcm9w b3NhbHMpIHsN
CgkJCQkJaWYgKHAuZ2V0Rmlyc3ROYW1lKCkubGVuZ3RoKCkgPj0gY29udGVu dHMubGVuZ3Ro
KCkNCgkJCQkJCQkmJiBwLmdldEZpcnN0TmFtZSgpLnN1YnN0cmluZygwLCBj b250ZW50cy5s
ZW5ndGgoKSkNCgkJCQkJCQkJCS5lcXVhbHNJZ25vcmVDYXNlKGNvbnRlbnRz KSkgew0KCQkJ
CQkJbGlzdC5hZGQobWFrZUNvbnRlbnRQcm9wb3NhbChwKSk7DQoJCQkJCX0N CgkJCQl9DQoJ
CQkJcmV0dXJuIChJQ29udGVudFByb3Bvc2FsW10pIGxpc3QNCgkJCQkJCS50 b0FycmF5KG5l
dyBJQ29udGVudFByb3Bvc2FsW2xpc3Quc2l6ZSgpXSk7DQoJCQl9DQoJCQlp ZiAoY29udGVu
dFByb3Bvc2FscyA9PSBudWxsKSB7DQoJCQkJY29udGVudFByb3Bvc2FscyA9 IG5ldyBJQ29u
dGVudFByb3Bvc2FsW3Byb3Bvc2Fscy5zaXplKCldOw0KCQkJCWZvciAoaW50 IGkgPSAwOyBp
IDwgcHJvcG9zYWxzLnNpemUoKTsgaSsrKSB7DQoJCQkJCWNvbnRlbnRQcm9w b3NhbHNbaV0g
PSBtYWtlQ29udGVudFByb3Bvc2FsKHByb3Bvc2Fscy5nZXQoaSkpOw0KCQkJ CX0NCgkJCX0N
CgkJCXJldHVybiBjb250ZW50UHJvcG9zYWxzOw0KCQl9DQoNCgkJcHVibGlj IHZvaWQgc2V0
UHJvcG9zYWxzKExpc3Q8UGVyc29uPiBpdGVtcykgew0KCQkJdGhpcy5wcm9w b3NhbHMgPSBp
dGVtczsNCgkJCWNvbnRlbnRQcm9wb3NhbHMgPSBudWxsOw0KCQl9DQoNCgkJ cHVibGljIHZv
aWQgc2V0RmlsdGVyaW5nKGJvb2xlYW4gZmlsdGVyUHJvcG9zYWxzKSB7DQoJ CQl0aGlzLmZp
bHRlclByb3Bvc2FscyA9IGZpbHRlclByb3Bvc2FsczsNCgkJCWNvbnRlbnRQ cm9wb3NhbHMg
PSBudWxsOw0KCQl9DQoNCgkJcHJpdmF0ZSBJQ29udGVudFByb3Bvc2FsIG1h a2VDb250ZW50
UHJvcG9zYWwoZmluYWwgUGVyc29uIHByb3Bvc2FsKSB7DQoJCQlyZXR1cm4g bmV3IElDb250
ZW50UHJvcG9zYWwoKSB7DQoJCQkJcHVibGljIFN0cmluZyBnZXRDb250ZW50 KCkgew0KCQkJ
CQlyZXR1cm4gcHJvcG9zYWwuZ2V0Rmlyc3ROYW1lKCk7DQoJCQkJfQ0KDQoJ CQkJcHVibGlj
IFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsNCgkJCQkJcmV0dXJuIG51bGw7 DQoJCQkJfQ0K
DQoJCQkJcHVibGljIFN0cmluZyBnZXRMYWJlbCgpIHsNCgkJCQkJcmV0dXJu IHByb3Bvc2Fs
LmdldEZpcnN0TmFtZSgpICsgIiAtICIgKyBwcm9wb3NhbC5nZXROYW1lKCk7 DQoJCQkJfQ0K
DQoJCQkJcHVibGljIGludCBnZXRDdXJzb3JQb3NpdGlvbigpIHsNCgkJCQkJ cmV0dXJuIHBy
b3Bvc2FsLmZpcnN0TmFtZS5sZW5ndGgoKTsNCgkJCQl9DQoJCQl9Ow0KCQl9 DQoJfQ0KDQoJ
cHJpdmF0ZSBzdGF0aWMgU2hlbGwgc2hlbGw7DQoJcHJpdmF0ZSBDb21taXRl ckxpc3QgY29t
bWl0ZXJMaXN0Ow0KCXByaXZhdGUgQXJyYXlMaXN0PFBlcnNvbj4gbW9kZWw7 DQoNCglwdWJs
aWMgVGVzdFNuaXBwZXQoU2hlbGwgc2hlbGwpIHsNCgkJY29tbWl0ZXJMaXN0 ID0gbmV3IENv
bW1pdGVyTGlzdCgpOw0KCQltb2RlbCA9IGNyZWF0ZU1vZGVsKCk7DQoJCWZp bmFsIFRhYmxl
IHRhYmxlID0gbmV3IFRhYmxlKHNoZWxsLCBTV1QuQk9SREVSIHwgU1dULkZV TExfU0VMRUNU
SU9OKTsNCgkJZmluYWwgVGFibGVWaWV3ZXIgdiA9IG5ldyBUYWJsZVZpZXdl cih0YWJsZSk7
DQoJCXYuZ2V0VGFibGUoKS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7DQoJCXYu c2V0Q29udGVu
dFByb3ZpZGVyKG5ldyBBcnJheUNvbnRlbnRQcm92aWRlcigpKTsJDQoJCQ0K CQlUYWJsZVZp
ZXdlckNvbHVtbiBjb2x1bW4gPSBuZXcgVGFibGVWaWV3ZXJDb2x1bW4odiwg U1dULk5PTkUp
Ow0KCQljb2x1bW4uZ2V0Q29sdW1uKCkuc2V0V2lkdGgoMjAwKTsNCgkJY29s dW1uLnNldExh
YmVsUHJvdmlkZXIobmV3IEZpcnN0TmFtZUxhYmVsUHJvdmlkZXIoKSk7DQoJ CWNvbHVtbi5z
ZXRFZGl0aW5nU3VwcG9ydChuZXcgTXlFZGl0aW5nU3VwcG9ydCh2KSk7DQoJ DQoJCWNvbHVt
bi5zZXRMYWJlbFByb3ZpZGVyKG5ldyBGaXJzdE5hbWVMYWJlbFByb3ZpZGVy KCkpOw0KCQlU
YWJsZVZpZXdlckNvbHVtbiBjb2x1bW5OYW1lID0gbmV3IFRhYmxlVmlld2Vy Q29sdW1uKHYs
IFNXVC5OT05FKTsNCgkJY29sdW1uTmFtZS5nZXRDb2x1bW4oKS5zZXRXaWR0 aCgyMDApOw0K
CQljb2x1bW5OYW1lLnNldExhYmVsUHJvdmlkZXIobmV3IFN1cmVOYW1lTGFi ZWxQcm92aWRl
cigpKTsNCgkJDQoJCXYuc2V0SW5wdXQobW9kZWwpOw0KCX0NCg0KCXByaXZh dGUgQXJyYXlM
aXN0PFBlcnNvbj4gY3JlYXRlTW9kZWwoKSB7DQoJCUFycmF5TGlzdDxQZXJz b24+IHJlc3Vs
dCA9IG5ldyBBcnJheUxpc3Q8UGVyc29uPigpOw0KCQlyZXN1bHQuYWRkKGNv bW1pdGVyTGlz
dC5nZXRQZW9wbGUoKS5nZXQoMCkpOw0KCQlyZXR1cm4gcmVzdWx0Ow0KCX0N Cg0KCXB1Ymxp
YyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsNCgkJRGlzcGxh eSBkaXNwbGF5
ID0gbmV3IERpc3BsYXkoKTsNCgkJc2hlbGwgPSBuZXcgU2hlbGwoZGlzcGxh eSk7DQoJCXNo
ZWxsLnNldExheW91dChuZXcgRmlsbExheW91dCgpKTsNCgkJbmV3IFRlc3RT bmlwcGV0KHNo
ZWxsKTsNCgkJc2hlbGwub3BlbigpOw0KDQoJCXdoaWxlICghc2hlbGwuaXNE aXNwb3NlZCgp
KSB7DQoJCQlpZiAoIWRpc3BsYXkucmVhZEFuZERpc3BhdGNoKCkpDQoJCQkJ ZGlzcGxheS5z
bGVlcCgpOw0KCQl9DQoNCgkJZGlzcGxheS5kaXNwb3NlKCk7DQoNCgl9DQoN Cn0=
--------------020503070603090709070006--
Re: [content assist] Problem with ContentAssist at TextCellEditor [message #9170 is a reply to message #9146] Mon, 25 May 2009 14:49 Go to previous messageGo to next message
Eclipse UserFriend
Hi,

The problem is that the TextCellEditor has a focus listener attached
which means that the editor is closed.

Take a look at [1] and test if this works for you.

Tom

[1] http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jface.s nippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippet s/viewers/Snippet060TextCellEditorWithContentProposal.java?v iew=markup

Heiko Ahlig schrieb:
> Hi,
> I try to add a content assist system on my TextCellEditors in a Table
> with filtering and so on.
> It works fine if I use the cursor and enter keys but if I select an
> entry from the proposallist with the mouse it dosen't work.
>
> Thanks in advance for tips and best regards,
>
> Heiko
>
> PS: for this snippet I use Eclipse 3.5RC2 and Java 1.6 on Vista.
>
> Here are my code snippet to demonstrate my problem:
>
> package de.nacorswelt.contentassist;
>
> import java.beans.PropertyChangeListener;
> import java.beans.PropertyChangeSupport;
> import java.util.ArrayList;
> import java.util.LinkedList;
> import java.util.List;
>
> import org.eclipse.jface.bindings.keys.KeyStroke;
> import org.eclipse.jface.dialogs.MessageDialog;
> import org.eclipse.jface.fieldassist.ContentProposalAdapter;
> import org.eclipse.jface.fieldassist.ControlDecoration;
> import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
> import org.eclipse.jface.fieldassist.IContentProposal;
> import org.eclipse.jface.fieldassist.IContentProposalListener;
> import org.eclipse.jface.fieldassist.IContentProposalListener2;
> import org.eclipse.jface.fieldassist.IContentProposalProvider;
> import org.eclipse.jface.fieldassist.TextContentAdapter;
> import org.eclipse.jface.viewers.ArrayContentProvider;
> import org.eclipse.jface.viewers.CellEditor;
> import org.eclipse.jface.viewers.ColumnLabelProvider;
> import org.eclipse.jface.viewers.EditingSupport;
> import org.eclipse.jface.viewers.TableViewer;
> import org.eclipse.jface.viewers.TableViewerColumn;
> import org.eclipse.jface.viewers.TextCellEditor;
> import org.eclipse.swt.SWT;
> import org.eclipse.swt.graphics.Image;
> import org.eclipse.swt.layout.FillLayout;
> import org.eclipse.swt.widgets.Display;
> import org.eclipse.swt.widgets.Shell;
> import org.eclipse.swt.widgets.Table;
>
> public class TestSnippet {
>
> public abstract class AbstractModelObject {
> private PropertyChangeSupport propertyChangeSupport = new
> PropertyChangeSupport(
> this);
>
> public void addPropertyChangeListener(PropertyChangeListener
> listener) {
> propertyChangeSupport.addPropertyChangeListener(listener);
> }
>
> public void addPropertyChangel_istener(String propertyName,
> PropertyChangeListener listener) {
> propertyChangeSupport.addPropertyChangeListener(propertyName ,
> listener);
> }
>
> public void removePropertyChangeListener(PropertyChangeListener
> listener) {
> propertyChangeSupport.removePropertyChangeListener(listener) ;
> }
>
> public void removePropertyChangeListener(String propertyName,
> PropertyChangeListener listener) {
>
> propertyChangeSupport.removePropertyChangeListener(propertyN ame,
> listener);
> }
>
> protected void firePropertyChange(String propertyName, Object
> oldValue,
> Object newValue) {
> propertyChangeSupport.firePropertyChange(propertyName,
> oldValue,
> newValue);
> }
> }
>
> public class Person extends AbstractModelObject {
> String name;
> String firstName;
>
> public Person(String firstName, String name) {
> this.name = name;
> this.firstName = firstName;
> }
>
> public String getName() {
> return name;
> }
>
> public void setName(String name) {
> firePropertyChange("name", this.name, this.name = name);
> }
>
> public String getFirstName() {
> return firstName;
> }
>
> public void setFirstName(String firstName) {
> firePropertyChange("firstName", this.firstName,
> this.firstName = firstName);
> }
> }
>
> public class CommiterList {
> private List<Person> people = new LinkedList<Person>();
> {
> people.add(new Person("Dave", "Orme"));
> people.add(new Person("David", "Orme"));
> people.add(new Person("Gili", "Mendel"));
> people.add(new Person("Ginger", "Mendel"));
> people.add(new Person("Joe", "Winchester"));
> people.add(new Person("Boris", "Bokowski"));
> people.add(new Person("Brad", "Reynolds"));
> people.add(new Person("Matthew", "Hall"));
> people.add(new Person("Mobi", "Hall"));
> }
>
> public List<Person> getPeople() {
> return people;
> }
> }
>
> public class MyEditingSupport extends EditingSupport {
> private CellEditor textEditor;
> private Image contentHelpImage;
>
> public MyEditingSupport(TableViewer viewer) {
> super(viewer);
> textEditor = new TextCellEditor(viewer.getTable());
> if (contentHelpImage == null)
> contentHelpImage = FieldDecorationRegistry.getDefault()
> .getFieldDecoration(
>
> FieldDecorationRegistry.DEC_CONTENT_PROPOSAL)
> .getImage();
> PersonProposalProvider proposalProvider = new
> PersonProposalProvider(
> commiterList.getPeople());
> proposalProvider.setFiltering(true);
> ContentProposalAdapter adapter = new ContentProposalAdapter(
> textEditor.getControl(), new TextContentAdapter(),
> proposalProvider, KeyStroke.getInstance(SWT.CTRL,
> 32), null);
> adapter.setPropagateKeys(true);
> adapter
>
> .setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_ REPLACE);
> ControlDecoration dec = new ControlDecoration(textEditor
> .getControl(), SWT.BOTTOM | SWT.RIGHT);
> dec.setImage(contentHelpImage);
> dec.setDescriptionText("Use VCtrl+SpaceV to open List");
> }
>
> protected boolean canEdit(Object element) {
> if (element != null) {
> return true;
> }
> return false;
> }
>
> protected CellEditor getCellEditor(Object element) {
> return textEditor;
> }
>
> protected Object getValue(Object element) {
> if (element instanceof Person) {
> return ((Person) element).getFirstName();
> }
> return element.toString();
> }
>
> protected void setValue(Object element, Object value) {
> Person _newPerson = null;
> if (value != null) {
> for (Person p : commiterList.getPeople()) {
> if (p.getFirstName().equals(value)) {
> _newPerson = p;
> break;
> }
> }
> }
> if (_newPerson != null) {
> int oldElementlndex = model.indexOf(element);
> model.remove(oldElementlndex);
> model.add(oldElementlndex, _newPerson);
> MessageDialog.openInformation(shell, "successful",
> "Element ist set to: " + _newPerson.getFirstName() + " " +
> _newPerson.getName());
> getViewer().refresh(true);
> } else {
> MessageDialog.openError(shell, "Error", "The given value
> are:"
> + value);
> }
> }
> }
>
> public class FirstNameLabelProvider extends ColumnLabelProvider {
> public String getText(Object element) {
> if (element instanceof Person) {
> return ((Person) element).getFirstName();
> }
> return super.getText(element);
> }
> }
>
> public class SureNameLabelProvider extends ColumnLabelProvider {
> public String getText(Object element) {
> if (element instanceof Person) {
> return ((Person) element).getName();
> }
> return super.getText(element);
> }
> }
>
> public class PersonProposalProvider implements
> IContentProposalProvider {
> private IContentProposal[] contentProposals;
> private boolean filterProposals = false;
> private List<Person> proposals;
>
> public PersonProposalProvider(List<Person> proposals) {
> super();
> this.proposals = proposals;
> }
>
> public IContentProposal[] getProposals(String contents, int
> position) {
> if (filterProposals) {
> ArrayList list = new ArrayList();
> for (Person p : proposals) {
> if (p.getFirstName().length() >= contents.length()
> && p.getFirstName().substring(0,
> contents.length())
> .equalsIgnoreCase(contents)) {
> list.add(makeContentProposal(p));
> }
> }
> return (IContentProposal[]) list
> .toArray(new IContentProposal[list.size()]);
> }
> if (contentProposals == null) {
> contentProposals = new IContentProposal[proposals.size()];
> for (int i = 0; i < proposals.size(); i++) {
> contentProposals[i] =
> makeContentProposal(proposals.get(i));
> }
> }
> return contentProposals;
> }
>
> public void setProposals(List<Person> items) {
> this.proposals = items;
> contentProposals = null;
> }
>
> public void setFiltering(boolean filterProposals) {
> this.filterProposals = filterProposals;
> contentProposals = null;
> }
>
> private IContentProposal makeContentProposal(final Person
> proposal) {
> return new IContentProposal() {
> public String getContent() {
> return proposal.getFirstName();
> }
>
> public String getDescription() {
> return null;
> }
>
> public String getLabel() {
> return proposal.getFirstName() + " - " +
> proposal.getName();
> }
>
> public int getCursorPosition() {
> return proposal.firstName.length();
> }
> };
> }
> }
>
> private static Shell shell;
> private CommiterList commiterList;
> private ArrayList<Person> model;
>
> public TestSnippet(Shell shell) {
> commiterList = new CommiterList();
> model = createModel();
> final Table table = new Table(shell, SWT.BORDER |
> SWT.FULL_SELECTION);
> final TableViewer v = new TableViewer(table);
> v.getTable().setLinesVisible(true);
> v.setContentProvider(new ArrayContentProvider());
>
> TableViewerColumn column = new TableViewerColumn(v, SWT.NONE);
> column.getColumn().setWidth(200);
> column.setLabelProvider(new FirstNameLabelProvider());
> column.setEditingSupport(new MyEditingSupport(v));
>
> column.setLabelProvider(new FirstNameLabelProvider());
> TableViewerColumn columnName = new TableViewerColumn(v, SWT.NONE);
> columnName.getColumn().setWidth(200);
> columnName.setLabelProvider(new SureNameLabelProvider());
>
> v.setInput(model);
> }
>
> private ArrayList<Person> createModel() {
> ArrayList<Person> result = new ArrayList<Person>();
> result.add(commiterList.getPeople().get(0));
> return result;
> }
>
> public static void main(String[] args) {
> Display display = new Display();
> shell = new Shell(display);
> shell.setLayout(new FillLayout());
> new TestSnippet(shell);
> shell.open();
>
> while (!shell.isDisposed()) {
> if (!display.readAndDispatch())
> display.sleep();
> }
>
> display.dispose();
>
> }
>
> }
>
>
>
Re: [content assist] Problem with ContentAssist at TextCellEditor [message #10293 is a reply to message #9170] Tue, 26 May 2009 13:06 Go to previous message
Eclipse UserFriend
Hi tom,
thanks for the link, it works fine now.

Heiko


Am 25.05.2009 20:49, schrieb Tom Schindl:
> Hi,
>
> The problem is that the TextCellEditor has a focus listener attached
> which means that the editor is closed.
>
> Take a look at [1] and test if this works for you.
>
> Tom
>
> [1] http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jface.s nippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippet s/viewers/Snippet060TextCellEditorWithContentProposal.java?v iew=markup
>
> Heiko Ahlig schrieb:
>> Hi,
>> I try to add a content assist system on my TextCellEditors in a Table
>> with filtering and so on.
>> It works fine if I use the cursor and enter keys but if I select an
>> entry from the proposallist with the mouse it dosen't work.
>>
>> Thanks in advance for tips and best regards,
>>
>> Heiko
>>
>> PS: for this snippet I use Eclipse 3.5RC2 and Java 1.6 on Vista.
>>
>> Here are my code snippet to demonstrate my problem:
>>
>> package de.nacorswelt.contentassist;
>>
>> import java.beans.PropertyChangeListener;
>> import java.beans.PropertyChangeSupport;
>> import java.util.A...
Previous Topic:Strange toolbar
Next Topic:Treeviewer with Databinding
Goto Forum:
  


Current Time: Thu May 08 19:59:12 EDT 2025

Powered by FUDForum. Page generated in 0.03337 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top