[EGIT PATCH 2/3] Present type of change with file revision in diff viewer
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
---
.../spearce/egit/ui/internal/history/RevDiff.java | 40 +++++++++++++++++++-
1 files changed, 38 insertions(+), 2 deletions(-)
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevDiff.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevDiff.java
index 020ec73..084da3b 100644
--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevDiff.java
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/history/RevDiff.java
@@ -2,9 +2,13 @@
import org.eclipse.compare.ITypedElement;
import org.eclipse.compare.structuremergeviewer.IStructureComparator;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.DecorationOverlayIcon;
+import org.eclipse.jface.viewers.IDecoration;
import org.eclipse.swt.graphics.Image;
import org.eclipse.team.internal.ui.history.FileRevisionTypedElement;
import org.spearce.egit.core.internal.storage.GitFileRevision;
+import org.spearce.egit.ui.UIIcons;
import org.spearce.jgit.lib.Repository;
class RevDiff {
@@ -46,9 +50,41 @@ public String getType() {
public Object[] getChildren() {
FileRevisionTypedElement[] ret = new FileRevisionTypedElement[fileDiffs.length];
for (int i = 0; i < ret.length; ++i) {
+ final FileDiff d = fileDiffs[i];
ret[i] = new FileRevisionTypedElement(GitFileRevision.inCommit(db,
- fileDiffs[i].commit, fileDiffs[i].path,
- fileDiffs[i].blobs[side]));
+ d.commit, d.path, d.blobs[side])) {
+ private Image image;
+
+ @Override
+ protected void finalize() throws Throwable {
+ if (image != null)
+ image.dispose();
+ }
+
+ @Override
+ public Image getImage() {
+ if (image == null) {
+ ImageDescriptor overlay;
+ switch (d.change.charAt(0)) {
+ case 'A':
+ overlay = UIIcons.OVR_PENDING_ADD;
+ break;
+ case 'M':
+ overlay = UIIcons.OVR_SHARED;
+ break;
+ case 'D':
+ overlay = UIIcons.OVR_PENDING_REMOVE;
+ break;
+ default:
+ return super.getImage(); // Should not happen...
+ }
+ image = new DecorationOverlayIcon(super.getImage(),
+ overlay, IDecoration.BOTTOM_RIGHT)
+ .createImage();
+ }
+ return image;
+ }
+ };
}
return ret;
}
--
1.6.1.rc3.56.gd0306