1 /*******************************************************************************
2 * Copyright (c) 2010 SAP AG.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * Mathias Kinzler (SAP AG) - initial implementation
10 *******************************************************************************/
11 package org
.eclipse
.egit
.ui
.internal
.repository
;
14 import java
.io
.IOException
;
15 import java
.util
.HashMap
;
18 import org
.eclipse
.core
.resources
.IProject
;
19 import org
.eclipse
.core
.resources
.ResourcesPlugin
;
20 import org
.eclipse
.core
.runtime
.Path
;
21 import org
.eclipse
.egit
.ui
.UIIcons
;
22 import org
.eclipse
.egit
.ui
.UIText
;
23 import org
.eclipse
.jface
.resource
.CompositeImageDescriptor
;
24 import org
.eclipse
.jface
.viewers
.ColumnViewer
;
25 import org
.eclipse
.jface
.viewers
.LabelProvider
;
26 import org
.eclipse
.jgit
.lib
.Ref
;
27 import org
.eclipse
.jgit
.lib
.Repository
;
28 import org
.eclipse
.swt
.graphics
.Image
;
29 import org
.eclipse
.swt
.graphics
.Point
;
30 import org
.eclipse
.swt
.graphics
.Rectangle
;
33 * Label Provider for the Git Repositories View
35 public class RepositoriesViewLabelProvider
extends LabelProvider
{
38 * A map of regular images to their decorated counterpart.
40 private Map
<Image
, Image
> decoratedImages
= new HashMap
<Image
, Image
>();
42 // private DefaultInformationControl infoControl;
48 public RepositoriesViewLabelProvider(final ColumnViewer viewer
) {
50 viewer
.setLabelProvider(this);
51 // we could implement some hover here to display additional information
52 // viewer.getTree().addMouseTrackListener(new MouseTrackAdapter() {
55 // public void mouseHover(MouseEvent e) {
57 // Point eventPoint = new Point(e.x, e.y);
59 // TreeItem item = viewer.getTree().getItem(eventPoint);
60 // if (item != null) {
62 // RepositoryTreeNode node = (RepositoryTreeNode) item
64 // String text = node.getRepository().getDirectory()
65 // .getCanonicalPath();
67 // final ViewerCell cell = viewer.getCell(eventPoint);
69 // if (infoControl != null && infoControl.isVisible()) {
70 // infoControl.setVisible(false);
73 // GC testGc = new GC(cell.getControl());
74 // final Point textExtent = testGc.textExtent(text);
77 // if (infoControl == null || !infoControl.isVisible()) {
79 // IInformationPresenter ips = new IInformationPresenter() {
81 // public String updatePresentation(
82 // Display display, String hoverInfo,
83 // TextPresentation presentation,
84 // int maxWidth, int maxHeight) {
90 // infoControl = new DefaultInformationControl(Display
91 // .getCurrent().getActiveShell().getShell(),
95 // public void setInformation(String content) {
96 // super.setInformation(content);
97 // super.setSize(textExtent.x, textExtent.y);
103 // Point dispPoint = viewer.getControl().toDisplay(
106 // infoControl.setLocation(dispPoint);
108 // // the default info provider works better with \r ...
109 // infoControl.setInformation(text);
111 // final MouseMoveListener moveListener = new
112 // MouseMoveListener() {
114 // public void mouseMove(MouseEvent evt) {
115 // infoControl.setVisible(false);
116 // cell.getControl().removeMouseMoveListener(this);
121 // cell.getControl().addMouseMoveListener(moveListener);
123 // infoControl.setVisible(true);
134 public Image
getImage(Object element
) {
135 return decorateImage(
136 ((RepositoryTreeNode
) element
).getType().getIcon(), element
);
140 public String
getText(Object element
) {
142 RepositoryTreeNode node
= (RepositoryTreeNode
) element
;
143 switch (node
.getType()) {
145 File directory
= ((Repository
) node
.getObject()).getDirectory();
146 StringBuilder sb
= new StringBuilder();
147 sb
.append(directory
.getParentFile().getName());
148 sb
.append(" - "); //$NON-NLS-1$
149 sb
.append(directory
.getAbsolutePath());
150 return sb
.toString();
154 return ((File
) node
.getObject()).getName();
156 return UIText
.RepositoriesView_Branches_Nodetext
;
158 return UIText
.RepositoriesViewLabelProvider_LocalBranchesNodetext
;
160 return UIText
.RepositoriesViewLabelProvider_RemoteBrancheNodetext
;
162 return UIText
.RepositoriesViewLabelProvider_TagsNodeText
;
164 return UIText
.RepositoriesViewLabelProvider_SymbolicRefNodeText
;
166 return UIText
.RepositoriesView_RemotesNodeText
;
170 return (String
) node
.getObject();
172 return UIText
.RepositoriesView_ExistingProjects_Nodetext
;
180 Ref ref
= (Ref
) node
.getObject();
182 String refName
= node
.getRepository().shortenRefName(ref
.getName());
183 if (ref
.isSymbolic()) {
184 refName
= refName
+ " - " //$NON-NLS-1$
185 + ref
.getLeaf().getName();
190 File file
= (File
) node
.getObject();
191 return file
.getName();
195 return UIText
.RepositoriesView_WorkingDir_treenode
+ " - " //$NON-NLS-1$
196 + node
.getRepository().getWorkDir().getAbsolutePath();
198 case PUSH
: // fall through
200 return (String
) node
.getObject();
208 public void dispose() {
209 // dispose of our decorated images
210 for (Image image
: decoratedImages
.values()) {
213 decoratedImages
.clear();
217 private Image
decorateImage(final Image image
, Object element
) {
219 RepositoryTreeNode node
= (RepositoryTreeNode
) element
;
220 switch (node
.getType()) {
223 Ref ref
= (Ref
) node
.getObject();
225 String refName
= node
.getRepository().shortenRefName(ref
.getName());
227 String branch
= node
.getRepository().getBranch();
228 if (refName
.equals(branch
)) {
229 return getDecoratedImage(image
);
231 } catch (IOException e1
) {
232 // simply ignore here
238 File file
= (File
) node
.getObject();
240 for (IProject proj
: ResourcesPlugin
.getWorkspace().getRoot()
242 if (proj
.getLocation().equals(new Path(file
.getAbsolutePath()))) {
243 return getDecoratedImage(image
);
253 private Image
getDecoratedImage(final Image image
) {
254 // check if we have a decorated image yet or not
255 Image decoratedImage
= decoratedImages
.get(image
);
256 if (decoratedImage
== null) {
258 CompositeImageDescriptor cd
= new CompositeImageDescriptor() {
261 protected Point
getSize() {
262 Rectangle bounds
= image
.getBounds();
263 return new Point(bounds
.width
, bounds
.height
);
267 protected void drawCompositeImage(int width
, int height
) {
268 drawImage(image
.getImageData(), 0, 0);
269 drawImage(UIIcons
.OVR_CHECKEDOUT
.getImageData(), 0, 0);
273 decoratedImage
= cd
.createImage();
275 decoratedImages
.put(image
, decoratedImage
);
277 return decoratedImage
;