package org.ovirt.engine.ui.common.widget.action; import org.ovirt.engine.ui.common.idhandler.WithElementId; import org.ovirt.engine.ui.common.uicommon.model.DeferredModelCommandInvoker; import org.ovirt.engine.ui.common.uicommon.model.SearchableTableModelProvider; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; import com.google.gwt.event.dom.client.DoubleClickEvent; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; public abstract class AbstractActionStackPanelItem<M, T, W extends Widget> extends Composite { @UiField(provided = true) @WithElementId public AbstractActionPanel<T> actionPanel; @UiField(provided = true) @WithElementId("display") public W dataDisplayWidget; public AbstractActionStackPanelItem(M modelProvider) { this.dataDisplayWidget = createDataDisplayWidget(modelProvider); this.actionPanel = createActionPanel(modelProvider); addDoubleClickHandler(dataDisplayWidget, modelProvider); } @Override protected void initWidget(Widget widget) { super.initWidget(widget); // Add context menu handler for data display widget actionPanel.addContextMenuHandler(dataDisplayWidget); } public W getDataDisplayWidget() { return dataDisplayWidget; } protected abstract W createDataDisplayWidget(M modelProvider); protected abstract AbstractActionPanel<T> createActionPanel(M modelProvider); void addDoubleClickHandler(final W widget, final M modelProvider) { if (modelProvider instanceof SearchableTableModelProvider<?, ?>) { widget.addDomHandler(event -> { SearchableListModel model = ((SearchableTableModelProvider<?, ?>) modelProvider).getModel(); UICommand command = model.getDoubleClickCommand(); if (command != null && command.getIsExecutionAllowed()) { DeferredModelCommandInvoker invoker = new DeferredModelCommandInvoker(model); invoker.invokeCommand(command); } }, DoubleClickEvent.getType()); } } }