use of com.google.gwt.editor.client.HasEditorDelegate in project ovirt-engine by oVirt.
the class UiCommonEditorVisitor method visit.
@SuppressWarnings("unchecked")
@Override
public <T> boolean visit(final EditorContext<T> ctx) {
final String absolutePath = ctx.getAbsolutePath();
LeafValueEditor<T> currentLeafEditor = ctx.asLeafValueEditor();
if (currentLeafEditor == null) {
// Ignore non-leaf Editors
return super.visit(ctx);
}
final LeafValueEditor<T> editor = getActualEditor(currentLeafEditor);
// If this Editor implements HasValueChangeHandlers, register a value change listener
if (editor instanceof HasValueChangeHandlers) {
((HasValueChangeHandlers<T>) editor).addValueChangeHandler(event -> setInModel(ctx, event.getSource(), event.getValue()));
}
final UiCommonEditor<T> functionalEditor = getFunctionalEditor(currentLeafEditor);
if (functionalEditor != null) {
// Pass in the EditorDelegate
if (editor instanceof HasEditorDelegate) {
((HasEditorDelegate<T>) editor).setDelegate(ctx.getEditorDelegate());
}
// Set tab index, unless it's being set manually (i.e. already been set)
if (functionalEditor.getTabIndex() <= 0) {
functionalEditor.setTabIndex(++tabIndexCounter);
}
// Add key press handler
functionalEditor.addKeyPressHandler(event -> {
if (KeyCodes.KEY_ENTER == event.getNativeEvent().getKeyCode()) {
setInModel(ctx, editor, editor.getValue());
}
});
}
// Handle owner entity models
if (ownerModels.containsKey(absolutePath)) {
Model ownerModel = ownerModels.get(absolutePath);
// If this editor edits a ListModel, initialize it
if (editor instanceof TakesConstrainedValueListEditor && ownerModel instanceof ListModel) {
updateListEditor((TakesConstrainedValueListEditor<T>) editor, (ListModel) ownerModel);
} else if (editor instanceof TakesConstrainedValueEditor && ownerModel instanceof ListModel) {
updateListEditor((TakesConstrainedValueEditor<T>) editor, (ListModel) ownerModel);
}
if (functionalEditor != null) {
// Register a property change listener on the owner entity model
ownerModel.getPropertyChangedEvent().addListener((ev, sender, args) -> {
Model owner = (Model) sender;
String propName = args.propertyName;
// IsValid
if ("IsValid".equals(propName)) {
// $NON-NLS-1$
onIsValidPropertyChange(functionalEditor, owner);
} else // IsChangable
if ("IsChangable".equals(propName)) {
// $NON-NLS-1$
onIsChangablePropertyChange(functionalEditor, owner);
} else // ChangeProhibitionReason
if ("ChangeProhibitionReason".equals(propName)) {
// $NON-NLS-1$
onChangeProhibitionReasonChange(functionalEditor, owner);
} else // IsAvailable
if ("IsAvailable".equals(propName)) {
// $NON-NLS-1$
onIsAvailablePropertyChange(functionalEditor, owner);
}
});
// Update editor since we might have missed property change
// events fired as part of the entity model constructor
onIsValidPropertyChange(functionalEditor, ownerModel);
onIsChangablePropertyChange(functionalEditor, ownerModel);
onChangeProhibitionReasonChange(functionalEditor, ownerModel);
onIsAvailablePropertyChange(functionalEditor, ownerModel);
}
}
// Register listeners
// $NON-NLS-1$
eventMap.registerListener(// $NON-NLS-1$
absolutePath, // $NON-NLS-1$
"EntityChanged", (ev, sender, args) -> editor.setValue((T) ((EntityModel) sender).getEntity()));
// $NON-NLS-1$
eventMap.registerListener(// $NON-NLS-1$
absolutePath, // $NON-NLS-1$
"ItemsChanged", (ev, sender, args) -> updateListEditor((TakesConstrainedValueEditor<T>) editor, (ListModel) sender));
eventMap.registerListener(absolutePath, "SelectedItemChanged", (ev, sender, args) -> {
// $NON-NLS-1$
T selectedItem = (T) ((ListModel) sender).getSelectedItem();
if (editor instanceof TakesConstrainedValueListEditor && ownerModels.get(absolutePath) instanceof ListModel) {
editor.setValue((T) Arrays.asList(selectedItem));
} else {
editor.setValue(selectedItem);
}
});
eventMap.registerListener(absolutePath, "SelectedItemsChanged", (ev, sender, args) -> {
// $NON-NLS-1$
if (editor instanceof TakesConstrainedValueListEditor && ownerModels.get(absolutePath) instanceof ListModel) {
((TakesConstrainedValueListEditor) editor).setListValue((List<T>) ((ListModel) sender).getSelectedItems());
}
});
return super.visit(ctx);
}
Aggregations