package org.ovirt.engine.ui.webadmin.widget.tags; import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; import org.ovirt.engine.ui.common.widget.action.AbstractActionStackPanelItem; import org.ovirt.engine.ui.common.widget.action.SimpleActionPanel; import org.ovirt.engine.ui.common.widget.tree.ElementIdCellTree; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.tags.TagListModel; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.gin.AssetProvider; import org.ovirt.engine.ui.webadmin.gin.ClientGinjectorProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.TagModelProvider; import org.ovirt.engine.ui.webadmin.widget.action.WebAdminButtonDefinition; import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.user.cellview.client.CellTree; import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy; import com.google.gwt.user.cellview.client.TreeNode; import com.google.gwt.user.client.ui.Widget; public class TagList extends AbstractActionStackPanelItem<TagModelProvider, TagListModel, CellTree> { interface WidgetUiBinder extends UiBinder<Widget, TagList> { WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class); } interface WidgetIdHandler extends ElementIdHandler<TagList> { WidgetIdHandler idHandler = GWT.create(WidgetIdHandler.class); } private static final TagTreeResources res = GWT.create(TagTreeResources.class); private static final ApplicationConstants constants = AssetProvider.getConstants(); public TagList(TagModelProvider modelProvider) { super(modelProvider); initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this)); WidgetIdHandler.idHandler.generateAndSetIds(this); addActionButtons(modelProvider); addModelListeners(modelProvider); } @Override protected CellTree createDataDisplayWidget(TagModelProvider modelProvider) { CellTree display = new ElementIdCellTree<>(modelProvider, null, res); display.setAnimationEnabled(true); display.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.BOUND_TO_SELECTION); return display; } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override protected SimpleActionPanel<TagListModel> createActionPanel(TagModelProvider modelProvider) { return new SimpleActionPanel(modelProvider, modelProvider.getSelectionModel(), ClientGinjectorProvider.getEventBus()); } private void addActionButtons(final TagModelProvider modelProvider) { actionPanel.addActionButton(new WebAdminButtonDefinition<TagListModel>(constants.newTag()) { @Override protected UICommand resolveCommand() { return modelProvider.getModel().getNewCommand(); } }); actionPanel.addActionButton(new WebAdminButtonDefinition<TagListModel>(constants.editTag()) { @Override protected UICommand resolveCommand() { return modelProvider.getModel().getEditCommand(); } }); actionPanel.addActionButton(new WebAdminButtonDefinition<TagListModel>(constants.removeTag()) { @Override protected UICommand resolveCommand() { return modelProvider.getModel().getRemoveCommand(); } }); } private void addModelListeners(final TagModelProvider modelProvider) { modelProvider.getModel().getItemsChangedEvent().addListener((ev, sender, args) -> expandTree(getDataDisplayWidget().getRootTreeNode())); modelProvider.getModel().getResetRequestedEvent().addListener((ev, sender, args) -> expandTree(getDataDisplayWidget().getRootTreeNode())); } private void expandTree(TreeNode node) { if (node == null) { return; } for (int i = 0; i < node.getChildCount(); i++) { expandTree(node.setChildOpen(i, true)); } } interface TagTreeResources extends CellTree.Resources { interface TableStyle extends CellTree.Style { } @Override @Source({ CellTree.Style.DEFAULT_CSS, "org/ovirt/engine/ui/webadmin/css/TagTree.css" }) TableStyle cellTreeStyle(); } }