Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2012-10-13 08:03:00 +0000
committerEike Stepper2012-10-13 08:03:00 +0000
commit65a5ecee96503c0bfa31a882a4cb1e0d6a46209c (patch)
tree82c61f5d0e8539aaa0349fab12f5ea3ba2fd9c03 /plugins/org.eclipse.emf.cdo.ui
parent1dee98239e60b3b127b23264a88a6abd3bdf809c (diff)
downloadcdo-65a5ecee96503c0bfa31a882a4cb1e0d6a46209c.tar.gz
cdo-65a5ecee96503c0bfa31a882a4cb1e0d6a46209c.tar.xz
cdo-65a5ecee96503c0bfa31a882a4cb1e0d6a46209c.zip
[391503] [UI] Render a CDOCommitInfo graph into the history page
https://bugs.eclipse.org/bugs/show_bug.cgi?id=391503
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.ui')
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/history/NetRenderer.java198
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/CommitHistoryComposite.java17
2 files changed, 129 insertions, 86 deletions
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/history/NetRenderer.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/history/NetRenderer.java
index 0deb7e10f9..0e16d956a3 100644
--- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/history/NetRenderer.java
+++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/history/NetRenderer.java
@@ -20,6 +20,7 @@ import org.eclipse.emf.cdo.ui.widgets.CommitHistoryComposite.Input;
import org.eclipse.emf.cdo.ui.widgets.CommitHistoryComposite.LabelProvider;
import org.eclipse.jface.resource.ResourceManager;
+import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.graphics.Color;
@@ -30,6 +31,7 @@ import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
/**
@@ -84,6 +86,14 @@ public class NetRenderer implements Listener
colorDotOutline = resourceManager.createColor(new RGB(110, 110, 110));
}
+ public void support(TableViewer tableViewer)
+ {
+ Table table = tableViewer.getTable();
+ table.addListener(SWT.MeasureItem, this);
+ table.addListener(SWT.PaintItem, this);
+ table.addListener(SWT.EraseItem, this);
+ }
+
public void setInput(Input input)
{
if (input != null)
@@ -103,6 +113,34 @@ public class NetRenderer implements Listener
public void handleEvent(Event event)
{
+ switch (event.type)
+ {
+ case SWT.MeasureItem:
+ // TableItem item = (TableItem)event.item;
+ // String text = getText(item, event.index);
+ // Point size = event.gc.textExtent(text);
+ // event.width = size.x;
+ // event.height = Math.max(event.height, size.y);
+ event.width = handlePaintEvent(event, true);
+ break;
+
+ case SWT.PaintItem:
+ // TableItem item = (TableItem)event.item;
+ // String text = getText(item, event.index);
+ // Point size = event.gc.textExtent(text);
+ // int offset2 = event.index == 0 ? Math.max(0, (event.height - size.y) / 2) : 0;
+ // event.gc.drawText(text, event.x, event.y + offset2, true);
+ handlePaintEvent(event, false);
+ break;
+
+ case SWT.EraseItem:
+ event.detail &= ~SWT.FOREGROUND;
+ break;
+ }
+ }
+
+ public int handlePaintEvent(Event event, boolean justMeasureWidth)
+ {
try
{
gc = event.gc;
@@ -136,22 +174,23 @@ public class NetRenderer implements Listener
cellBackground = gc.getBackground();
CDOCommitInfo commitInfo = (CDOCommitInfo)((TableItem)event.item).getData();
- drawCell(commitInfo, event.index);
+ return drawCell(commitInfo, event.index, justMeasureWidth);
}
catch (Throwable ex)
{
OM.LOG.error(ex);
+ return 0;
}
}
- private void drawCell(CDOCommitInfo commitInfo, int columnIndex)
+ private int drawCell(CDOCommitInfo commitInfo, int columnIndex, boolean justMeasureWidth)
{
- int textX = TRACK_OFFSET;
+ int x = TRACK_OFFSET;
if (columnIndex == 1)
{
if (!(commitInfo instanceof TriggerLoadElement))
{
- textX += drawCommit(commitInfo);
+ x += drawCommit(commitInfo, justMeasureWidth);
}
}
else
@@ -160,15 +199,19 @@ public class NetRenderer implements Listener
if (image != null)
{
Rectangle bounds = image.getBounds();
- gc.drawImage(image, bounds.x, bounds.y, bounds.width, bounds.height, //
- cellX + textX, cellY + 1, bounds.width, bounds.height);
+ if (!justMeasureWidth)
+ {
+ gc.drawImage(image, bounds.x, bounds.y, bounds.width, bounds.height, //
+ cellX + x, cellY + 1, bounds.width, bounds.height);
+ }
- textX += bounds.width + TRACK_OFFSET;
+ x += bounds.width + TRACK_OFFSET;
}
}
String text = labelProvider.getColumnText(commitInfo, columnIndex);
- int width = drawText(text, textX, cellHeightHalf);
+ int width = drawText(text, x, cellHeightHalf, justMeasureWidth);
+ x += width;
if (commitInfo instanceof TriggerLoadElement)
{
@@ -177,84 +220,93 @@ public class NetRenderer implements Listener
width += 2 * TRACK_OFFSET;
}
- int y = cellHeightHalf + 1;
- int x2 = gc.getClipping().width;
- drawLine(colorDotOutline, width, y, x2, y, LINE_WIDTH);
+ if (!justMeasureWidth)
+ {
+ int y = cellHeightHalf + 1;
+ int x2 = gc.getClipping().width;
+ drawLine(colorDotOutline, width, y, x2, y, LINE_WIDTH);
+ }
}
+
+ return x;
}
- private int drawCommit(CDOCommitInfo commitInfo)
+ private int drawCommit(CDOCommitInfo commitInfo, boolean justMeasureWidth)
{
Commit commit = net.getCommit(commitInfo);
- Segment commitSegment = commit.getSegment();
- long commitTime = commit.getTime();
-
Segment[] segments = commit.getRowSegments();
- for (int i = 0; i < segments.length; i++)
+
+ if (!justMeasureWidth)
{
- Segment segment = segments[i];
- if (segment != null)
- {
- Branch branch = segment.getBranch();
- Color color = branch.getColor();
+ Segment commitSegment = commit.getSegment();
+ long commitTime = commit.getTime();
- int trackCenter = getTrackCenter(i);
- if (segment != commitSegment)
+ for (int i = 0; i < segments.length; i++)
+ {
+ Segment segment = segments[i];
+ if (segment != null)
{
- if (commitTime == segment.getFirstVisualTime() && segment.isComplete())
- {
- Track commitTrack = commitSegment.getTrack();
- int commitTrackPosition = commitTrack.getPosition();
- int commitTrackCenter = getTrackCenter(commitTrackPosition);
- int positionDelta = Math.abs(i - commitTrackPosition);
+ Branch branch = segment.getBranch();
+ Color color = branch.getColor();
- int x2 = commitTrackCenter;
- if (i < commitTrackPosition)
+ int trackCenter = getTrackCenter(i);
+ if (segment != commitSegment)
+ {
+ if (commitTime == segment.getFirstVisualTime() && segment.isComplete())
{
- // Horizontal line to left
- x2 -= (positionDelta - 1) * TRACK_WIDTH + 7;
- drawLine(color, commitTrackCenter, cellHeightHalf, x2, cellHeightHalf, LINE_WIDTH);
-
- // Diagonal line to upper left
- drawLine(color, x2, cellHeightHalf, getTrackCenter(i), 0, LINE_WIDTH);
+ Track commitTrack = commitSegment.getTrack();
+ int commitTrackPosition = commitTrack.getPosition();
+ int commitTrackCenter = getTrackCenter(commitTrackPosition);
+ int positionDelta = Math.abs(i - commitTrackPosition);
+
+ int x2 = commitTrackCenter;
+ if (i < commitTrackPosition)
+ {
+ // Horizontal line to left
+ x2 -= (positionDelta - 1) * TRACK_WIDTH + 7;
+ drawLine(color, commitTrackCenter, cellHeightHalf, x2, cellHeightHalf, LINE_WIDTH);
+
+ // Diagonal line to upper left
+ drawLine(color, x2, cellHeightHalf, getTrackCenter(i), 0, LINE_WIDTH);
+ }
+ else
+ {
+ // Horizontal line to right
+ x2 += (positionDelta - 1) * TRACK_WIDTH + 7;
+ drawLine(color, commitTrackCenter, cellHeightHalf, x2, cellHeightHalf, LINE_WIDTH);
+
+ // Diagonal line to upper right
+ drawLine(color, x2, cellHeightHalf, getTrackCenter(i), 0, LINE_WIDTH);
+ }
}
else
{
- // Horizontal line to right
- x2 += (positionDelta - 1) * TRACK_WIDTH + 7;
- drawLine(color, commitTrackCenter, cellHeightHalf, x2, cellHeightHalf, LINE_WIDTH);
-
- // Diagonal line to upper right
- drawLine(color, x2, cellHeightHalf, getTrackCenter(i), 0, LINE_WIDTH);
+ // Full vertical line
+ drawLine(color, trackCenter, 0, trackCenter, cellHeight, LINE_WIDTH);
}
}
- else
- {
- // Full vertical line
- drawLine(color, trackCenter, 0, trackCenter, cellHeight, LINE_WIDTH);
- }
}
- }
- Color color = commitSegment.getBranch().getColor();
- int position = commitSegment.getTrack().getPosition();
- int trackCenter = getTrackCenter(position);
+ Color color = commitSegment.getBranch().getColor();
+ int position = commitSegment.getTrack().getPosition();
+ int trackCenter = getTrackCenter(position);
- if (commitTime < commitSegment.getLastCommitTime())
- {
- // Half vertical line to top
- drawLine(color, trackCenter, 0, trackCenter, cellHeightHalf, LINE_WIDTH);
- }
+ if (commitTime < commitSegment.getLastCommitTime())
+ {
+ // Half vertical line to top
+ drawLine(color, trackCenter, 0, trackCenter, cellHeightHalf, LINE_WIDTH);
+ }
- if (commitTime > commitSegment.getFirstVisualTime() || !commitSegment.isComplete())
- {
- // Half vertical line to bottom
- drawLine(color, trackCenter, cellHeightHalf, trackCenter, cellHeight, LINE_WIDTH);
- }
+ if (commitTime > commitSegment.getFirstVisualTime() || !commitSegment.isComplete())
+ {
+ // Half vertical line to bottom
+ drawLine(color, trackCenter, cellHeightHalf, trackCenter, cellHeight, LINE_WIDTH);
+ }
- int dotX = trackCenter - dotSizeHalf - 1;
- int dotY = cellHeightHalf - dotSizeHalf;
- drawDot(dotX, dotY, dotSize, dotSize);
+ int dotX = trackCenter - dotSizeHalf - 1;
+ int dotY = cellHeightHalf - dotSizeHalf;
+ drawDot(dotX, dotY, dotSize, dotSize);
+ }
}
return getTrackX(segments.length) + TRACK_WIDTH;
@@ -280,14 +332,18 @@ public class NetRenderer implements Listener
gc.drawOval(dotX, dotY, dotW, dotH);
}
- private int drawText(final String msg, final int x, final int y)
+ private int drawText(final String msg, final int x, final int y, boolean justMeasureWidth)
{
Point extent = gc.textExtent(msg);
- int textY = (y * 2 - extent.y) / 2;
- gc.setForeground(cellForeground);
- gc.setBackground(cellBackground);
- gc.setBackground(cellBackground);
- gc.drawString(msg, cellX + x, cellY + textY, true);
+ if (!justMeasureWidth)
+ {
+ int textY = (y * 2 - extent.y) / 2;
+ gc.setForeground(cellForeground);
+ gc.setBackground(cellBackground);
+ gc.setBackground(cellBackground);
+ gc.drawString(msg, cellX + x, cellY + textY, true);
+ }
+
return extent.x;
}
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/CommitHistoryComposite.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/CommitHistoryComposite.java
index 98567ab09a..9afc0254c9 100644
--- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/CommitHistoryComposite.java
+++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/CommitHistoryComposite.java
@@ -51,9 +51,6 @@ import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Table;
/**
* @author Eike Stepper
@@ -85,16 +82,7 @@ public class CommitHistoryComposite extends Composite
labelProvider.support(tableViewer);
netRenderer = new NetRenderer(labelProvider);
-
- Table table = tableViewer.getTable();
- table.addListener(SWT.PaintItem, netRenderer);
- table.addListener(SWT.EraseItem, new Listener()
- {
- public void handleEvent(Event event)
- {
- event.detail &= ~SWT.FOREGROUND;
- }
- });
+ netRenderer.support(tableViewer);
}
public final TableViewer getTableViewer()
@@ -132,8 +120,6 @@ public class CommitHistoryComposite extends Composite
}
refreshLayout();
- // netRenderer.setInput(input);
- // tableViewer.setInput(history);
if (oldHistory != null && oldHistory != history)
{
@@ -144,6 +130,7 @@ public class CommitHistoryComposite extends Composite
public void refreshLayout()
{
+ tableViewer.reveal(history.getFirstElement());
netRenderer.setInput(input);
tableViewer.setInput(history);
}

Back to the top