Have icon for "reset" entry in reflog
[egit/eclipse.git] / org.eclipse.egit.ui / src / org / eclipse / egit / ui / internal / GitLabelProvider.java
blob7d042eaf7d54fb93c6ec8c0e76720a170456d051
1 /*******************************************************************************
2 * Copyright (c) 2011, 2018 Benjamin Muskalla and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License 2.0
5 * which accompanies this distribution, and is available at
6 * https://www.eclipse.org/legal/epl-2.0/
8 * SPDX-License-Identifier: EPL-2.0
10 * Contributors:
11 * Benjamin Muskalla <bmuskalla@tasktop.com> - initial API and implementation
12 *******************************************************************************/
13 package org.eclipse.egit.ui.internal;
15 import org.eclipse.core.resources.IResource;
16 import org.eclipse.egit.core.AdapterUtils;
17 import org.eclipse.egit.ui.internal.clone.ProjectRecord;
18 import org.eclipse.egit.ui.internal.commit.RepositoryCommit;
19 import org.eclipse.egit.ui.internal.repository.tree.RefNode;
20 import org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNodeType;
21 import org.eclipse.egit.ui.internal.synchronize.model.GitModelBlob;
22 import org.eclipse.egit.ui.internal.synchronize.model.GitModelCache;
23 import org.eclipse.egit.ui.internal.synchronize.model.GitModelCommit;
24 import org.eclipse.egit.ui.internal.synchronize.model.GitModelRepository;
25 import org.eclipse.egit.ui.internal.synchronize.model.GitModelTree;
26 import org.eclipse.egit.ui.internal.synchronize.model.GitModelWorkingTree;
27 import org.eclipse.jface.resource.JFaceResources;
28 import org.eclipse.jface.resource.LocalResourceManager;
29 import org.eclipse.jface.resource.ResourceManager;
30 import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
31 import org.eclipse.jface.viewers.LabelProvider;
32 import org.eclipse.jface.viewers.StyledString;
33 import org.eclipse.jgit.lib.Constants;
34 import org.eclipse.jgit.lib.Ref;
35 import org.eclipse.jgit.lib.Repository;
36 import org.eclipse.swt.graphics.Image;
37 import org.eclipse.ui.PlatformUI;
38 import org.eclipse.ui.ide.IDE.SharedImages;
39 import org.eclipse.ui.model.WorkbenchLabelProvider;
41 /**
42 * Common label provider for git related model objects
45 public class GitLabelProvider extends LabelProvider implements
46 IStyledLabelProvider {
48 private ResourceManager imageCache;
50 private LabelProvider workbenchLabelProvider;
52 @Override
53 public String getText(Object element) {
54 return GitLabels.getPlainShortLabelExtended(element);
57 @Override
58 public Image getImage(Object element) {
59 if (element instanceof Repository) {
60 return UIIcons.getImage(getImageCache(),
61 RepositoryTreeNodeType.REPO.getIcon());
64 if (element instanceof RefNode) {
65 return getRefIcon(((RefNode) element).getObject());
68 if (element instanceof Ref) {
69 return getRefIcon((Ref) element);
72 if (element instanceof GitModelBlob || element instanceof GitModelTree) {
73 Object adapter = AdapterUtils.adapt(element, IResource.class);
74 return getWorkbenchLabelProvider().getImage(adapter);
77 if (element instanceof GitModelCommit
78 || element instanceof GitModelCache
79 || element instanceof GitModelWorkingTree
80 || element instanceof RepositoryCommit)
81 return getChangesetIcon();
83 if (element instanceof GitModelRepository)
84 return getImage(((GitModelRepository) element).getRepository());
86 if (element instanceof ProjectRecord)
87 return PlatformUI.getWorkbench().getSharedImages()
88 .getImage(SharedImages.IMG_OBJ_PROJECT);
90 return super.getImage(element);
93 @Override
94 public StyledString getStyledText(Object element) {
95 return GitLabels.getStyledLabelExtendedSafe(element);
98 /**
99 * Returns the common icon for a changeset.
101 * @return an image
103 protected Image getChangesetIcon() {
104 return getImageCache().createImage(UIIcons.CHANGESET);
107 private Image getRefIcon(Ref ref) {
108 String name = ref.getName();
109 if (name.startsWith(Constants.R_HEADS)
110 || name.startsWith(Constants.R_REMOTES)) {
111 return UIIcons.getImage(getImageCache(),
112 RepositoryTreeNodeType.REF.getIcon());
113 } else if (name.startsWith(Constants.R_TAGS)) {
114 return UIIcons.getImage(getImageCache(),
115 RepositoryTreeNodeType.TAG.getIcon());
116 } else {
117 return UIIcons.getImage(getImageCache(),
118 RepositoryTreeNodeType.ADDITIONALREF.getIcon());
122 private LabelProvider getWorkbenchLabelProvider() {
123 if (workbenchLabelProvider == null)
124 workbenchLabelProvider = new WorkbenchLabelProvider();
125 return workbenchLabelProvider;
128 private ResourceManager getImageCache() {
129 if (imageCache == null)
130 imageCache = new LocalResourceManager(JFaceResources.getResources());
131 return imageCache;
134 @Override
135 public void dispose() {
136 super.dispose();
137 if (imageCache != null)
138 imageCache.dispose();
139 if(workbenchLabelProvider != null)
140 workbenchLabelProvider.dispose();