in eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/actions/NewNodeDialog.java [76:157]
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;
}