use of org.eclipse.jface.fieldassist.ComboContentAdapter in project sling by apache.
the class NewNodeDialog method createDialogArea.
@Override
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
Control[] children = composite.getChildren();
Control errorMessageText = children[children.length - 1];
GridData errorMessageGridData = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL);
errorMessageGridData.heightHint = convertHeightInCharsToPixels(2);
errorMessageText.setLayoutData(errorMessageGridData);
// now add the node type dropbox-combo
Label label = new Label(composite, SWT.WRAP);
label.moveAbove(errorMessageText);
label.setText("Define node type");
GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER);
data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
label.setLayoutData(data);
label.setFont(parent.getFont());
combo = new Combo(composite, SWT.DROP_DOWN);
combo.moveAbove(errorMessageText);
if (allowedChildren != null) {
combo.setItems(allowedChildren.toArray(new String[0]));
}
combo.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
combo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
comboSelection = combo.getText();
validateInput();
}
});
combo.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
comboSelection = combo.getText();
validateInput();
}
});
SimpleContentProposalProvider proposalProvider = new SimpleContentProposalProvider(combo.getItems());
proposalProvider.setFiltering(true);
final ComboContentAdapter controlContentAdapter = new ComboContentAdapter() {
@Override
public void insertControlContents(Control control, String text, int cursorPosition) {
Point selection = combo.getSelection();
combo.setText(text);
selection.x = selection.x + cursorPosition;
selection.y = selection.x;
combo.setSelection(selection);
}
@Override
public Rectangle getInsertionBounds(Control control) {
final Rectangle insertionBounds = super.getInsertionBounds(control);
// always insert at start
insertionBounds.x = 0;
insertionBounds.y = 0;
return insertionBounds;
}
};
// this variant opens auto-complete on each character
proposalAdapter = new ContentProposalAdapter(combo, controlContentAdapter, proposalProvider, null, null);
// this variant opens auto-complete only when invoking the auto-complete hotkey
if (allowedChildren != null && allowedChildren.size() == 1) {
combo.setText(allowedChildren.iterator().next());
} else if (allowedChildren != null) {
if (allowedChildren.contains(lastChosenNodeType)) {
combo.setText(lastChosenNodeType);
}
}
return composite;
}
Aggregations