/******************************************************************************* * 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.common.base.Strings; 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.Style; import org.eclipse.che.ide.api.data.tree.Node; import org.eclipse.che.ide.ui.smartTree.Tree; import org.eclipse.che.ide.ui.smartTree.TreeStyles; /** * @author Vlad Zhukovskiy */ public class DefaultPresentationRenderer<N extends Node> extends AbstractPresentationRenderer<N> { public DefaultPresentationRenderer(TreeStyles treeStyles) { super(treeStyles); } @Override public Element render(N node, String domID, Tree.Joint joint, int depth) { NodePresentation presentation; if (node instanceof HasPresentation) { presentation = ((HasPresentation)node).getPresentation(false); } else { presentation = new NodePresentation(); presentation.setPresentableText(node.getName()); } Element rootContainer = getRootContainer(domID); Element nodeContainer = getNodeContainer(); setIndentLevel(nodeContainer, depth); Element jointContainer = getJointContainer(joint); Element iconContainer = getIconContainer(presentation.getPresentableIcon()); Element userElement = getUserElement(presentation.getUserElement()); Element presentableTextContainer = getPresentableTextContainer(createPresentableTextElement(presentation)); Element infoTextContainer = getInfoTextContainer(createInfoTextElement(presentation)); Element descendantsContainer = getDescendantsContainer(); nodeContainer.appendChild(jointContainer); nodeContainer.appendChild(iconContainer); nodeContainer.appendChild(userElement == null ? Document.get().createSpanElement() : userElement); nodeContainer.appendChild(presentableTextContainer); nodeContainer.appendChild(infoTextContainer); rootContainer.appendChild(nodeContainer); rootContainer.appendChild(descendantsContainer); return rootContainer; } private Element createPresentableTextElement(NodePresentation presentation) { DivElement textElement = Document.get().createDivElement(); textElement.setInnerText(Strings.nullToEmpty(presentation.getPresentableText())); textElement.setAttribute("style", presentation.getPresentableTextCss()); //TODO support text colorization return textElement; } private Element createInfoTextElement(NodePresentation presentation) { DivElement textElement = Document.get().createDivElement(); StringBuilder sb = new StringBuilder(); if (presentation.getInfoTextWrapper() != null) { sb.append(presentation.getInfoTextWrapper().first); } if (!Strings.isNullOrEmpty(presentation.getInfoText())) { sb.append(presentation.getInfoText()); } if (presentation.getInfoTextWrapper() != null) { sb.append(presentation.getInfoTextWrapper().second); } textElement.setInnerText(sb.toString()); textElement.setAttribute("style", presentation.getInfoTextCss()); //TODO support text colorization return textElement; } private void setIndentLevel(Element element, int depth) { element.getStyle().setPaddingLeft((double)depth * 16, Style.Unit.PX); } }