use of org.eclipse.sapphire.ui.listeners.ValuePropertyEditorListener in project liferay-ide by liferay.
the class ScriptPropertyEditorRenderer method createContents.
@Override
protected void createContents(Composite parent) {
PropertyEditorPart part = part();
Element element = part.getLocalModelElement();
ValueProperty property = part.property().nearest(ValueProperty.class);
CreateMainCompositeDelegate createMainCompositeDelegate = new CreateMainCompositeDelegate(part) {
@Override
public boolean canScaleVertically() {
return true;
}
};
Composite codeEditorParent = createMainComposite(parent, createMainCompositeDelegate);
// context.adapt( codeEditorParent );
int codeEditorParentColumns = 1;
SapphireToolBarActionPresentation toolBarActionsPresentation = new SapphireToolBarActionPresentation(getActionPresentationManager());
boolean actionsToolBarNeeded = toolBarActionsPresentation.hasActions();
if (actionsToolBarNeeded) {
codeEditorParentColumns++;
}
codeEditorParent.setLayout(glayout(codeEditorParentColumns, 0, 0, 0, 0));
Composite nestedComposite = new Composite(codeEditorParent, SWT.NONE);
nestedComposite.setLayoutData(gdfill());
// nestedComposite.setLayout( glspacing( glayout( 2, 0, 0 ), 2 ) );
addControl(nestedComposite);
PropertyEditorAssistDecorator decorator = createDecorator(nestedComposite);
decorator.control().setLayoutData(gdvalign(gd(), SWT.TOP));
decorator.addEditorControl(nestedComposite);
ScriptPropertyEditorInput editorInput = new ScriptPropertyEditorInput(element, property);
List<Control> relatedControls = new ArrayList<>();
try {
IEditorSite editorSite = part().adapt(IEditorSite.class);
_editorPart = createEditorPart(editorInput, editorSite);
_editorPart.createPartControl(nestedComposite);
Control editorControl = _editorPart.getAdapter(Control.class);
// need to find the first child of nestedComposite to relayout
// editor control
Composite editorControlParent = null;
Control control = editorControl;
while ((editorControlParent == null) && (control != null) && !nestedComposite.equals(control.getParent())) {
control = control.getParent();
}
nestedComposite.setLayout(glspacing(glayout(2, 0, 0), 2));
control.setLayoutData(gdfill());
decorator.addEditorControl(editorControl, true);
editorControl.setData(RELATED_CONTROLS, relatedControls);
} catch (Exception e) {
KaleoUI.logError(e);
}
if (actionsToolBarNeeded) {
ToolBar toolbar = new ToolBar(codeEditorParent, SWT.FLAT | SWT.HORIZONTAL);
toolbar.setLayoutData(gdvfill());
toolBarActionsPresentation.setToolBar(toolbar);
toolBarActionsPresentation.render();
addControl(toolbar);
decorator.addEditorControl(toolbar);
relatedControls.add(toolbar);
}
List<Class<?>> listenerClasses = part.getRenderingHint(PropertyEditorDef.HINT_LISTENERS, Collections.<Class<?>>emptyList());
List<ValuePropertyEditorListener> listeners = new ArrayList<>();
if (ListUtil.isNotEmpty(listenerClasses)) {
for (Class<?> cl : listenerClasses) {
try {
ValuePropertyEditorListener listener = (ValuePropertyEditorListener) cl.newInstance();
listener.initialize(this);
listeners.add(listener);
} catch (Exception e) {
KaleoUI.logError(e);
}
}
}
ITextEditor textEditor = null;
if (_editorPart instanceof ITextEditor) {
textEditor = (ITextEditor) _editorPart;
} else {
ITextEditor textEdit = _editorPart.getAdapter(ITextEditor.class);
textEditor = textEdit;
}
addControl((Control) textEditor.getAdapter(Control.class));
IDocumentListener documentListener = new IDocumentListener() {
public void documentAboutToBeChanged(DocumentEvent event) {
}
public void documentChanged(DocumentEvent event) {
Value<Object> elementProperty = element.property(property);
elementProperty.write(event.getDocument().get());
if (ListUtil.isNotEmpty(listeners)) {
for (ValuePropertyEditorListener listener : listeners) {
try {
listener.handleValueChanged();
} catch (Exception e) {
KaleoUI.logError(e);
}
}
}
}
};
IDocumentProvider documentProvider = textEditor.getDocumentProvider();
IDocument document = documentProvider.getDocument(_editorPart.getEditorInput());
document.addDocumentListener(documentListener);
}
Aggregations