Search in sources :

Example 1 with TakesConstrainedValueEditor

use of org.ovirt.engine.ui.common.widget.editor.TakesConstrainedValueEditor 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);
}
Also used : ListModel(org.ovirt.engine.ui.uicommonweb.models.ListModel) ListModel(org.ovirt.engine.ui.uicommonweb.models.ListModel) EntityModel(org.ovirt.engine.ui.uicommonweb.models.EntityModel) Model(org.ovirt.engine.ui.uicommonweb.models.Model) TakesConstrainedValueListEditor(org.ovirt.engine.ui.common.widget.editor.TakesConstrainedValueListEditor) HasEditorDelegate(com.google.gwt.editor.client.HasEditorDelegate) HasValueChangeHandlers(com.google.gwt.event.logical.shared.HasValueChangeHandlers) TakesConstrainedValueEditor(org.ovirt.engine.ui.common.widget.editor.TakesConstrainedValueEditor)

Aggregations

HasEditorDelegate (com.google.gwt.editor.client.HasEditorDelegate)1 HasValueChangeHandlers (com.google.gwt.event.logical.shared.HasValueChangeHandlers)1 TakesConstrainedValueEditor (org.ovirt.engine.ui.common.widget.editor.TakesConstrainedValueEditor)1 TakesConstrainedValueListEditor (org.ovirt.engine.ui.common.widget.editor.TakesConstrainedValueListEditor)1 EntityModel (org.ovirt.engine.ui.uicommonweb.models.EntityModel)1 ListModel (org.ovirt.engine.ui.uicommonweb.models.ListModel)1 Model (org.ovirt.engine.ui.uicommonweb.models.Model)1