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
.egit
.ui
.UIIcons
;
19 import org
.eclipse
.egit
.ui
.UIText
;
20 import org
.eclipse
.jface
.resource
.CompositeImageDescriptor
;
21 import org
.eclipse
.jface
.viewers
.ColumnViewer
;
22 import org
.eclipse
.jface
.viewers
.LabelProvider
;
23 import org
.eclipse
.jgit
.lib
.Ref
;
24 import org
.eclipse
.jgit
.lib
.Repository
;
25 import org
.eclipse
.swt
.graphics
.Image
;
26 import org
.eclipse
.swt
.graphics
.Point
;
27 import org
.eclipse
.swt
.graphics
.Rectangle
;
30 * Label Provider for the Git Repositories View
32 public class RepositoriesViewLabelProvider
extends LabelProvider
{
35 * A map of regular images to their decorated counterpart.
37 private Map
<Image
, Image
> decoratedImages
= new HashMap
<Image
, Image
>();
39 // private DefaultInformationControl infoControl;
45 public RepositoriesViewLabelProvider(final ColumnViewer viewer
) {
47 viewer
.setLabelProvider(this);
48 // we could implement some hover here to display additional information
49 // viewer.getTree().addMouseTrackListener(new MouseTrackAdapter() {
52 // public void mouseHover(MouseEvent e) {
54 // Point eventPoint = new Point(e.x, e.y);
56 // TreeItem item = viewer.getTree().getItem(eventPoint);
57 // if (item != null) {
59 // RepositoryTreeNode node = (RepositoryTreeNode) item
61 // String text = node.getRepository().getDirectory()
62 // .getCanonicalPath();
64 // final ViewerCell cell = viewer.getCell(eventPoint);
66 // if (infoControl != null && infoControl.isVisible()) {
67 // infoControl.setVisible(false);
70 // GC testGc = new GC(cell.getControl());
71 // final Point textExtent = testGc.textExtent(text);
74 // if (infoControl == null || !infoControl.isVisible()) {
76 // IInformationPresenter ips = new IInformationPresenter() {
78 // public String updatePresentation(
79 // Display display, String hoverInfo,
80 // TextPresentation presentation,
81 // int maxWidth, int maxHeight) {
87 // infoControl = new DefaultInformationControl(Display
88 // .getCurrent().getActiveShell().getShell(),
92 // public void setInformation(String content) {
93 // super.setInformation(content);
94 // super.setSize(textExtent.x, textExtent.y);
100 // Point dispPoint = viewer.getControl().toDisplay(
103 // infoControl.setLocation(dispPoint);
105 // // the default info provider works better with \r ...
106 // infoControl.setInformation(text);
108 // final MouseMoveListener moveListener = new
109 // MouseMoveListener() {
111 // public void mouseMove(MouseEvent evt) {
112 // infoControl.setVisible(false);
113 // cell.getControl().removeMouseMoveListener(this);
118 // cell.getControl().addMouseMoveListener(moveListener);
120 // infoControl.setVisible(true);
131 public Image
getImage(Object element
) {
132 return decorateImage(
133 ((RepositoryTreeNode
) element
).getType().getIcon(), element
);
137 public String
getText(Object element
) {
139 RepositoryTreeNode node
= (RepositoryTreeNode
) element
;
140 switch (node
.getType()) {
142 File directory
= ((Repository
) node
.getObject()).getDirectory();
143 StringBuilder sb
= new StringBuilder();
144 sb
.append(directory
.getParentFile().getName());
145 sb
.append(" - "); //$NON-NLS-1$
146 sb
.append(directory
.getAbsolutePath());
147 return sb
.toString();
151 return ((File
) node
.getObject()).getName();
153 return UIText
.RepositoriesView_Branches_Nodetext
;
155 return UIText
.RepositoriesViewLabelProvider_LocalBranchesNodetext
;
157 return UIText
.RepositoriesViewLabelProvider_RemoteBrancheNodetext
;
159 return UIText
.RepositoriesViewLabelProvider_TagsNodeText
;
161 return UIText
.RepositoriesViewLabelProvider_SymbolicRefNodeText
;
163 return UIText
.RepositoriesView_RemotesNodeText
;
167 return (String
) node
.getObject();
173 Ref ref
= (Ref
) node
.getObject();
175 String refName
= node
.getRepository().shortenRefName(ref
.getName());
176 if (ref
.isSymbolic()) {
177 refName
= refName
+ " - " //$NON-NLS-1$
178 + ref
.getLeaf().getName();
183 return UIText
.RepositoriesView_WorkingDir_treenode
+ " - " //$NON-NLS-1$
184 + node
.getRepository().getWorkDir().getAbsolutePath();
188 return (String
) node
.getObject();
196 public void dispose() {
197 // dispose of our decorated images
198 for (Image image
: decoratedImages
.values()) {
201 decoratedImages
.clear();
205 private Image
decorateImage(final Image image
, Object element
) {
207 RepositoryTreeNode node
= (RepositoryTreeNode
) element
;
208 switch (node
.getType()) {
211 Ref ref
= (Ref
) node
.getObject();
213 String refName
= node
.getRepository().shortenRefName(ref
.getName());
215 String branch
= node
.getRepository().getBranch();
216 if (refName
.equals(branch
)) {
217 return getDecoratedImage(image
);
219 } catch (IOException e1
) {
220 // simply ignore here
229 private Image
getDecoratedImage(final Image image
) {
230 // check if we have a decorated image yet or not
231 Image decoratedImage
= decoratedImages
.get(image
);
232 if (decoratedImage
== null) {
234 CompositeImageDescriptor cd
= new CompositeImageDescriptor() {
237 protected Point
getSize() {
238 Rectangle bounds
= image
.getBounds();
239 return new Point(bounds
.width
, bounds
.height
);
243 protected void drawCompositeImage(int width
, int height
) {
244 drawImage(image
.getImageData(), 0, 0);
245 drawImage(UIIcons
.OVR_CHECKEDOUT
.getImageData(), 0, 0);
249 decoratedImage
= cd
.createImage();
251 decoratedImages
.put(image
, decoratedImage
);
253 return decoratedImage
;