package org.ovirt.engine.ui.webadmin.widget.tree; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.uicommon.model.SystemTreeModelProvider; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.cellview.client.CellTable; import com.google.gwt.user.cellview.client.CellTree; import com.google.gwt.user.cellview.client.CellTree.Style; import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy; import com.google.gwt.user.cellview.client.TreeNode; import com.google.gwt.user.client.ui.ButtonBase; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; public class SystemTree extends Composite { interface WidgetUiBinder extends UiBinder<Widget, SystemTree> { WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class); } @UiField(provided = true) Widget treeDisplayWidget; @UiField ButtonBase refreshButton; @UiField ButtonBase expandButton; @UiField ButtonBase collapseButton; private final SystemTreeModelProvider modelProvider; private CellTree display; public SystemTree(SystemTreeModelProvider modelProvider, ApplicationConstants constants) { this.modelProvider = modelProvider; this.treeDisplayWidget = createTreeDisplayWidget(modelProvider); initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this)); localize(constants); } private void localize(ApplicationConstants constants) { expandButton.setText(constants.treeExpandAll()); collapseButton.setText(constants.treeCollapseAll()); } Widget createTreeDisplayWidget(SystemTreeModelProvider modelProvider) { SystemTreeResources res = GWT.create(SystemTreeResources.class); display = new CellTree(modelProvider, null, res); display.setAnimationEnabled(true); display.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.BOUND_TO_SELECTION); return display; } @UiHandler("refreshButton") void handleRefreshButtonClick(ClickEvent event) { modelProvider.getModel().ForceRefresh(); expandTree(display.getRootTreeNode(), false); } @UiHandler("expandButton") void handleExpandButtonClick(ClickEvent event) { expandTree(display.getRootTreeNode(), true); } @UiHandler("collapseButton") void handlecollapseButtonClick(ClickEvent event) { expandTree(display.getRootTreeNode(), false); } private void expandTree(TreeNode node, boolean collapse) { if (node == null) { return; } if (node.getChildCount() > 0) { for (int i = 0; i < node.getChildCount(); i++) { expandTree(node.setChildOpen(i, collapse), collapse); } } } public interface SystemTreeResources extends CellTree.Resources { interface TableStyle extends CellTable.Style { } @Override @Source({ CellTree.Style.DEFAULT_CSS, "org/ovirt/engine/ui/webadmin/css/SystemTree.css" }) Style cellTreeStyle(); } }