/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.ui.smartTree.presentation; import com.google.gwt.dom.client.DivElement; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.ImageElement; import com.google.gwt.dom.client.Style; import org.eclipse.che.ide.api.data.tree.Node; import org.eclipse.che.ide.ui.smartTree.Tree.Joint; import org.eclipse.che.ide.ui.smartTree.TreeStyles; import org.eclipse.che.ide.ui.smartTree.TreeView; import org.vectomatic.dom.svg.OMSVGSVGElement; import org.vectomatic.dom.svg.ui.SVGResource; import org.vectomatic.dom.svg.utils.OMSVGParser; /** * Base class for providing own rendering mechanism. * * @author Vlad Zhukovskiy */ public abstract class AbstractPresentationRenderer<N extends Node> implements PresentationRenderer<N> { protected TreeStyles treeStyles; public AbstractPresentationRenderer(TreeStyles treeStyles) { this.treeStyles = treeStyles; } /** {@inheritDoc} */ @Override public Element getRootContainer(String domID) { DivElement divElement = Document.get().createDivElement(); divElement.setId(domID); divElement.setClassName(treeStyles.styles().rootContainer()); return divElement; } /** {@inheritDoc} */ @Override public Element getNodeContainer() { DivElement divElement = Document.get().createDivElement(); divElement.setClassName(treeStyles.styles().nodeContainer()); return divElement; } /** {@inheritDoc} */ @Override public Element getJointContainer(Joint joint) { Element jointElement; switch (joint) { case COLLAPSED: OMSVGSVGElement svg = treeStyles.iconCollapsed().getSvg(); svg.addClassNameBaseVal(treeStyles.styles().jointContainer()); svg.setWidth(Style.Unit.PX, 16.f); svg.setHeight(Style.Unit.PX, 16.f); jointElement = svg.getElement(); break; case EXPANDED: OMSVGSVGElement svg1 = treeStyles.iconExpanded().getSvg(); svg1.addClassNameBaseVal(treeStyles.styles().jointContainer()); svg1.setWidth(Style.Unit.PX, 16.f); svg1.setHeight(Style.Unit.PX, 16.f); jointElement = svg1.getElement(); break; default: OMSVGSVGElement svgsvgElement = OMSVGParser.currentDocument().createSVGSVGElement(); svgsvgElement.addClassNameBaseVal(treeStyles.styles().jointContainer()); svgsvgElement.setWidth(Style.Unit.PX, 16.f); svgsvgElement.setHeight(Style.Unit.PX, 16.f); jointElement = svgsvgElement.getElement(); } DivElement wrapper = Document.get().createDivElement(); wrapper.appendChild(jointElement); return jointElement; } /** {@inheritDoc} */ @Override public Element getUserElement(Element userElement) { return userElement; } /** {@inheritDoc} */ @Override public Element getIconContainer(SVGResource icon) { if (icon != null) { OMSVGSVGElement svg = icon.getSvg(); svg.addClassNameBaseVal(treeStyles.styles().iconContainer()); svg.setWidth(Style.Unit.PX, 16); svg.setHeight(Style.Unit.PX, 16); return svg.getElement(); } ImageElement emptyIcon = Document.get().createImageElement(); emptyIcon.setSrc(TreeView.blankImageUrl); emptyIcon.setClassName(treeStyles.styles().iconContainer()); return emptyIcon; } /** {@inheritDoc} */ @Override public Element getPresentableTextContainer(Element content) { DivElement divElement = Document.get().createDivElement(); divElement.setClassName(treeStyles.styles().presentableTextContainer()); divElement.appendChild(content); return divElement; } /** {@inheritDoc} */ @Override public Element getInfoTextContainer(Element content) { DivElement divElement = Document.get().createDivElement(); divElement.setClassName(treeStyles.styles().infoTextContainer()); divElement.appendChild(content); return divElement; } /** {@inheritDoc} */ @Override public Element getDescendantsContainer() { DivElement divElement = Document.get().createDivElement(); divElement.setClassName(treeStyles.styles().descendantsContainer()); return divElement; } }