diff --git a/.project b/.project index ca46730..88bcd68 100644 --- a/.project +++ b/.project @@ -1,16 +1,22 @@ - scviewer.parent + com.minres.scviewer.parent + + org.eclipse.m2e.core.maven2Builder + + + + org.eclipse.m2e.core.maven2Nature - 1591076960924 + 0 10 @@ -19,7 +25,7 @@ - 1591076960932 + 0 10 @@ -28,7 +34,7 @@ - 1591076960936 + 0 10 @@ -37,7 +43,7 @@ - 1591076960939 + 0 10 @@ -46,7 +52,7 @@ - 1591076960950 + 0 10 @@ -55,7 +61,7 @@ - 1591076960954 + 0 10 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/com.minres.scviewer.database.test/DatabaseServicesTest.launch b/com.minres.scviewer.database.test/DatabaseServicesTest.launch deleted file mode 100644 index f8e3594..0000000 --- a/com.minres.scviewer.database.test/DatabaseServicesTest.launch +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/com.minres.scviewer.e4.product/pom.xml b/com.minres.scviewer.e4.product/pom.xml index 99973ca..59e17ee 100644 --- a/com.minres.scviewer.e4.product/pom.xml +++ b/com.minres.scviewer.e4.product/pom.xml @@ -10,7 +10,7 @@ .. com.minres.scviewer.e4.product - 2.6.0-SNAPSHOT + 2.6.1-SNAPSHOT eclipse-repository com.minres.scviewer diff --git a/com.minres.scviewer.e4.product/scviewer.product b/com.minres.scviewer.e4.product/scviewer.product index a367b8e..e44db74 100644 --- a/com.minres.scviewer.e4.product/scviewer.product +++ b/com.minres.scviewer.e4.product/scviewer.product @@ -1,8 +1,7 @@ - - + @@ -35,7 +34,6 @@ - org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8 org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8 @@ -51,6 +49,7 @@ + diff --git a/com.minres.scviewer.target/com.minres.scviewer.target.target b/com.minres.scviewer.target/com.minres.scviewer.target.target index 5242f57..57ff270 100644 --- a/com.minres.scviewer.target/com.minres.scviewer.target.target +++ b/com.minres.scviewer.target/com.minres.scviewer.target.target @@ -8,8 +8,9 @@ - + + diff --git a/features/com.minres.scviewer.database.feature/.settings/org.eclipse.m2e.core.prefs b/features/com.minres.scviewer.database.feature/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/features/com.minres.scviewer.database.feature/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/features/com.minres.scviewer.e4.feature/feature.xml b/features/com.minres.scviewer.e4.feature/feature.xml index d20eca7..ddfde0b 100644 --- a/features/com.minres.scviewer.e4.feature/feature.xml +++ b/features/com.minres.scviewer.e4.feature/feature.xml @@ -71,4 +71,11 @@ version="0.0.0" unpack="false"/> + + diff --git a/features/com.minres.scviewer.e4.platform.feature/.gitignore b/features/com.minres.scviewer.e4.platform.feature/.gitignore new file mode 100644 index 0000000..b83d222 --- /dev/null +++ b/features/com.minres.scviewer.e4.platform.feature/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/features/com.minres.scviewer.e4.platform.feature/.project b/features/com.minres.scviewer.e4.platform.feature/.project new file mode 100644 index 0000000..f503e75 --- /dev/null +++ b/features/com.minres.scviewer.e4.platform.feature/.project @@ -0,0 +1,17 @@ + + + com.minres.scviewer.e4.platform.feature + + + + + + org.eclipse.pde.FeatureBuilder + + + + + + org.eclipse.pde.FeatureNature + + diff --git a/features/com.minres.scviewer.e4.platform.feature/build.properties b/features/com.minres.scviewer.e4.platform.feature/build.properties new file mode 100644 index 0000000..64f93a9 --- /dev/null +++ b/features/com.minres.scviewer.e4.platform.feature/build.properties @@ -0,0 +1 @@ +bin.includes = feature.xml diff --git a/features/com.minres.scviewer.e4.platform.feature/feature.xml b/features/com.minres.scviewer.e4.platform.feature/feature.xml new file mode 100644 index 0000000..af86167 --- /dev/null +++ b/features/com.minres.scviewer.e4.platform.feature/feature.xml @@ -0,0 +1,72 @@ + + + + + [Enter Feature Description here.] + + + + [Enter Copyright Description here.] + + + + [Enter License Description here.] + + + + + + + + + + + + + + + + + + + + + + + diff --git a/features/com.minres.scviewer.e4.platform.feature/pom.xml b/features/com.minres.scviewer.e4.platform.feature/pom.xml new file mode 100644 index 0000000..a74562c --- /dev/null +++ b/features/com.minres.scviewer.e4.platform.feature/pom.xml @@ -0,0 +1,12 @@ + + 4.0.0 + com.minres.scviewer.e4.platform.feature + eclipse-feature + + com.minres.scviewer + com.minres.scviewer.parent + 2.0.0-SNAPSHOT + ../.. + + 1.0.0-SNAPSHOT + diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/ArrowPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/ArrowPainter.java index 04dcbca..4a65f2c 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/ArrowPainter.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/ArrowPainter.java @@ -16,7 +16,6 @@ import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Path; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; @@ -89,9 +88,8 @@ public class ArrowPainter implements IPainter { deferredUpdate = true; return; } - selectionOffset = waveCanvas.getXOffset(); int laneHeight = painter.getHeight() / stream.getMaxConcurrency(); - txRectangle = new Rectangle((int) (tx.getBeginTime() / scaleFactor-waveCanvas.getXOffset()), + txRectangle = new Rectangle((int) (tx.getBeginTime() / scaleFactor), waveCanvas.rulerHeight + painter.getVerticalOffset() + laneHeight * tx.getConcurrencyIndex(), (int) ((tx.getEndTime() - tx.getBeginTime()) / scaleFactor), laneHeight); deriveGeom(tx.getIncomingRelations(), iRect, false); @@ -105,7 +103,7 @@ public class ArrowPainter implements IPainter { ITxStream stream = otherTx.getStream(); IWaveformPainter painter = waveCanvas.wave2painterMap.get(stream); int laneHeight = painter.getHeight() / stream.getMaxConcurrency(); - Rectangle bb = new Rectangle((int) (otherTx.getBeginTime() / scaleFactor-waveCanvas.getXOffset()), + Rectangle bb = new Rectangle((int) (otherTx.getBeginTime() / scaleFactor), waveCanvas.rulerHeight + painter.getVerticalOffset() + laneHeight * otherTx.getConcurrencyIndex(), (int) ((otherTx.getEndTime() - otherTx.getBeginTime()) / scaleFactor), laneHeight); @@ -115,7 +113,7 @@ public class ArrowPainter implements IPainter { } @Override - public void paintArea(GC gc, Rectangle area) { + public void paintArea(Projection proj, Rectangle clientRect) { Color fgColor = waveCanvas.colors[WaveformColors.REL_ARROW.ordinal()]; Color highliteColor = waveCanvas.colors[WaveformColors.REL_ARROW_HIGHLITE.ordinal()]; @@ -124,33 +122,30 @@ public class ArrowPainter implements IPainter { calculateGeometries(); } if(txRectangle == null) return; - int correctionValue = (int)(selectionOffset - waveCanvas.getXOffset()); + int correctionValue = (int)(selectionOffset); Rectangle correctedTargetRectangle = new Rectangle(txRectangle.x+correctionValue, txRectangle.y, txRectangle.width, txRectangle.height); for (LinkEntry entry : iRect) { Rectangle correctedRectangle = new Rectangle(entry.rectangle.x+correctionValue, entry.rectangle.y, entry.rectangle.width, entry.rectangle.height); - Point target = drawPath(gc, highlightType.equals(entry.relationType) ? highliteColor : fgColor, + Point target = drawPath(proj, highlightType.equals(entry.relationType) ? highliteColor : fgColor, correctedRectangle, correctedTargetRectangle); - drawArrow(gc, target); + drawArrow(proj, target); } for (LinkEntry entry : oRect) { Rectangle correctedRectangle = new Rectangle(entry.rectangle.x+correctionValue, entry.rectangle.y, entry.rectangle.width, entry.rectangle.height); - Point target = drawPath(gc, highlightType.equals(entry.relationType) ? highliteColor : fgColor, correctedTargetRectangle, + Point target = drawPath(proj, highlightType.equals(entry.relationType) ? highliteColor : fgColor, correctedTargetRectangle, correctedRectangle); - drawArrow(gc, target); + drawArrow(proj, target); } } - protected void drawArrow(GC gc, Point target) { - gc.drawLine(target.x - 8, target.y - 5, target.x, target.y); - gc.drawLine(target.x - 8, target.y + 5, target.x, target.y); + protected void drawArrow(Projection proj, Point target) { + proj.drawLine(target.x - 8, target.y - 5, target.x, target.y); + proj.drawLine(target.x - 8, target.y + 5, target.x, target.y); } - protected Point drawPath(GC gc, Color fgColor, Rectangle srcRectangle, Rectangle tgtRectangle) { - Point point1 = new Point(0, srcRectangle.y + srcRectangle.height / 2); - Point point2 = new Point(0, tgtRectangle.y + tgtRectangle.height / 2); - - point1.x = srcRectangle.x; - point2.x = tgtRectangle.x; + protected Point drawPath(Projection proj, Color fgColor, Rectangle srcRectangle, Rectangle tgtRectangle) { + Point point1 = proj.project(new Point(srcRectangle.x, srcRectangle.y + srcRectangle.height / 2)); + Point point2 = proj.project(new Point(tgtRectangle.x, tgtRectangle.y + tgtRectangle.height / 2)); if (point2.x > point1.x + srcRectangle.width) point1.x += srcRectangle.width; @@ -165,9 +160,9 @@ public class ArrowPainter implements IPainter { path.cubicTo(center.x + xCtrlOffset, center.y, point2.x - xCtrlOffset, point2.y, point2.x, point2.y); } else path.cubicTo(point1.x + xCtrlOffset, point1.y, point2.x - xCtrlOffset, point2.y, point2.x, point2.y); - gc.setAntialias(SWT.ON); - gc.setForeground(fgColor); - gc.drawPath(path); + proj.setAntialias(SWT.ON); + proj.setForeground(fgColor); + proj.getGC().drawPath(path); path.dispose(); return point2; } diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/CursorPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/CursorPainter.java index a23e8c2..4559d2d 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/CursorPainter.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/CursorPainter.java @@ -11,7 +11,6 @@ package com.minres.scviewer.database.swt.internal; import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Rectangle; import com.minres.scviewer.database.ui.ICursor; @@ -62,30 +61,30 @@ public class CursorPainter implements IPainter, ICursor { } - public void paintArea(GC gc, Rectangle area) { + public void paintArea(Projection proj, Rectangle clientRect) { + Rectangle area = proj.unProject(clientRect); if(this.waveCanvas.painterList.size()>0){ long scaleFactor=waveCanvas.getScaleFactor(); long beginPos = area.x; maxPosX = area.x + area.width; - maxValX = maxPosX + (int)waveCanvas.getXOffset(); + maxValX = maxPosX; // x position of marker in pixels on canvas int x = (int) (time/scaleFactor); // distance of marker from the top of Canvas' painting area int top = id<0?area.y:area.y+15; - Color drawColor=waveCanvas.colors[id<0?WaveformColors.CURSOR.ordinal():WaveformColors.MARKER.ordinal()]; Color dragColor = waveCanvas.colors[WaveformColors.CURSOR_DRAG.ordinal()]; Color textColor=waveCanvas.colors[id<0?WaveformColors.CURSOR_TEXT.ordinal():WaveformColors.MARKER_TEXT.ordinal()]; if(x>=beginPos && x<=maxValX){ - gc.setForeground(isDragging?dragColor:drawColor); - gc.drawLine(x-(int)waveCanvas.getXOffset(), top, x-(int)waveCanvas.getXOffset(), area.y+area.height); - gc.setBackground(drawColor); - gc.setForeground(textColor); + proj.setForeground(isDragging?dragColor:drawColor); + proj.drawLine(x, top, x, area.y+area.height); + proj.setBackground(drawColor); + proj.setForeground(textColor); Double dTime=new Double(time); - gc.drawText((dTime/waveCanvas.getScaleFactorPow10())+waveCanvas.getUnitStr(), x+1-(int)waveCanvas.getXOffset(), top); + proj.drawText((dTime/waveCanvas.getScaleFactorPow10())+waveCanvas.getUnitStr(), x+1, top); } } } diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/IPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/IPainter.java index 60d2992..d093f71 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/IPainter.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/IPainter.java @@ -10,11 +10,10 @@ *******************************************************************************/ package com.minres.scviewer.database.swt.internal; -import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Rectangle; public interface IPainter { - void paintArea(GC gc,Rectangle area); + void paintArea(Projection gc, Rectangle area); } \ No newline at end of file diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/Projection.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/Projection.java new file mode 100644 index 0000000..79c68c9 --- /dev/null +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/Projection.java @@ -0,0 +1,122 @@ +package com.minres.scviewer.database.swt.internal; + +import java.util.Arrays; + +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.graphics.Rectangle; + +public class Projection { + + private Point translation; + private GC gc; + + public Projection(GC gc) { + super(); + this.gc = gc; + translation=new Point(0, 0); + } + + void setTranslation(Point t) { + translation = t; + } + + void setGC(GC gc) { + this.gc=gc; + } + + Point getTranslation() { + return translation; + } + + Point project(Point p) { + return new Point(p.x+translation.x, p.y+translation.y); + } + + public Rectangle unProject(Rectangle r) { + return new Rectangle(r.x-translation.x, r.y-translation.y, r.width, r.height); + } + + public void setBackground(Color color) { + gc.setBackground(color); + } + public void setFillRule(int rule) { + gc.setFillRule(rule); + } + public void fillRectangle(Rectangle rect) { + gc.fillRectangle(rect.x+translation.x, rect.y+translation.y, rect.width, rect.height); + } + + public void setLineStyle(int style) { + gc.setLineStyle(style); + } + + public void setLineWidth(int width) { + gc.setLineWidth(width); + } + + public void setForeground(Color color) { + gc.setForeground(color); + } + + public void drawLine(int x1, int y1, int x2, int y2) { + gc.drawLine(x1+translation.x, y1+translation.y, x2+translation.x, y2+translation.y); + + } + + public GC getGC() { + return gc; + } + + public void drawRectangle(Rectangle rect) { + gc.drawRectangle(rect.x+translation.y, rect.y+translation.y, rect.width, rect.height); + } + + public void fillRoundRectangle(int x, int y, int width, int height, int arcWidth, int arcHeight) { + gc.fillRoundRectangle(x+translation.x, y+translation.y, width, height, arcWidth, arcHeight); + } + + public void drawRoundRectangle(int x, int y, int width, int height, int arcWidth, int arcHeight) { + gc.drawRoundRectangle(x+translation.x, y+translation.y, width, height, arcWidth, arcHeight); + } + + public void setAntialias(int antialias) { + gc.setAntialias(antialias); + } + + public void drawText(String string, int x, int y) { + gc.drawText(string, x+translation.x, y+translation.y); + } + + private int[] project(int[] points) { + int[] res = Arrays.copyOf(points, points.length); + for(int i=0; i maxPosX ? maxPosX : (int) ltmp; } - public void paintArea(GC gc, Rectangle area) { + public void paintArea(Projection proj, Rectangle area) { ISignal signal = trackEntry.getSignal(); if (trackEntry.selected) - gc.setBackground(this.waveCanvas.colors[WaveformColors.TRACK_BG_HIGHLITE.ordinal()]); + proj.setBackground(this.waveCanvas.colors[WaveformColors.TRACK_BG_HIGHLITE.ordinal()]); else - gc.setBackground(this.waveCanvas.colors[even ? WaveformColors.TRACK_BG_EVEN.ordinal() : WaveformColors.TRACK_BG_ODD.ordinal()]); - gc.setFillRule(SWT.FILL_EVEN_ODD); - gc.fillRectangle(area); + proj.setBackground(this.waveCanvas.colors[even ? WaveformColors.TRACK_BG_EVEN.ordinal() : WaveformColors.TRACK_BG_ODD.ordinal()]); + proj.setFillRule(SWT.FILL_EVEN_ODD); + proj.fillRectangle(area); long scaleFactor = this.waveCanvas.getScaleFactor(); long beginPos = area.x; - long beginTime = (beginPos + waveCanvas.getXOffset())*scaleFactor; + long beginTime = beginPos*scaleFactor; long endTime = beginTime + area.width*scaleFactor; Entry first = signal.getEvents().floorEntry(beginTime); @@ -106,18 +106,17 @@ public class SignalPainter extends TrackPainter { } else if (last == null) { last = signal.getEvents().lastEntry(); } - gc.setForeground(this.waveCanvas.colors[WaveformColors.LINE.ordinal()]); - gc.setLineStyle(SWT.LINE_SOLID); - gc.setLineWidth(1); + proj.setForeground(this.waveCanvas.colors[WaveformColors.LINE.ordinal()]); + proj.setLineStyle(SWT.LINE_SOLID); + proj.setLineWidth(1); NavigableMap entries = signal.getEvents().subMap(first.getKey(), false, last.getKey(), true); SignalChange left = new SignalChange(first); SignalChange right = new SignalChange(entries.size() > 0 ? entries.firstEntry() : first); maxPosX = area.x + area.width; - maxValX = maxPosX + (int)waveCanvas.getXOffset(); yOffsetT = this.waveCanvas.getTrackHeight() / 5 + area.y; yOffsetM = this.waveCanvas.getTrackHeight() / 2 + area.y; yOffsetB = 4 * this.waveCanvas.getTrackHeight() / 5 + area.y; - int xSigChangeBeginVal = Math.max(area.x + (int)waveCanvas.getXOffset(), (int) (left.time / this.waveCanvas.getScaleFactor())); + int xSigChangeBeginVal = Math.max(area.x, (int) (left.time / this.waveCanvas.getScaleFactor())); int xSigChangeBeginPos = area.x; int xSigChangeEndPos = Math.max(area.x, getXPosEnd(right.time)); @@ -138,9 +137,9 @@ public class SignalPainter extends TrackPainter { } - SignalStencil stencil = getStencil(gc, left, entries); + SignalStencil stencil = getStencil(proj.getGC(), left, entries); do { - stencil.draw(gc, area, left.value, right.value, xSigChangeBeginPos, xSigChangeEndPos, multiple); + stencil.draw(proj, area, left.value, right.value, xSigChangeBeginPos, xSigChangeEndPos, multiple); if (right.time >= endTime) break; left.assign(right); @@ -179,7 +178,7 @@ public class SignalPainter extends TrackPainter { private interface SignalStencil { - public void draw(GC gc, Rectangle area, Object left, Object right, int xBegin, int xEnd, boolean multiple); + public void draw(Projection proj, Rectangle area, Object left, Object right, int xBegin, int xEnd, boolean multiple); } private class MultiBitStencil implements SignalStencil { @@ -193,7 +192,7 @@ public class SignalPainter extends TrackPainter { tmpAwtFont = new java.awt.Font(fd.getName(), fd.getStyle(), height); } - public void draw(GC gc, Rectangle area, Object left, Object right, int xBegin, int xEnd, boolean multiple) { + public void draw(Projection proj, Rectangle area, Object left, Object right, int xBegin, int xEnd, boolean multiple) { Color colorBorder = waveCanvas.colors[WaveformColors.SIGNAL0.ordinal()]; BitVector last = (BitVector) left; if (last.getValue().toString().contains("X")) { @@ -211,9 +210,9 @@ public class SignalPainter extends TrackPainter { xEnd - 1, yOffsetB, xBegin + 1, yOffsetB }; - gc.setForeground(colorBorder); - gc.drawPolygon(points); - gc.setForeground(waveCanvas.colors[WaveformColors.SIGNAL_TEXT.ordinal()]); + proj.setForeground(colorBorder); + proj.drawPolygon(points); + proj.setForeground(waveCanvas.colors[WaveformColors.SIGNAL_TEXT.ordinal()]); //TODO: this code should be provided from a central location String label = null; switch(trackEntry.valueDisplay) { @@ -226,27 +225,23 @@ public class SignalPainter extends TrackPainter { default: label="h'"+last.toHexString(); } - Point bb = getBoxWidth(gc, label); + Point bb = new Point(DUMMY_PANEL.getFontMetrics(tmpAwtFont).stringWidth(label), height); if (xBegin < area.x) { xBegin = area.x; width = xEnd - xBegin; } if (width > (bb.x+1)) { - Rectangle old = gc.getClipping(); - gc.setClipping(xBegin + 3, yOffsetT, xEnd - xBegin - 5, yOffsetB - yOffsetT); - gc.drawText(label, xBegin + 3, yOffsetM - bb.y / 2 - 1); - gc.setClipping(old); + Rectangle old = proj.getClipping(); + proj.setClipping(xBegin + 3, yOffsetT, xEnd - xBegin - 5, yOffsetB - yOffsetT); + proj.drawText(label, xBegin + 3, yOffsetM - bb.y / 2 - 1); + proj.setClipping(old); } } else { - gc.setForeground(colorBorder); - gc.drawLine(xEnd, yOffsetT, xEnd, yOffsetB); + proj.setForeground(colorBorder); + proj.drawLine(xEnd, yOffsetT, xEnd, yOffsetB); } } - private Point getBoxWidth(GC gc, String label) { - return new Point(DUMMY_PANEL.getFontMetrics(tmpAwtFont).stringWidth(label), height); - } - } private class MultiBitStencilAnalog implements SignalStencil { @@ -277,25 +272,25 @@ public class SignalPainter extends TrackPainter { } - public void draw(GC gc, Rectangle area, Object left, Object right, int xBegin, int xEnd, boolean multiple) { + public void draw(Projection proj, Rectangle area, Object left, Object right, int xBegin, int xEnd, boolean multiple) { long leftVal = ((BitVector) left).toUnsignedValue(); long rightVal= ((BitVector) right).toUnsignedValue(); - gc.setForeground(waveCanvas.colors[WaveformColors.SIGNAL_REAL.ordinal()]); + proj.setForeground(waveCanvas.colors[WaveformColors.SIGNAL_REAL.ordinal()]); int yOffsetLeft = (int) ((leftVal-minVal) / range * (yOffsetB-yOffsetT)); int yOffsetRight = (int) ((rightVal-minVal) / range * (yOffsetB-yOffsetT)); if(continous) { if (xEnd > maxPosX) { - gc.drawLine(xBegin, yOffsetB-yOffsetLeft, maxPosX, yOffsetB-yOffsetRight); + proj.drawLine(xBegin, yOffsetB-yOffsetLeft, maxPosX, yOffsetB-yOffsetRight); } else { - gc.drawLine(xBegin, yOffsetB-yOffsetLeft, xEnd, yOffsetB-yOffsetRight); + proj.drawLine(xBegin, yOffsetB-yOffsetLeft, xEnd, yOffsetB-yOffsetRight); } } else { if (xEnd > maxPosX) { - gc.drawLine(xBegin, yOffsetB-yOffsetLeft, maxPosX, yOffsetB-yOffsetLeft); + proj.drawLine(xBegin, yOffsetB-yOffsetLeft, maxPosX, yOffsetB-yOffsetLeft); } else { - gc.drawLine(xBegin, yOffsetB-yOffsetLeft, xEnd, yOffsetB-yOffsetLeft); + proj.drawLine(xBegin, yOffsetB-yOffsetLeft, xEnd, yOffsetB-yOffsetLeft); if(yOffsetRight!=yOffsetLeft) { - gc.drawLine(xEnd, yOffsetB-yOffsetLeft, xEnd, yOffsetB-yOffsetRight); + proj.drawLine(xEnd, yOffsetB-yOffsetLeft, xEnd, yOffsetB-yOffsetRight); } } } @@ -303,12 +298,12 @@ public class SignalPainter extends TrackPainter { } private class SingleBitStencil implements SignalStencil { - public void draw(GC gc, Rectangle area, Object left, Object right, int xBegin, int xEnd, boolean multiple) { + public void draw(Projection proj, Rectangle area, Object left, Object right, int xBegin, int xEnd, boolean multiple) { if (multiple) { - gc.setForeground(waveCanvas.colors[WaveformColors.SIGNALU.ordinal()]); - gc.drawLine(xBegin, yOffsetT, xBegin, yOffsetB); + proj.setForeground(waveCanvas.colors[WaveformColors.SIGNALU.ordinal()]); + proj.drawLine(xBegin, yOffsetT, xBegin, yOffsetB); if(xEnd>xBegin) - gc.drawLine(xEnd, yOffsetT, xEnd, yOffsetB); + proj.drawLine(xEnd, yOffsetT, xEnd, yOffsetB); } else { Color color = waveCanvas.colors[WaveformColors.SIGNALX.ordinal()]; int yOffset = yOffsetM; @@ -326,11 +321,11 @@ public class SignalPainter extends TrackPainter { break; default: } - gc.setForeground(color); + proj.setForeground(color); if (xEnd > maxPosX) { - gc.drawLine(xBegin, yOffset, maxPosX, yOffset); + proj.drawLine(xBegin, yOffset, maxPosX, yOffset); } else { - gc.drawLine(xBegin, yOffset, xEnd, yOffset); + proj.drawLine(xBegin, yOffset, xEnd, yOffset); int yNext = yOffsetM; switch (((BitVector) right).getValue()[0]) { case '1': @@ -342,7 +337,7 @@ public class SignalPainter extends TrackPainter { default: } if (yOffset != yNext) - gc.drawLine(xEnd, yOffset, xEnd, yNext); + proj.drawLine(xEnd, yOffset, xEnd, yNext); } } } @@ -383,7 +378,7 @@ public class SignalPainter extends TrackPainter { } } - public void draw(GC gc, Rectangle area, Object left, Object right, int xBegin, int xEnd, boolean multiple) { + public void draw(Projection proj, Rectangle area, Object left, Object right, int xBegin, int xEnd, boolean multiple) { double leftVal = (Double) left; double rightVal= (Double) right; if(Double.isNaN(leftVal)) { @@ -396,31 +391,31 @@ public class SignalPainter extends TrackPainter { xEnd, yOffsetB, xBegin, yOffsetB }; - gc.setForeground(color); - gc.drawPolygon(points); - gc.setBackground(color); - gc.fillPolygon(points); + proj.setForeground(color); + proj.drawPolygon(points); + proj.setBackground(color); + proj.fillPolygon(points); } else { - gc.setForeground(color); - gc.drawLine(xEnd, yOffsetT, xEnd, yOffsetB); + proj.setForeground(color); + proj.drawLine(xEnd, yOffsetT, xEnd, yOffsetB); } } else { - gc.setForeground(waveCanvas.colors[WaveformColors.SIGNAL_REAL.ordinal()]); + proj.setForeground(waveCanvas.colors[WaveformColors.SIGNAL_REAL.ordinal()]); int yOffsetLeft = (int) ((leftVal-minVal) / range * (yOffsetB-yOffsetT)); int yOffsetRight = Double.isNaN(rightVal)?yOffsetLeft:(int) ((rightVal-minVal) / range * (yOffsetB-yOffsetT)); if(continous) { if (xEnd > maxPosX) { - gc.drawLine(xBegin, yOffsetB-yOffsetLeft, maxPosX, yOffsetB-yOffsetRight); + proj.drawLine(xBegin, yOffsetB-yOffsetLeft, maxPosX, yOffsetB-yOffsetRight); } else { - gc.drawLine(xBegin, yOffsetB-yOffsetLeft, xEnd, yOffsetB-yOffsetRight); + proj.drawLine(xBegin, yOffsetB-yOffsetLeft, xEnd, yOffsetB-yOffsetRight); } } else { if (xEnd > maxPosX) { - gc.drawLine(xBegin, yOffsetB-yOffsetLeft, maxPosX, yOffsetB-yOffsetLeft); + proj.drawLine(xBegin, yOffsetB-yOffsetLeft, maxPosX, yOffsetB-yOffsetLeft); } else { - gc.drawLine(xBegin, yOffsetB-yOffsetLeft, xEnd, yOffsetB-yOffsetLeft); + proj.drawLine(xBegin, yOffsetB-yOffsetLeft, xEnd, yOffsetB-yOffsetLeft); if(yOffsetRight!=yOffsetLeft) { - gc.drawLine(xEnd, yOffsetB-yOffsetLeft, xEnd, yOffsetB-yOffsetRight); + proj.drawLine(xEnd, yOffsetB-yOffsetLeft, xEnd, yOffsetB-yOffsetRight); } } } diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/StreamPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/StreamPainter.java index cad44fd..4d36c2b 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/StreamPainter.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/StreamPainter.java @@ -60,22 +60,22 @@ public class StreamPainter extends TrackPainter{ } @SuppressWarnings("unchecked") - public void paintArea(GC gc, Rectangle area) { + public void paintArea(Projection proj, Rectangle area) { if(stream.getEvents().size()==0) return; int trackHeight=trackEntry.height/stream.getMaxConcurrency(); txBase=trackHeight/5; txHeight=trackHeight*3/5; if(trackEntry.selected) { - gc.setBackground(this.waveCanvas.colors[WaveformColors.TRACK_BG_HIGHLITE.ordinal()]); + proj.setBackground(this.waveCanvas.colors[WaveformColors.TRACK_BG_HIGHLITE.ordinal()]); } else - gc.setBackground(this.waveCanvas.colors[even?WaveformColors.TRACK_BG_EVEN.ordinal():WaveformColors.TRACK_BG_ODD.ordinal()]); - gc.setFillRule(SWT.FILL_EVEN_ODD); - gc.fillRectangle(area); + proj.setBackground(this.waveCanvas.colors[even?WaveformColors.TRACK_BG_EVEN.ordinal():WaveformColors.TRACK_BG_ODD.ordinal()]); + proj.setFillRule(SWT.FILL_EVEN_ODD); + proj.fillRectangle(area); long scaleFactor = this.waveCanvas.getScaleFactor(); long beginPos = area.x; - long beginTime = (beginPos + waveCanvas.getXOffset())*scaleFactor; + long beginTime = beginPos*scaleFactor; //long endPos = beginPos + area.width; long endTime = beginTime + area.width*scaleFactor; @@ -83,21 +83,21 @@ public class StreamPainter extends TrackPainter{ Entry lastTx=stream.getEvents().ceilingEntry(endTime); if(firstTx==null) firstTx = stream.getEvents().firstEntry(); if(lastTx==null) lastTx=stream.getEvents().lastEntry(); - gc.setFillRule(SWT.FILL_EVEN_ODD); - gc.setLineStyle(SWT.LINE_SOLID); - gc.setLineWidth(1); - gc.setForeground(this.waveCanvas.colors[WaveformColors.LINE.ordinal()]); + proj.setFillRule(SWT.FILL_EVEN_ODD); + proj.setLineStyle(SWT.LINE_SOLID); + proj.setLineWidth(1); + proj.setForeground(this.waveCanvas.colors[WaveformColors.LINE.ordinal()]); for( int y1=area.y+trackHeight/2; y1)firstTx.getValue()) - drawTx(gc, area, txEvent.getTransaction(), false); + drawTx(proj, area, txEvent.getTransaction(), false); }else{ seenTx.clear(); NavigableMap entries = stream.getEvents().subMap(firstTx.getKey(), true, lastTx.getKey(), true); boolean highlighed=false; - gc.setForeground(this.waveCanvas.colors[WaveformColors.LINE.ordinal()]); + proj.setForeground(this.waveCanvas.colors[WaveformColors.LINE.ordinal()]); for(Entry entry: entries.entrySet()) for(ITxEvent txEvent:(Collection)entry.getValue()){ @@ -106,38 +106,38 @@ public class StreamPainter extends TrackPainter{ if(txEvent.getType()==ITxEvent.Type.END){ ITx tx = txEvent.getTransaction(); highlighed|=waveCanvas.currentSelection!=null && waveCanvas.currentSelection.equals(tx); - drawTx(gc, area, tx, false); + drawTx(proj, area, tx, false); seenTx.remove(tx); } } for(ITx tx:seenTx){ - drawTx(gc, area, tx, false); + drawTx(proj, area, tx, false); } if(highlighed){ - gc.setForeground(this.waveCanvas.colors[WaveformColors.LINE_HIGHLITE.ordinal()]); - drawTx(gc, area, waveCanvas.currentSelection, true); + proj.setForeground(this.waveCanvas.colors[WaveformColors.LINE_HIGHLITE.ordinal()]); + drawTx(proj, area, waveCanvas.currentSelection, true); } } } - protected void drawTx(GC gc, Rectangle area, ITx tx, boolean highlighted ) { + protected void drawTx(Projection proj, Rectangle area, ITx tx, boolean highlighted ) { // compute colors java.awt.Color[] fallbackColors = trackEntry.getColors(); java.awt.Color[] transColor = TrackEntry.computeColor( tx.getGenerator().getName(), fallbackColors[0], fallbackColors[1] ); - gc.setBackground( toSwtColor( gc, transColor[highlighted?1:0] ) ); + proj.setBackground( toSwtColor( proj.getGC(), transColor[highlighted?1:0] ) ); int offset = tx.getConcurrencyIndex()*this.waveCanvas.getTrackHeight(); Rectangle bb = new Rectangle( - (int)(tx.getBeginTime()/this.waveCanvas.getScaleFactor()-waveCanvas.getXOffset()), area.y+offset+txBase, + (int)(tx.getBeginTime()/this.waveCanvas.getScaleFactor()), area.y+offset+txBase, (int)((tx.getEndTime()-tx.getBeginTime())/this.waveCanvas.getScaleFactor()), txHeight); if(bb.x+bb.widtharea.x+area.width) return; if(bb.width==0){ - gc.drawLine(bb.x, bb.y, bb.x, bb.y+bb.height); + proj.drawLine(bb.x, bb.y, bb.x, bb.y+bb.height); } else if(bb.width<10){ - gc.fillRectangle(bb); - gc.drawRectangle(bb); + proj.fillRectangle(bb); + proj.drawRectangle(bb); } else { if(bb.x < area.x) { bb.width = bb.width-(area.x-bb.x)+5; @@ -149,8 +149,8 @@ public class StreamPainter extends TrackPainter{ bb_x2=area_x2+5; bb.width= bb_x2-bb.x; } - gc.fillRoundRectangle(bb.x, bb.y, bb.width, bb.height, 5, 5); - gc.drawRoundRectangle(bb.x, bb.y, bb.width, bb.height, 5, 5); + proj.fillRoundRectangle(bb.x, bb.y, bb.width, bb.height, 5, 5); + proj.drawRoundRectangle(bb.x, bb.y, bb.width, bb.height, 5, 5); } } diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/TrackAreaPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/TrackAreaPainter.java index ed7fc13..0820afd 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/TrackAreaPainter.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/TrackAreaPainter.java @@ -14,7 +14,6 @@ import java.util.Map.Entry; import java.util.TreeMap; import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Rectangle; import com.minres.scviewer.database.ui.WaveformColors; @@ -35,11 +34,11 @@ public class TrackAreaPainter implements IPainter { this.trackVerticalOffset= new TreeMap<>(); } - public void paintArea(GC gc, Rectangle a) { - Rectangle area = new Rectangle(a.x, a.y+waveCanvas.rulerHeight, a.width, a.height-waveCanvas.rulerHeight); - gc.setBackground(this.waveCanvas.colors[WaveformColors.TRACK_BG_EVEN.ordinal()]); - gc.setFillRule(SWT.FILL_EVEN_ODD); - gc.fillRectangle(area); + public void paintArea(Projection proj, Rectangle a) { + Rectangle area = proj.unProject(new Rectangle(a.x, a.y+waveCanvas.rulerHeight, a.width, a.height-waveCanvas.rulerHeight)); + proj.setBackground(this.waveCanvas.colors[WaveformColors.TRACK_BG_EVEN.ordinal()]); + proj.setFillRule(SWT.FILL_EVEN_ODD); + proj.fillRectangle(area); if(trackVerticalOffset.size()>0){ Integer firstKey=trackVerticalOffset.floorKey(area.y); if(firstKey==null) firstKey=trackVerticalOffset.firstKey(); @@ -49,12 +48,12 @@ public class TrackAreaPainter implements IPainter { subArea.y=firstKey; IWaveformPainter p = trackVerticalOffset.get(firstKey); subArea.height=p.getHeight(); - p.paintArea(gc, subArea); + p.paintArea(proj, subArea); }else{ for(Entry entry : trackVerticalOffset.subMap(firstKey, true, lastKey, true).entrySet()){ subArea.y=entry.getKey(); subArea.height=entry.getValue().getHeight(); - entry.getValue().paintArea(gc, subArea); + entry.getValue().paintArea(proj, subArea); } } } diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformCanvas.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformCanvas.java index dd29137..d65180a 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformCanvas.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformCanvas.java @@ -28,7 +28,6 @@ import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.graphics.Transform; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; @@ -45,7 +44,7 @@ import com.minres.scviewer.database.ui.IWaveformViewer; import com.minres.scviewer.database.ui.TrackEntry; import com.minres.scviewer.database.ui.WaveformColors; -public class WaveformCanvas extends Canvas{ +public class WaveformCanvas extends Canvas { Color[] colors = new Color[WaveformColors.values().length]; @@ -60,9 +59,7 @@ public class WaveformCanvas extends Canvas{ private long maxTime; protected Point origin; /* original size */ - - protected Transform transform; - + protected int rulerHeight=40; protected List painterList; @@ -89,7 +86,7 @@ public class WaveformCanvas extends Canvas{ * the style of this control. */ public WaveformCanvas(final Composite parent, int style) { - super(parent, style | SWT.DOUBLE_BUFFERED | SWT.NO_BACKGROUND | SWT.NO_REDRAW_RESIZE | SWT.V_SCROLL | SWT.H_SCROLL); + super(parent, style | SWT.DOUBLE_BUFFERED | SWT.NO_BACKGROUND | SWT.V_SCROLL | SWT.H_SCROLL); addControlListener(new ControlAdapter() { /* resize listener. */ public void controlResized(ControlEvent event) { syncScrollBars(); @@ -102,7 +99,6 @@ public class WaveformCanvas extends Canvas{ }); painterList = new LinkedList(); origin = new Point(0, 0); - transform = new Transform(getDisplay()); selectionListeners = new LinkedList<>(); cursorPainters= new ArrayList<>(); wave2painterMap=new HashMap<>(); @@ -150,10 +146,6 @@ public class WaveformCanvas extends Canvas{ } - public long getXOffset() { - return -origin.x; - } - public void addCursoPainter(CursorPainter cursorPainter){ painterList.add(cursorPainter); cursorPainters.add(cursorPainter); @@ -323,7 +315,6 @@ public class WaveformCanvas extends Canvas{ * Dispose the garbage here */ public void dispose() { - transform.dispose(); for (WaveformColors c : WaveformColors.values()) colors[c.ordinal()].dispose(); super.dispose(); @@ -402,24 +393,16 @@ public class WaveformCanvas extends Canvas{ vertical.setSelection(-origin.y); redraw(); fireSelectionEvent(); - } /* Paint function */ private void paint(GC gc) { Rectangle clientRect = getClientArea(); /* Canvas' painting area */ -// clientRect.x = -origin.x; - clientRect.y = -origin.y; - // reset the transform - transform.identity(); - // shift the content - // DO NOT SHIFT HORIZONTALLY, the range is WAY TOO BIG for float!!! - transform.translate(0, origin.y); - gc.setTransform(transform); - gc.setClipping(clientRect); + Projection p = new Projection(gc); + p.setTranslation(origin); if (painterList.size() > 0 ) { for (IPainter painter : painterList) - painter.paintArea(gc, clientRect); + painter.paintArea(p, clientRect); } else { gc.fillRectangle(clientRect); initScrollBars(); diff --git a/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF b/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF index c96729f..a8da3e0 100644 --- a/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF +++ b/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Bundle-SymbolicName: com.minres.scviewer.e4.application;singleton:=true -Bundle-Version: 2.6.0.qualifier +Bundle-Version: 2.6.1.qualifier Bundle-Vendor: %Bundle-Vendor Require-Bundle: javax.inject;bundle-version="1.0.0", org.eclipse.core.runtime;bundle-version="3.11.1", @@ -26,12 +26,10 @@ Require-Bundle: javax.inject;bundle-version="1.0.0", org.eclipse.equinox.preferences, org.eclipse.core.expressions, org.eclipse.e4.core.commands;bundle-version="0.11.0", - org.eclipse.e4.ui.workbench.addons.swt, com.opcoach.e4.preferences, org.eclipse.e4.core.di.extensions, org.eclipse.e4.ui.css.swt.theme;bundle-version="0.10.0", - org.eclipse.core.resources;bundle-version="3.13.0", - com.opcoach.e4.preferences.mainmenu;bundle-version="1.2.0" + org.eclipse.core.resources;bundle-version="3.13.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Import-Package: com.minres.scviewer.database, javax.inject;version="1.0.0" diff --git a/plugins/com.minres.scviewer.e4.application/plugin.xml b/plugins/com.minres.scviewer.e4.application/plugin.xml index f585ee3..236f625 100644 --- a/plugins/com.minres.scviewer.e4.application/plugin.xml +++ b/plugins/com.minres.scviewer.e4.application/plugin.xml @@ -84,12 +84,5 @@ category="com.minres.scviewer.e4.application.preferences.scviewer"> - - - - diff --git a/plugins/com.minres.scviewer.e4.application/pom.xml b/plugins/com.minres.scviewer.e4.application/pom.xml index 8510b31..158788b 100644 --- a/plugins/com.minres.scviewer.e4.application/pom.xml +++ b/plugins/com.minres.scviewer.e4.application/pom.xml @@ -1,7 +1,7 @@ 4.0.0 com.minres.scviewer.e4.application - 2.6.0-SNAPSHOT + 2.6.1-SNAPSHOT com.minres.scviewer com.minres.scviewer.parent diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/EnableHover.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/EnableHover.java index 2990c28..f5494a8 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/EnableHover.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/EnableHover.java @@ -4,45 +4,43 @@ package com.minres.scviewer.e4.application.handlers; import java.util.LinkedList; import java.util.List; -import javax.annotation.PostConstruct; import javax.inject.Inject; -import org.eclipse.core.runtime.preferences.ConfigurationScope; -import org.eclipse.e4.core.contexts.Active; +import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.core.di.annotations.Optional; +import org.eclipse.e4.core.di.extensions.Preference; import org.eclipse.e4.ui.model.application.MApplication; -import org.eclipse.e4.ui.model.application.ui.basic.MPart; -import org.eclipse.e4.ui.model.application.ui.basic.MWindow; import org.eclipse.e4.ui.model.application.ui.menu.MHandledItem; import org.eclipse.e4.ui.workbench.modeling.EModelService; -import org.eclipse.jface.preference.IPreferenceStore; +import org.osgi.service.prefs.BackingStoreException; import com.minres.scviewer.e4.application.preferences.PreferenceConstants; -import com.opcoach.e4.preferences.ScopedPreferenceStore; +@SuppressWarnings("restriction") public class EnableHover { static final String TAG_NAME = "EnableHover"; //$NON-NLS-1$ @Inject MApplication application; - @PostConstruct - public void initialize(EModelService modelService) { + @Inject + @Optional + public void reactOnShowHoverChange(EModelService modelService, @Preference(value = PreferenceConstants.SHOW_HOVER) Boolean hover) { List tags = new LinkedList<>(); tags.add(TAG_NAME); List elements = modelService.findElements(application, null, MHandledItem.class, tags ); - // cover initialization stuff, sync it with code - IPreferenceStore store = new ScopedPreferenceStore(ConfigurationScope.INSTANCE, PreferenceConstants.PREFERENCES_SCOPE); - boolean state = store.getBoolean(PreferenceConstants.SHOW_HOVER); for( MHandledItem hi : elements ){ - hi.setSelected(state); + hi.setSelected(hover); } } @Execute - public void execute(@Active MPart part, @Active MWindow window, MHandledItem handledItem, EModelService modelService ) { - IPreferenceStore store = new ScopedPreferenceStore(ConfigurationScope.INSTANCE, PreferenceConstants.PREFERENCES_SCOPE); - store.setValue(PreferenceConstants.SHOW_HOVER, handledItem.isSelected()); + public void execute(MHandledItem handledItem, @Preference(nodePath = PreferenceConstants.PREFERENCES_SCOPE) IEclipsePreferences prefs ) { + try { + prefs.putBoolean(PreferenceConstants.SHOW_HOVER, handledItem.isSelected()); + prefs.flush(); + } catch (BackingStoreException e) {} } } \ No newline at end of file diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/StatusLineContributionItem.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/StatusLineContributionItem.java index 4b40081..9f19cb2 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/StatusLineContributionItem.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/StatusLineContributionItem.java @@ -13,7 +13,6 @@ import org.eclipse.swt.widgets.Label; import org.eclipse.jface.action.ContributionItem; import org.eclipse.jface.action.IAction; -import org.eclipse.jface.action.LegacyActionTools; import org.eclipse.jface.action.StatusLineLayoutData; import org.eclipse.jface.resource.JFaceColors; diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/WaveStatusBarControl.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/WaveStatusBarControl.java index 767d22e..458860a 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/WaveStatusBarControl.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/WaveStatusBarControl.java @@ -18,19 +18,8 @@ import org.eclipse.e4.ui.di.UIEventTopic; import org.eclipse.e4.ui.di.UISynchronize; import org.eclipse.e4.ui.services.IServiceConstants; import org.eclipse.e4.ui.workbench.modeling.EModelService; -import org.eclipse.jface.action.ContributionItem; import org.eclipse.jface.action.StatusLineManager; import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.CLabel; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.FontData; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; - import com.minres.scviewer.e4.application.Messages; /** diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionDetails.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionDetails.java index 17bf32f..d8f1f7e 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionDetails.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionDetails.java @@ -18,7 +18,6 @@ import java.util.Map; import java.util.Objects; import java.util.TreeMap; import java.util.Vector; -import java.util.function.Function; import java.util.regex.PatternSyntaxException; import java.util.stream.Collectors; @@ -38,7 +37,6 @@ import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider; import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.IElementComparer; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeContentProvider; @@ -152,15 +150,11 @@ public class TransactionDetails { @Override public void treeCollapsed(TreeExpansionEvent event) { - Object o = event.getElement(); - TreePath[] paths = treeViewer.getExpandedTreePaths(); treeViewer.getSelection(); } @Override public void treeExpanded(TreeExpansionEvent event) { - Object o = event.getElement(); - TreePath[] paths = treeViewer.getExpandedTreePaths(); treeViewer.getSelection(); } diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java index 81cb383..752a352 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java @@ -31,17 +31,18 @@ import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.inject.Named; -import org.eclipse.core.internal.preferences.InstancePreferences; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobGroup; -import org.eclipse.core.runtime.preferences.ConfigurationScope; +import org.eclipse.core.runtime.preferences.DefaultScope; +import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener; import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent; import org.eclipse.e4.core.di.annotations.Optional; +import org.eclipse.e4.core.di.extensions.Preference; import org.eclipse.e4.core.services.events.IEventBroker; import org.eclipse.e4.ui.di.Focus; import org.eclipse.e4.ui.di.PersistState; @@ -52,9 +53,7 @@ import org.eclipse.e4.ui.services.EMenuService; import org.eclipse.e4.ui.workbench.modeling.EPartService; import org.eclipse.e4.ui.workbench.modeling.ESelectionService; import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.StringConverter; -import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; @@ -80,7 +79,7 @@ import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Widget; -import org.osgi.service.prefs.BackingStoreException; +import org.osgi.service.prefs.Preferences; import com.minres.scviewer.database.DataType; import com.minres.scviewer.database.ITx; @@ -108,7 +107,6 @@ import com.minres.scviewer.e4.application.internal.util.FileMonitor; import com.minres.scviewer.e4.application.internal.util.IFileChangeListener; import com.minres.scviewer.e4.application.internal.util.IModificationChecker; import com.minres.scviewer.e4.application.preferences.PreferenceConstants; -import com.opcoach.e4.preferences.ScopedPreferenceStore; /** * The Class WaveformViewerPart. @@ -190,7 +188,7 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis @Inject EPartService ePartService; - IPreferenceStore store = new ScopedPreferenceStore(ConfigurationScope.INSTANCE, PreferenceConstants.PREFERENCES_SCOPE); + IEclipsePreferences store = null; @Inject @Optional DesignBrowser designBrowser; @@ -207,7 +205,7 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis private Composite myParent; /** The files to load. */ - ArrayList filesToLoad; + ArrayList filesToLoad = new ArrayList<>(); /** The persisted state. */ Map persistedState; @@ -227,6 +225,8 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis /** The file checker. */ IModificationChecker fileChecker; + private Boolean showHover; + /** * Creates the composite. * @@ -235,11 +235,13 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis * @param dbFactory the db factory */ @PostConstruct - public void createComposite(MPart part, Composite parent, IWaveformDbFactory dbFactory) { + public void createComposite(MPart part, Composite parent, IWaveformDbFactory dbFactory, @Preference(nodePath = PreferenceConstants.PREFERENCES_SCOPE) IEclipsePreferences prefs, @Preference(value = PreferenceConstants.SHOW_HOVER) Boolean hover) { disposeListenerNumber += 1; myPart = part; myParent = parent; + store=prefs; + showHover=hover; database = dbFactory.getDatabase(); database.addPropertyChangeListener(new PropertyChangeListener() { @Override @@ -256,7 +258,7 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis }); waveformPane = factory.createPanel(parent); waveformPane.setMaxTime(0); - + setupColors(); //set selection to empty selection when opening a new waveformPane selectionService.setSelection(new StructuredSelection()); @@ -344,8 +346,7 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis }); zoomLevel = waveformPane.getZoomLevels(); - setupColors(); - checkForUpdates = store.getBoolean(PreferenceConstants.DATABASE_RELOAD); + checkForUpdates = store.getBoolean(PreferenceConstants.DATABASE_RELOAD, true); filesToLoad = new ArrayList(); persistedState = part.getPersistedState(); Integer files = persistedState.containsKey(DATABASE_FILE + "S") //$NON-NLS-1$ @@ -374,23 +375,6 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis } } }); - store.addPropertyChangeListener(new IPropertyChangeListener() { - @Override - public void propertyChange(org.eclipse.jface.util.PropertyChangeEvent event) { - if (PreferenceConstants.DATABASE_RELOAD.equals(event.getProperty())) { - checkForUpdates = (Boolean)event.getNewValue(); - fileChecker = null; - if (checkForUpdates) - fileChecker = fileMonitor.addFileChangeListener(WaveformViewer.this, filesToLoad, - FILE_CHECK_INTERVAL); - else - fileMonitor.removeFileChangeListener(WaveformViewer.this); - } else if (!PreferenceConstants.SHOW_HOVER.equals(event.getProperty())){ - setupColors(); - } - } - }); - waveformPane.addDisposeListener(this); waveformPane.getWaveformControl().setData(Constants.HELP_PROVIDER_TAG, new ToolTipHelpTextProvider() { @@ -402,7 +386,7 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis waveformPane.getWaveformControl().setData(Constants.CONTENT_PROVIDER_TAG, new ToolTipContentProvider() { @Override public boolean createContent(Composite parent, Point pt) { - if(!store.getBoolean(PreferenceConstants.SHOW_HOVER)) return false; + if(!showHover) return false; List res = waveformPane.getElementsAt(pt); if(res.size()>0) if(res.get(0) instanceof ITx) { @@ -472,8 +456,6 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis final Font font = new Font(Display.getCurrent(), "Terminal", 10, SWT.NORMAL); final Label label = new Label(parent, SWT.NONE); - //label.setForeground(display.getSystemColor(SWT.COLOR_INFO_FOREGROUND)); - //label.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND)); label.setText(te.waveform.getFullName()); label.setFont(font); GridData labelGridData = new GridData(); @@ -487,35 +469,49 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis }); } + @Inject + @Optional + public void reactOnPrefsChange(@Preference(nodePath = PreferenceConstants.PREFERENCES_SCOPE) IEclipsePreferences prefs) { + prefs.addPreferenceChangeListener(this); + + } + + @Inject + @Optional + public void reactOnShowHoverChange(@Preference(value = PreferenceConstants.SHOW_HOVER) Boolean hover) { + showHover=hover; + } + + @Inject + @Optional + public void reactOnReloadDatabaseChange(@Preference(value = PreferenceConstants.DATABASE_RELOAD) Boolean checkForUpdates) { + if (checkForUpdates) { + fileChecker = fileMonitor.addFileChangeListener(WaveformViewer.this, filesToLoad, FILE_CHECK_INTERVAL); + } else { + fileMonitor.removeFileChangeListener(WaveformViewer.this); + fileChecker = null; + } + } + /* (non-Javadoc) * @see org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener#preferenceChange(org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent) */ @Override public void preferenceChange(PreferenceChangeEvent event) { - InstancePreferences pref = (InstancePreferences)event.getSource(); - if (PreferenceConstants.DATABASE_RELOAD.equals(event.getKey())) { - checkForUpdates = pref.getBoolean(PreferenceConstants.DATABASE_RELOAD, true); - fileChecker = null; - if (checkForUpdates) - fileChecker = fileMonitor.addFileChangeListener(WaveformViewer.this, filesToLoad, - FILE_CHECK_INTERVAL); - else - fileMonitor.removeFileChangeListener(this); - } else if (!PreferenceConstants.SHOW_HOVER.equals(event.getKey())){ + if (!PreferenceConstants.DATABASE_RELOAD.equals(event.getKey()) && !PreferenceConstants.SHOW_HOVER.equals(event.getKey())){ setupColors(); } - try { - pref.flush(); - } catch (BackingStoreException e) { } } /** * Setup colors. */ protected void setupColors() { + Preferences defaultPrefs= store.parent().parent().node("/"+DefaultScope.SCOPE+"/"+PreferenceConstants.PREFERENCES_SCOPE); HashMap colorPref = new HashMap<>(); for (WaveformColors c : WaveformColors.values()) { - String prefValue = store.getString(c.name() + "_COLOR"); //$NON-NLS-1$ + String key = c.name() + "_COLOR"; + String prefValue = store.get(key, defaultPrefs.get(key, "")); //$NON-NLS-1$ RGB rgb = StringConverter.asRGB(prefValue); colorPref.put(c, rgb); } diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/preferences/DefaultValuesInitializer.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/preferences/DefaultValuesInitializer.java index ca89128..71f299c 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/preferences/DefaultValuesInitializer.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/preferences/DefaultValuesInitializer.java @@ -12,14 +12,14 @@ package com.minres.scviewer.e4.application.preferences; import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; import org.eclipse.core.runtime.preferences.DefaultScope; -import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.jface.resource.StringConverter; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.wb.swt.SWTResourceManager; +import org.osgi.framework.FrameworkUtil; import com.minres.scviewer.database.ui.WaveformColors; -import com.opcoach.e4.preferences.ScopedPreferenceStore; /** * The Class DefaultValuesInitializer. @@ -27,7 +27,7 @@ import com.opcoach.e4.preferences.ScopedPreferenceStore; public class DefaultValuesInitializer extends AbstractPreferenceInitializer { /** The default colors. */ - public final Color[] colors = new Color[WaveformColors.values().length]; + public static final Color[] colors = new Color[WaveformColors.values().length]; /** * Instantiates a new default values initializer. @@ -64,21 +64,12 @@ public class DefaultValuesInitializer extends AbstractPreferenceInitializer { */ @Override public void initializeDefaultPreferences() { -// IEclipsePreferences node = DefaultScope.INSTANCE.getNode(PreferenceConstants.PREFERENCES_SCOPE); -// if (node != null) -// { -// node.putBoolean(PreferenceConstants.DATABASE_RELOAD, true); -// node.putBoolean(PreferenceConstants.SHOW_HOVER, true); -// for (WaveformColors c : WaveformColors.values()) { -// node.put(c.name()+"_COLOR", StringConverter.asString(colors[c.ordinal()].getRGB())); //$NON-NLS-1$ -// } -// } - IPreferenceStore store = new ScopedPreferenceStore(DefaultScope.INSTANCE, PreferenceConstants.PREFERENCES_SCOPE); - - store.setDefault(PreferenceConstants.DATABASE_RELOAD, true); - store.setDefault(PreferenceConstants.SHOW_HOVER, true); + IEclipsePreferences store = DefaultScope.INSTANCE.getNode(FrameworkUtil.getBundle(getClass()).getSymbolicName()); + + store.putBoolean(PreferenceConstants.DATABASE_RELOAD, true); + store.putBoolean(PreferenceConstants.SHOW_HOVER, true); for (WaveformColors c : WaveformColors.values()) { - store.setDefault(c.name()+"_COLOR", StringConverter.asString(colors[c.ordinal()].getRGB())); //$NON-NLS-1$ + store.put(c.name()+"_COLOR", StringConverter.asString(colors[c.ordinal()].getRGB())); //$NON-NLS-1$ } } diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/preferences/PreferencesStoreProvider.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/preferences/PreferencesStoreProvider.java deleted file mode 100644 index ad4e320..0000000 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/preferences/PreferencesStoreProvider.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.minres.scviewer.e4.application.preferences; -import org.eclipse.core.runtime.preferences.ConfigurationScope; -import org.eclipse.jface.preference.IPreferenceStore; - -import com.opcoach.e4.preferences.IPreferenceStoreProvider; -import com.opcoach.e4.preferences.ScopedPreferenceStore; - -public class PreferencesStoreProvider implements IPreferenceStoreProvider{ - - public PreferencesStoreProvider(){ - } - - @Override - public IPreferenceStore getPreferenceStore() { - return new ScopedPreferenceStore(ConfigurationScope.INSTANCE, PreferenceConstants.PREFERENCES_SCOPE); - } - -} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 3943f88..0130034 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,7 @@ features/com.minres.scviewer.database.feature features/com.minres.scviewer.ui.feature features/com.minres.scviewer.feature + features/com.minres.scviewer.e4.platform.feature features/com.minres.scviewer.e4.feature p2repositories//com.minres.scviewer.updateSite com.minres.scviewer.e4.product @@ -39,7 +40,7 @@ ${tycho-version} true - +