/* * GitStatusRenderer.java * * Copyright (C) 2009-12 by RStudio, Inc. * * Unless you have received this program directly from RStudio pursuant * to the terms of a commercial license agreement with RStudio, then * this program is licensed to you under the terms of version 3 of the * GNU Affero General Public License. This program is distributed WITHOUT * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT, * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details. * */ package org.rstudio.studio.client.workbench.views.vcs.git; import com.google.gwt.core.client.GWT; import com.google.gwt.resources.client.ClientBundle; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.text.shared.SafeHtmlRenderer; import org.rstudio.core.client.resources.ImageResource2x; import org.rstudio.studio.client.workbench.views.vcs.common.ChangelistTable.ChangelistTableCellTableResources; public class GitStatusRenderer implements SafeHtmlRenderer<String> { interface StatusResources extends ClientBundle { @Source("images/statusAdded_2x.png") ImageResource statusAdded2x(); @Source("images/statusDeleted_2x.png") ImageResource statusDeleted2x(); @Source("images/statusModified_2x.png") ImageResource statusModified2x(); @Source("images/statusNone_2x.png") ImageResource statusNone2x(); @Source("images/statusCopied_2x.png") ImageResource statusCopied2x(); @Source("images/statusUntracked_2x.png") ImageResource statusUntracked2x(); @Source("images/statusUnmerged_2x.png") ImageResource statusUnmerged2x(); @Source("images/statusRenamed_2x.png") ImageResource statusRenamed2x(); } public GitStatusRenderer() { } @Override public SafeHtml render(String str) { if (str.length() != 2) return null; ImageResource2x indexImg = imgForStatus(str.charAt(0)); ImageResource2x treeImg = imgForStatus(str.charAt(1)); SafeHtmlBuilder builder = new SafeHtmlBuilder(); builder.append(SafeHtmlUtils.fromTrustedString( "<span " + "class=\"" + ctRes_.cellTableStyle().status() + "\" " + "title=\"" + SafeHtmlUtils.htmlEscape(descForStatus(str)) + "\">")); builder.append(indexImg.getSafeHtml()); builder.append(treeImg.getSafeHtml()); builder.appendHtmlConstant("</span>"); return builder.toSafeHtml(); } private String descForStatus(String str) { String indexDesc = descForStatus(str.charAt(0)); String treeDesc = descForStatus(str.charAt(1)); if (indexDesc.length() > 0 && treeDesc.length() > 0) return indexDesc + "/" + treeDesc; else if (indexDesc.length() > 0) return indexDesc; else if (treeDesc.length() > 0) return treeDesc; else return ""; } private String descForStatus(char c) { switch (c) { case 'A': return "Added"; case 'M': return "Modified"; case 'D': return "Deleted"; case 'R': return "Renamed"; case 'C': return "Copied"; case '?': return "Untracked"; case 'U': return "Unmerged"; case ' ': return ""; default: return ""; } } private ImageResource2x imgForStatus(char c) { switch (c) { case 'A': return new ImageResource2x(resources_.statusAdded2x()); case 'M': return new ImageResource2x(resources_.statusModified2x()); case 'D': return new ImageResource2x(resources_.statusDeleted2x()); case 'R': return new ImageResource2x(resources_.statusRenamed2x()); case 'C': return new ImageResource2x(resources_.statusCopied2x()); case '?': return new ImageResource2x(resources_.statusUntracked2x()); case 'U': return new ImageResource2x(resources_.statusUnmerged2x()); case ' ': return new ImageResource2x(resources_.statusNone2x()); default: return new ImageResource2x(resources_.statusNone2x()); } } @Override public void render(String str, SafeHtmlBuilder builder) { SafeHtml safeHtml = render(str); if (safeHtml != null) builder.append(safeHtml); } private static final StatusResources resources_ = GWT.create(StatusResources.class); private static final ChangelistTableCellTableResources ctRes_ = GWT.create(ChangelistTableCellTableResources.class); }