add zoom levels
This commit is contained in:
		| @@ -5,8 +5,10 @@ import java.text.DecimalFormat; | |||||||
| public class Constants { | public class Constants { | ||||||
|  |  | ||||||
| 	public static final String[] UNIT_STRING={"fs", "ps", "ns", "us", "ms"};//, "s"}; | 	public static final String[] UNIT_STRING={"fs", "ps", "ns", "us", "ms"};//, "s"}; | ||||||
|  | 	public static final long[]   UNIT_MULTIPLIER={1, 1000, 1000*1000, 1000*1000*1000, 1000*1000*1000*1000, 1000*1000*1000*1000*1000 }; | ||||||
|  |  | ||||||
|     public static final int[] UNIT_MULTIPLIER={1, 3, 10, 30, 100, 300}; |     //public static final int[] UNIT_MULTIPLIER={1, 3, 10, 30, 100, 300}; | ||||||
|  |     public static final long[] SCALE_MULTIPLIER={1, 2, 5, 10, 20, 50, 100, 200, 500}; | ||||||
|  |  | ||||||
| 	public static final String CONTENT_PROVIDER_TAG = "TOOLTIP_CONTENT_PROVIDER"; | 	public static final String CONTENT_PROVIDER_TAG = "TOOLTIP_CONTENT_PROVIDER"; | ||||||
| 	public static final String HELP_PROVIDER_TAG = "TOOLTIP_HELP_PROVIDER"; | 	public static final String HELP_PROVIDER_TAG = "TOOLTIP_HELP_PROVIDER"; | ||||||
| @@ -17,14 +19,18 @@ public class Constants { | |||||||
| 	public static final DecimalFormat TIME_FORMAT_US = new DecimalFormat("#.0#####");  | 	public static final DecimalFormat TIME_FORMAT_US = new DecimalFormat("#.0#####");  | ||||||
| 	public static final DecimalFormat TIME_FORMAT_MS = new DecimalFormat("#.0#####");  | 	public static final DecimalFormat TIME_FORMAT_MS = new DecimalFormat("#.0#####");  | ||||||
| 	 | 	 | ||||||
| 	public static final DecimalFormat[] TIME_FORMAT = { |  | ||||||
| 			TIME_FORMAT_FS, TIME_FORMAT_FS, TIME_FORMAT_FS, TIME_FORMAT_FS, TIME_FORMAT_FS, TIME_FORMAT_FS, |  | ||||||
| 			TIME_FORMAT_PS, TIME_FORMAT_PS, TIME_FORMAT_PS, TIME_FORMAT_PS, TIME_FORMAT_PS, TIME_FORMAT_PS, |  | ||||||
| 			TIME_FORMAT_NS, TIME_FORMAT_NS, TIME_FORMAT_NS, TIME_FORMAT_NS, TIME_FORMAT_NS, TIME_FORMAT_NS, |  | ||||||
| 			TIME_FORMAT_US, TIME_FORMAT_US, TIME_FORMAT_US, TIME_FORMAT_US, TIME_FORMAT_US, TIME_FORMAT_US, |  | ||||||
| 			TIME_FORMAT_MS, TIME_FORMAT_MS, TIME_FORMAT_MS, TIME_FORMAT_MS, TIME_FORMAT_MS, TIME_FORMAT_MS, |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
|  | 	public static  DecimalFormat getTimeFormatForLevel(int level) { | ||||||
|  | 		switch(level/SCALE_MULTIPLIER.length) { | ||||||
|  | 		case 0:	return TIME_FORMAT_FS; | ||||||
|  | 		case 1:	return TIME_FORMAT_PS; | ||||||
|  | 		case 2:	return TIME_FORMAT_NS; | ||||||
|  | 		case 3:	return TIME_FORMAT_US; | ||||||
|  | 		case 4:	return TIME_FORMAT_MS; | ||||||
|  | 		default: | ||||||
|  | 			return TIME_FORMAT_FS; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
| 	private Constants() {} | 	private Constants() {} | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -24,7 +24,6 @@ import org.eclipse.swt.graphics.Rectangle; | |||||||
| import org.eclipse.swt.widgets.Display; | import org.eclipse.swt.widgets.Display; | ||||||
|  |  | ||||||
| import com.minres.scviewer.database.IEvent; | import com.minres.scviewer.database.IEvent; | ||||||
| import com.minres.scviewer.database.IHierNode; |  | ||||||
| import com.minres.scviewer.database.IWaveform; | import com.minres.scviewer.database.IWaveform; | ||||||
| import com.minres.scviewer.database.RelationType; | import com.minres.scviewer.database.RelationType; | ||||||
| import com.minres.scviewer.database.tx.ITx; | import com.minres.scviewer.database.tx.ITx; | ||||||
|   | |||||||
| @@ -85,7 +85,7 @@ public class CursorPainter implements IPainter, ICursor { | |||||||
| 				proj.setBackground(drawColor); | 				proj.setBackground(drawColor); | ||||||
| 				proj.setForeground(textColor); | 				proj.setForeground(textColor); | ||||||
| 				double dTime=time; | 				double dTime=time; | ||||||
| 				proj.drawText(Constants.TIME_FORMAT[waveCanvas.getZoomLevel()].format(dTime/waveCanvas.getScaleFactorPow10())+waveCanvas.getUnitStr(), x+1, top); | 				proj.drawText(Constants.getTimeFormatForLevel(waveCanvas.getZoomLevel()).format(dTime/waveCanvas.getScaleFactorPow10())+waveCanvas.getUnitStr(), x+1, top); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	}	 | 	}	 | ||||||
|   | |||||||
| @@ -10,8 +10,6 @@ | |||||||
|  *******************************************************************************/ |  *******************************************************************************/ | ||||||
| package com.minres.scviewer.database.ui.swt.internal; | package com.minres.scviewer.database.ui.swt.internal; | ||||||
|  |  | ||||||
| import java.text.DecimalFormat; |  | ||||||
|  |  | ||||||
| import org.eclipse.swt.SWT; | import org.eclipse.swt.SWT; | ||||||
| import org.eclipse.swt.graphics.Color; | import org.eclipse.swt.graphics.Color; | ||||||
| import org.eclipse.swt.graphics.GC; | import org.eclipse.swt.graphics.GC; | ||||||
| @@ -40,7 +38,7 @@ public class RulerPainter implements IPainter { | |||||||
|     	if(headerBgColor.isDisposed()) |     	if(headerBgColor.isDisposed()) | ||||||
|     		headerBgColor=SWTResourceManager.getColor(255,255,255); |     		headerBgColor=SWTResourceManager.getColor(255,255,255); | ||||||
|         String unit=waveCanvas.getUnitStr(); |         String unit=waveCanvas.getUnitStr(); | ||||||
|         int unitMultiplier=waveCanvas.getUnitMultiplier(); |         long unitMultiplier=waveCanvas.getUnitMultiplier(); | ||||||
|         long scaleFactor=waveCanvas.getScaleFactor(); |         long scaleFactor=waveCanvas.getScaleFactor(); | ||||||
|  |  | ||||||
|         long startPos=area.x*scaleFactor;  |         long startPos=area.x*scaleFactor;  | ||||||
| @@ -69,7 +67,7 @@ public class RulerPainter implements IPainter { | |||||||
|         boolean allMarker=true; |         boolean allMarker=true; | ||||||
|         for (long pos = startMinorIncrPos, tick = startMinorIncrVal; pos < endPos; pos+= rulerTickMinor, tick += rulerTickMinor) { |         for (long pos = startMinorIncrPos, tick = startMinorIncrVal; pos < endPos; pos+= rulerTickMinor, tick += rulerTickMinor) { | ||||||
|             if ((tick % rulerTickMajor) == 0) { |             if ((tick % rulerTickMajor) == 0) { | ||||||
|             	String text = Constants.TIME_FORMAT[waveCanvas.getZoomLevel()].format(tick/scaleFactor*unitMultiplier); |             	String text = Constants.getTimeFormatForLevel(waveCanvas.getZoomLevel()).format(tick/scaleFactor*unitMultiplier); | ||||||
|             	if(text.length()>8) allMarker=false; |             	if(text.length()>8) allMarker=false; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -79,7 +77,7 @@ public class RulerPainter implements IPainter { | |||||||
|             long x0Val = tick/scaleFactor; |             long x0Val = tick/scaleFactor; | ||||||
|             if ((tick % rulerTickMajor) == 0) { |             if ((tick % rulerTickMajor) == 0) { | ||||||
|             	if(allMarker || drawText) |             	if(allMarker || drawText) | ||||||
|             		gc.drawText(Constants.TIME_FORMAT[waveCanvas.getZoomLevel()].format(x0Val*unitMultiplier)+unit, x0Pos, area.y+textY); |             		gc.drawText(Constants.getTimeFormatForLevel(waveCanvas.getZoomLevel()).format(x0Val*unitMultiplier)+unit, x0Pos, area.y+textY); | ||||||
|                 gc.drawLine(x0Pos, area.y+majorTickY, x0Pos,area.y+ bottom); |                 gc.drawLine(x0Pos, area.y+majorTickY, x0Pos,area.y+ bottom); | ||||||
|                 drawText=!drawText; |                 drawText=!drawText; | ||||||
|             } else { |             } else { | ||||||
|   | |||||||
| @@ -170,7 +170,7 @@ public class WaveformCanvas extends Canvas { | |||||||
|     } |     } | ||||||
|      |      | ||||||
|     public int getMaxZoomLevel(){ |     public int getMaxZoomLevel(){ | ||||||
|     	return Constants.UNIT_MULTIPLIER.length*Constants.UNIT_STRING.length-1; |     	return Constants.SCALE_MULTIPLIER.length*Constants.UNIT_STRING.length-1; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void setZoomLevel(int level) { |     public void setZoomLevel(int level) { | ||||||
| @@ -190,9 +190,10 @@ public class WaveformCanvas extends Canvas { | |||||||
| 	    	if(level<0) level = 0; | 	    	if(level<0) level = 0; | ||||||
|     	} |     	} | ||||||
|     	//FIXME: keep center if zoom-out and cursor is not in view |     	//FIXME: keep center if zoom-out and cursor is not in view | ||||||
|     	if(level<Constants.UNIT_MULTIPLIER.length*Constants.UNIT_STRING.length){ |     	if(level<Constants.SCALE_MULTIPLIER.length*Constants.UNIT_STRING.length){ | ||||||
|     		this.scaleFactor = (long) Math.pow(10, level>>1); |     		int scale = level%Constants.SCALE_MULTIPLIER.length; | ||||||
|     		if(level%2==1) this.scaleFactor*=3; |     		int unit = level/Constants.SCALE_MULTIPLIER.length; | ||||||
|  |     		this.scaleFactor = Constants.UNIT_MULTIPLIER[unit]*Constants.SCALE_MULTIPLIER[scale]; | ||||||
|     		ITx tx = arrowPainter.getTx(); |     		ITx tx = arrowPainter.getTx(); | ||||||
|     		arrowPainter.setTx(null); |     		arrowPainter.setTx(null); | ||||||
|     		/* |     		/* | ||||||
| @@ -223,14 +224,13 @@ public class WaveformCanvas extends Canvas { | |||||||
| 		Rectangle clientArea = getClientArea(); | 		Rectangle clientArea = getClientArea(); | ||||||
| 		long clientAreaWidth = clientArea.width; | 		long clientAreaWidth = clientArea.width; | ||||||
| 		//try to find existing zoomlevel where scaleFactor*clientAreaWidth >= maxTime, if one is found set it as new zoomlevel | 		//try to find existing zoomlevel where scaleFactor*clientAreaWidth >= maxTime, if one is found set it as new zoomlevel | ||||||
| 		final long[] UNIT_STRING_MULT={1, 1000, 1000*1000, 1000*1000*1000, 1000*1000*1000*1000, 1000*1000*1000*1000*1000 }; | 		for(int unitIdx=0; unitIdx<Constants.UNIT_STRING.length; unitIdx++) { | ||||||
| 		for(int magnitude=0; magnitude<Constants.UNIT_STRING.length; magnitude++) { | 			long magnitudeMultiplier = Constants.UNIT_MULTIPLIER[unitIdx]; | ||||||
| 			long magnitudeMultiplier = UNIT_STRING_MULT[magnitude]; | 			for (int scaleIdx=0; scaleIdx<Constants.SCALE_MULTIPLIER.length; scaleIdx++){ | ||||||
| 			for (int multiplier=0; multiplier<Constants.UNIT_MULTIPLIER.length; multiplier++){ | 				long scaleFactor = magnitudeMultiplier * Constants.SCALE_MULTIPLIER[scaleIdx]; | ||||||
| 				long scaleFactor = magnitudeMultiplier * Constants.UNIT_MULTIPLIER[multiplier]; |  | ||||||
| 				long range = scaleFactor*clientAreaWidth; | 				long range = scaleFactor*clientAreaWidth; | ||||||
| 			    if( range >= duration) | 			    if( range >= duration) | ||||||
| 			    	return magnitude*Constants.UNIT_MULTIPLIER.length+multiplier; | 			    	return unitIdx*Constants.SCALE_MULTIPLIER.length+scaleIdx; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		return -1; | 		return -1; | ||||||
| @@ -241,17 +241,17 @@ public class WaveformCanvas extends Canvas { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public long getScaleFactorPow10() { |     public long getScaleFactorPow10() { | ||||||
|     	int scale = level/Constants.UNIT_MULTIPLIER.length; |     	int scale = level/Constants.SCALE_MULTIPLIER.length; | ||||||
|     	double res = Math.pow(1000, scale); |     	double res = Math.pow(1000, scale); | ||||||
|     	return (long) res; |     	return (long) res; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public String getUnitStr(){ |     public String getUnitStr(){ | ||||||
|         return Constants.UNIT_STRING[level/Constants.UNIT_MULTIPLIER.length]; |         return Constants.UNIT_STRING[level/Constants.SCALE_MULTIPLIER.length]; | ||||||
|     } |     } | ||||||
|       |       | ||||||
|     public int getUnitMultiplier(){ |     public long getUnitMultiplier(){ | ||||||
|         return Constants.UNIT_MULTIPLIER[level%Constants.UNIT_MULTIPLIER.length]; |         return Constants.SCALE_MULTIPLIER[level%Constants.SCALE_MULTIPLIER.length]; | ||||||
|     } |     } | ||||||
|      |      | ||||||
|     public long getTimeForOffset(int xOffset){ |     public long getTimeForOffset(int xOffset){ | ||||||
|   | |||||||
| @@ -13,7 +13,6 @@ package com.minres.scviewer.database.ui.swt.internal; | |||||||
| import java.beans.PropertyChangeEvent; | import java.beans.PropertyChangeEvent; | ||||||
| import java.beans.PropertyChangeListener; | import java.beans.PropertyChangeListener; | ||||||
| import java.beans.PropertyChangeSupport; | import java.beans.PropertyChangeSupport; | ||||||
| import java.text.DecimalFormat; |  | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
| import java.util.Arrays; | import java.util.Arrays; | ||||||
| import java.util.Collection; | import java.util.Collection; | ||||||
| @@ -1475,7 +1474,7 @@ public class WaveformView implements IWaveformView { | |||||||
| 		StringBuilder sb = new StringBuilder(); | 		StringBuilder sb = new StringBuilder(); | ||||||
| 		double dTime = time; | 		double dTime = time; | ||||||
| 		double scaledTime = dTime / waveformCanvas.getScaleFactorPow10(); | 		double scaledTime = dTime / waveformCanvas.getScaleFactorPow10(); | ||||||
| 		return sb.append(Constants.TIME_FORMAT[waveformCanvas.getZoomLevel()].format(scaledTime)).append(waveformCanvas.getUnitStr()).toString(); | 		return sb.append(Constants.getTimeFormatForLevel(waveformCanvas.getZoomLevel()).format(scaledTime)).append(waveformCanvas.getUnitStr()).toString(); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/* | 	/* | ||||||
| @@ -1485,11 +1484,11 @@ public class WaveformView implements IWaveformView { | |||||||
| 	 */ | 	 */ | ||||||
| 	@Override | 	@Override | ||||||
| 	public String[] getZoomLevels() { | 	public String[] getZoomLevels() { | ||||||
| 		String[] res = new String[Constants.UNIT_MULTIPLIER.length * Constants.UNIT_STRING.length]; | 		String[] res = new String[Constants.SCALE_MULTIPLIER.length * Constants.UNIT_STRING.length]; | ||||||
| 		int index = 0; | 		int index = 0; | ||||||
| 		for (String unit : Constants.UNIT_STRING) { | 		for (String unit : Constants.UNIT_STRING) { | ||||||
| 			for (int factor : Constants.UNIT_MULTIPLIER) { | 			for (long factor : Constants.SCALE_MULTIPLIER) { | ||||||
| 				res[index++] = Integer.toString(factor) + unit; | 				res[index++] = Long.toString(factor) + unit; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		return res; | 		return res; | ||||||
|   | |||||||
| @@ -5,9 +5,6 @@ import java.io.File; | |||||||
| import javax.annotation.PostConstruct; | import javax.annotation.PostConstruct; | ||||||
| import javax.inject.Inject; | import javax.inject.Inject; | ||||||
|  |  | ||||||
| import org.eclipse.e4.ui.model.application.ui.basic.MPart; |  | ||||||
| import org.eclipse.jface.dialogs.Dialog; |  | ||||||
| import org.eclipse.jface.dialogs.IDialogConstants; |  | ||||||
| import org.eclipse.jface.dialogs.MessageDialog; | import org.eclipse.jface.dialogs.MessageDialog; | ||||||
| import org.eclipse.jface.resource.ImageDescriptor; | import org.eclipse.jface.resource.ImageDescriptor; | ||||||
| import org.eclipse.jface.resource.ResourceLocator; | import org.eclipse.jface.resource.ResourceLocator; | ||||||
| @@ -17,8 +14,6 @@ import org.eclipse.swt.browser.Browser; | |||||||
| import org.eclipse.swt.browser.LocationListener; | import org.eclipse.swt.browser.LocationListener; | ||||||
| import org.eclipse.swt.browser.ProgressEvent; | import org.eclipse.swt.browser.ProgressEvent; | ||||||
| import org.eclipse.swt.browser.ProgressListener; | import org.eclipse.swt.browser.ProgressListener; | ||||||
| import org.eclipse.swt.graphics.Image; |  | ||||||
| import org.eclipse.swt.graphics.Point; |  | ||||||
| import org.eclipse.swt.layout.GridData; | import org.eclipse.swt.layout.GridData; | ||||||
| import org.eclipse.swt.layout.GridLayout; | import org.eclipse.swt.layout.GridLayout; | ||||||
| import org.eclipse.swt.widgets.Composite; | import org.eclipse.swt.widgets.Composite; | ||||||
| @@ -26,7 +21,6 @@ import org.eclipse.swt.widgets.Control; | |||||||
| import org.eclipse.swt.widgets.Label; | import org.eclipse.swt.widgets.Label; | ||||||
| import org.eclipse.swt.widgets.Listener; | import org.eclipse.swt.widgets.Listener; | ||||||
| import org.eclipse.swt.widgets.ProgressBar; | import org.eclipse.swt.widgets.ProgressBar; | ||||||
| import org.eclipse.swt.widgets.Shell; |  | ||||||
| import org.eclipse.swt.widgets.Text; | import org.eclipse.swt.widgets.Text; | ||||||
| import org.eclipse.swt.widgets.ToolBar; | import org.eclipse.swt.widgets.ToolBar; | ||||||
| import org.eclipse.swt.widgets.ToolItem; | import org.eclipse.swt.widgets.ToolItem; | ||||||
|   | |||||||
| @@ -19,7 +19,6 @@ import org.eclipse.jface.viewers.ITreeContentProvider; | |||||||
|  |  | ||||||
| import com.minres.scviewer.database.IHierNode; | import com.minres.scviewer.database.IHierNode; | ||||||
| import com.minres.scviewer.database.IWaveform; | import com.minres.scviewer.database.IWaveform; | ||||||
| import com.minres.scviewer.database.IWaveformDb; |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * The Class TxDbContentProvider providing the tree content of a database for the respective viewer. |  * The Class TxDbContentProvider providing the tree content of a database for the respective viewer. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user